diff --git a/src/files-ui/components/avatar/Avatar.scss b/src/files-ui/Avatar/Avatar.scss similarity index 100% rename from src/files-ui/components/avatar/Avatar.scss rename to src/files-ui/Avatar/Avatar.scss diff --git a/src/files-ui/components/avatar/Avatar.tsx b/src/files-ui/Avatar/Avatar.tsx similarity index 95% rename from src/files-ui/components/avatar/Avatar.tsx rename to src/files-ui/Avatar/Avatar.tsx index 3367810aa2a9d2414c59bca32c278039a2f71f3d..e956c12e85fd2b5d6e78fe64748b23cb7c1c681b 100644 --- a/src/files-ui/components/avatar/Avatar.tsx +++ b/src/files-ui/Avatar/Avatar.tsx @@ -2,11 +2,11 @@ import * as React from "react"; import { mergeProps } from "../overridable/mergeProps"; import { AvatarProps, defaultAvatarProps } from "./AvatarProps"; import "./Avatar.scss"; -import InputHidden from "../input-hidden/InputHidden"; +import InputHidden from "../InputHidden/InputHidden"; import { useAvatarStyle } from "./useAvatarStyle"; -import { ImagePreview } from "../previews"; import InfiniteLoader from "../loader/InfiniteLoader/InfiniteLoader"; -import Layer from "../file-mosaic/components/file-mosaic-layer/Layer"; +import Layer from "../FileMosaic/components/file-mosaic-layer/Layer"; +import ImagePreview from "../ImagePreview/ImagePreview"; const Avatar: React.FC<AvatarProps> = (props: AvatarProps) => { const { readOnly, diff --git a/src/files-ui/components/avatar/AvatarProps.ts b/src/files-ui/Avatar/AvatarProps.ts similarity index 100% rename from src/files-ui/components/avatar/AvatarProps.ts rename to src/files-ui/Avatar/AvatarProps.ts diff --git a/src/files-ui/components/avatar/index.ts b/src/files-ui/Avatar/index.ts similarity index 100% rename from src/files-ui/components/avatar/index.ts rename to src/files-ui/Avatar/index.ts diff --git a/src/files-ui/components/avatar/useAvatarClassName.ts b/src/files-ui/Avatar/useAvatarClassName.ts similarity index 100% rename from src/files-ui/components/avatar/useAvatarClassName.ts rename to src/files-ui/Avatar/useAvatarClassName.ts diff --git a/src/files-ui/components/avatar/useAvatarStyle.ts b/src/files-ui/Avatar/useAvatarStyle.ts similarity index 100% rename from src/files-ui/components/avatar/useAvatarStyle.ts rename to src/files-ui/Avatar/useAvatarStyle.ts diff --git a/src/files-ui/components/download-hidden/DownloadHidden.tsx b/src/files-ui/DownloadHidden/DownloadHidden.tsx similarity index 100% rename from src/files-ui/components/download-hidden/DownloadHidden.tsx rename to src/files-ui/DownloadHidden/DownloadHidden.tsx diff --git a/src/files-ui/components/drop-layer/components/DropLayer.tsx b/src/files-ui/DropLayer/components/DropLayer.tsx similarity index 100% rename from src/files-ui/components/drop-layer/components/DropLayer.tsx rename to src/files-ui/DropLayer/components/DropLayer.tsx diff --git a/src/files-ui/components/drop-layer/components/DropLayerProps.scss b/src/files-ui/DropLayer/components/DropLayerProps.scss similarity index 100% rename from src/files-ui/components/drop-layer/components/DropLayerProps.scss rename to src/files-ui/DropLayer/components/DropLayerProps.scss diff --git a/src/files-ui/components/drop-layer/components/DropLayerProps.ts b/src/files-ui/DropLayer/components/DropLayerProps.ts similarity index 100% rename from src/files-ui/components/drop-layer/components/DropLayerProps.ts rename to src/files-ui/DropLayer/components/DropLayerProps.ts diff --git a/src/files-ui/components/drop-layer/utils/dropLayerDynamicStyle.ts b/src/files-ui/DropLayer/utils/dropLayerDynamicStyle.ts similarity index 89% rename from src/files-ui/components/drop-layer/utils/dropLayerDynamicStyle.ts rename to src/files-ui/DropLayer/utils/dropLayerDynamicStyle.ts index 3a1cabd7df57153f7459b0cdb100b0653d3ae68a..c81aae7a12a6efa7f61b91f027759198da435f67 100644 --- a/src/files-ui/components/drop-layer/utils/dropLayerDynamicStyle.ts +++ b/src/files-ui/DropLayer/utils/dropLayerDynamicStyle.ts @@ -1,5 +1,6 @@ -import { completeAsureColor } from "../../../core"; -import { DEFAULT_BORDER_RADIUS } from "../../dropzone/components/dropzone/DropzoneProps"; +import { completeAsureColor } from "../../core"; +import { DEFAULT_BORDER_RADIUS } from "../../Dropzone/components/dropzone/DropzoneProps"; + export const makeDropLayerDynamicStyle = ( dropzoneId: string, diff --git a/src/files-ui/components/dropzone/components/DropzoneButtons/DropzoneButtons.scss b/src/files-ui/Dropzone/components/DropzoneButtons/DropzoneButtons.scss similarity index 100% rename from src/files-ui/components/dropzone/components/DropzoneButtons/DropzoneButtons.scss rename to src/files-ui/Dropzone/components/DropzoneButtons/DropzoneButtons.scss diff --git a/src/files-ui/components/dropzone/components/DropzoneButtons/DropzoneButtons.tsx b/src/files-ui/Dropzone/components/DropzoneButtons/DropzoneButtons.tsx similarity index 95% rename from src/files-ui/components/dropzone/components/DropzoneButtons/DropzoneButtons.tsx rename to src/files-ui/Dropzone/components/DropzoneButtons/DropzoneButtons.tsx index fffb951611ac5255e250a09bbf039aa8039e0491..4b5cdc4fb7ccd3167b596d6f901b712eb8e56f06 100644 --- a/src/files-ui/components/dropzone/components/DropzoneButtons/DropzoneButtons.tsx +++ b/src/files-ui/Dropzone/components/DropzoneButtons/DropzoneButtons.tsx @@ -1,6 +1,6 @@ import * as React from "react"; -import { addClassName, Localization } from "../../../../core"; -import { MaterialButton } from "../../../material-button"; +import { addClassName, Localization } from "../../../core"; +import { MaterialButton } from "../../../MaterialButton"; import { ActionButtonItem, DropzoneActions } from "../dropzone/DropzoneProps"; import "./DropzoneButtons.scss"; diff --git a/src/files-ui/components/dropzone/components/DropzoneChildren/DropzoneChildren.scss b/src/files-ui/Dropzone/components/DropzoneChildren/DropzoneChildren.scss similarity index 100% rename from src/files-ui/components/dropzone/components/DropzoneChildren/DropzoneChildren.scss rename to src/files-ui/Dropzone/components/DropzoneChildren/DropzoneChildren.scss diff --git a/src/files-ui/components/dropzone/components/DropzoneChildren/DropzoneChildren.tsx b/src/files-ui/Dropzone/components/DropzoneChildren/DropzoneChildren.tsx similarity index 97% rename from src/files-ui/components/dropzone/components/DropzoneChildren/DropzoneChildren.tsx rename to src/files-ui/Dropzone/components/DropzoneChildren/DropzoneChildren.tsx index f030f56bda74f70647ae9aa30c77b442f8728c6b..99be7e75990fd620599bb98fc217a6f6877f1abd 100644 --- a/src/files-ui/components/dropzone/components/DropzoneChildren/DropzoneChildren.tsx +++ b/src/files-ui/Dropzone/components/DropzoneChildren/DropzoneChildren.tsx @@ -3,7 +3,7 @@ import { DropzoneLocalizerSelector, Localization, LocalLabels, -} from "../../../../core"; +} from "../../../core"; import "./DropzoneChildren.scss"; declare type DropzoneChildrenProps = { diff --git a/src/files-ui/components/dropzone/components/DropzoneDisabledLayer/DropzoneDisabledLayer.scss b/src/files-ui/Dropzone/components/DropzoneDisabledLayer/DropzoneDisabledLayer.scss similarity index 100% rename from src/files-ui/components/dropzone/components/DropzoneDisabledLayer/DropzoneDisabledLayer.scss rename to src/files-ui/Dropzone/components/DropzoneDisabledLayer/DropzoneDisabledLayer.scss diff --git a/src/files-ui/components/dropzone/components/DropzoneDisabledLayer/DropzoneDisabledLayer.tsx b/src/files-ui/Dropzone/components/DropzoneDisabledLayer/DropzoneDisabledLayer.tsx similarity index 87% rename from src/files-ui/components/dropzone/components/DropzoneDisabledLayer/DropzoneDisabledLayer.tsx rename to src/files-ui/Dropzone/components/DropzoneDisabledLayer/DropzoneDisabledLayer.tsx index e07d351aefa37ff4269f4f91acc9dd4a5a0978fb..486a47f0e9aa272435d15e0f5269cba2a96a705c 100644 --- a/src/files-ui/components/dropzone/components/DropzoneDisabledLayer/DropzoneDisabledLayer.tsx +++ b/src/files-ui/Dropzone/components/DropzoneDisabledLayer/DropzoneDisabledLayer.tsx @@ -1,11 +1,12 @@ import * as React from "react"; import { addClassName, - //handleClickUtil, - //handleDragUtil, - //handleDropUtil, -} from "../../../../core"; -import { handleClickUtil, handleDragUtil, handleDropUtil } from "../../../../files-ui-react/utils"; +} from "../../../core"; +import { + handleClickUtil, + handleDragUtil, + handleDropUtil, +} from "../../../utils"; import "./DropzoneDisabledLayer.scss"; export declare type DropzoneDisabledLayerProps = { open?: boolean; diff --git a/src/files-ui/components/dropzone/components/DropzoneFooter/DropzoneFooter.tsx b/src/files-ui/Dropzone/components/DropzoneFooter/DropzoneFooter.tsx similarity index 94% rename from src/files-ui/components/dropzone/components/DropzoneFooter/DropzoneFooter.tsx rename to src/files-ui/Dropzone/components/DropzoneFooter/DropzoneFooter.tsx index 5d5ac60815114a672805b453ee2825d8cf7b873b..159ae739d41643937146f6d784d4c9aeb51cc599 100644 --- a/src/files-ui/components/dropzone/components/DropzoneFooter/DropzoneFooter.tsx +++ b/src/files-ui/Dropzone/components/DropzoneFooter/DropzoneFooter.tsx @@ -3,11 +3,10 @@ import { addClassName, DropzoneLocalizerSelector, FunctionLabel, - //handleClickUtil, Localization, LocalLabels, -} from "../../../../core"; -import { handleClickUtil } from "../../../../files-ui-react/utils"; +} from "../../../core"; +import { handleClickUtil } from "../../../utils"; import { FooterConfig } from "../dropzone/DropzoneProps"; export interface DropzoneFooterProps extends FooterConfig { diff --git a/src/files-ui/components/dropzone/components/DropzoneHeader/DropzoneHeader.tsx b/src/files-ui/Dropzone/components/DropzoneHeader/DropzoneHeader.tsx similarity index 99% rename from src/files-ui/components/dropzone/components/DropzoneHeader/DropzoneHeader.tsx rename to src/files-ui/Dropzone/components/DropzoneHeader/DropzoneHeader.tsx index 7b3d48c48c4b33538da42cd413ce6b971e7c0d58..2361326d53b5243527fc7e545056a12ec9796371 100644 --- a/src/files-ui/components/dropzone/components/DropzoneHeader/DropzoneHeader.tsx +++ b/src/files-ui/Dropzone/components/DropzoneHeader/DropzoneHeader.tsx @@ -1,4 +1,5 @@ import * as React from "react"; + import { addClassName, DropzoneLocalizerSelector, @@ -6,7 +7,7 @@ import { FunctionLabel, Localization, LocalLabels, -} from "../../../../core"; +} from "../../../core"; import { UploadingProcess, Clean, Cancel, Upload } from "../../../icons"; export type DropzoneHeaderProps = { diff --git a/src/files-ui/components/dropzone/components/dropzone/Dropzone.scss b/src/files-ui/Dropzone/components/dropzone/Dropzone.scss similarity index 100% rename from src/files-ui/components/dropzone/components/dropzone/Dropzone.scss rename to src/files-ui/Dropzone/components/dropzone/Dropzone.scss diff --git a/src/files-ui/components/dropzone/components/dropzone/Dropzone.tsx b/src/files-ui/Dropzone/components/dropzone/Dropzone.tsx similarity index 97% rename from src/files-ui/components/dropzone/components/dropzone/Dropzone.tsx rename to src/files-ui/Dropzone/components/dropzone/Dropzone.tsx index 8a7bf5bb6d52389373294be63ccc4c680a995f94..f7b2610f55edcf0f5f3534cb23281b7c7e2dc326 100644 --- a/src/files-ui/components/dropzone/components/dropzone/Dropzone.tsx +++ b/src/files-ui/Dropzone/components/dropzone/Dropzone.tsx @@ -28,10 +28,10 @@ import { unexpectedErrorUploadResult, getRandomInt, addClassName, - Localization, -} from "../../../../core"; + Localization,completeAsureColor, +} from "../../../core"; import { mergeProps } from "../../../overridable"; -import InputHidden from "../../../input-hidden/InputHidden"; +import InputHidden from "../../../InputHidden/InputHidden"; import { ActionButtons, defaultDrozoneProps, @@ -43,25 +43,23 @@ import { HeaderConfig, } from "./DropzoneProps"; import DropzoneChildren from "../DropzoneChildren/DropzoneChildren"; -import useDropzoneClassName from "./../../useDropzoneClassName"; import DropzoneDisabledLayer from "../DropzoneDisabledLayer/DropzoneDisabledLayer"; import "./Dropzone.scss"; -import "./../../DropzoneRipple.scss"; -import useDropLayerClassName from "../../../drop-layer/hooks/useDropLayerClassName"; -import DropLayer from "../../../drop-layer/components/DropLayer"; -import useDropzoneFileListUpdater from "../../../../hooks/useDropzoneFileUpdater"; +import "./DropzoneRipple.scss"; + import DropzoneHeader from "../DropzoneHeader/DropzoneHeader"; import DropzoneFooter from "../DropzoneFooter/DropzoneFooter"; import DropzoneButtons from "../DropzoneButtons/DropzoneButtons"; -import { completeAsureColor } from "../../../../core"; import { createFuiRippleFromDiv, handleClickInput, handleDragUtil, handleDropUtil, -} from "../../../../files-ui-react/utils"; -import { FilesUiContext } from "../../../../FilesUiProvider/FilesUiContext"; +} from "../../../utils"; +import { FilesUiContext } from "../../../FilesUiProvider/FilesUiContext"; +import DropLayer from "../../../DropLayer/components/DropLayer"; +import { useDropzoneFileListUpdater, useDropLayerClassName, useDropzoneClassName } from "../../../hooks"; //import { print_manager } from "../../../../../utils"; diff --git a/src/files-ui/components/dropzone/components/dropzone/DropzoneProps.ts b/src/files-ui/Dropzone/components/dropzone/DropzoneProps.ts similarity index 99% rename from src/files-ui/components/dropzone/components/dropzone/DropzoneProps.ts rename to src/files-ui/Dropzone/components/dropzone/DropzoneProps.ts index 352a2b266cb9f471266fc4e1dfa21969361a4550..df0714536c82a7bd52bf7d1fbe1b3cfd758dd9a3 100644 --- a/src/files-ui/components/dropzone/components/dropzone/DropzoneProps.ts +++ b/src/files-ui/Dropzone/components/dropzone/DropzoneProps.ts @@ -1,4 +1,4 @@ -import { ExtFile, ValidateFileResponse, Localization, UploadConfig } from "../../../../core"; +import { ExtFile, ValidateFileResponse, Localization, UploadConfig } from "../../../core"; import * as React from "react"; import { OverridableComponentProps } from "../../../overridable"; diff --git a/src/files-ui/components/dropzone/DropzoneRipple.scss b/src/files-ui/Dropzone/components/dropzone/DropzoneRipple.scss similarity index 100% rename from src/files-ui/components/dropzone/DropzoneRipple.scss rename to src/files-ui/Dropzone/components/dropzone/DropzoneRipple.scss diff --git a/src/files-ui/components/dropzone/index.ts b/src/files-ui/Dropzone/index.ts similarity index 100% rename from src/files-ui/components/dropzone/index.ts rename to src/files-ui/Dropzone/index.ts diff --git a/src/files-ui/components/file-card/FileCard.scss b/src/files-ui/FileCard/FileCard.scss similarity index 100% rename from src/files-ui/components/file-card/FileCard.scss rename to src/files-ui/FileCard/FileCard.scss diff --git a/src/files-ui/components/file-card/FileCard.tsx b/src/files-ui/FileCard/FileCard.tsx similarity index 93% rename from src/files-ui/components/file-card/FileCard.tsx rename to src/files-ui/FileCard/FileCard.tsx index 69d27de19c1a7b1a8bf6f020a48cf43281cd4d24..de6a33e60c12322736878d1dc8da60f0f8d0d129 100644 --- a/src/files-ui/components/file-card/FileCard.tsx +++ b/src/files-ui/FileCard/FileCard.tsx @@ -9,21 +9,20 @@ import { Localization, //handleClickUtil, shrinkWord, -} from "../../core"; -import useProgress from "../file-mosaic/hooks/useProgress"; -import useFileMosaicInitializer from "../file-mosaic/hooks/useFileMosaicInitializer"; -import { useIsUploading } from "../file-mosaic/hooks/useIsUploading"; -import LayerContainer from "../file-mosaic/components/file-mosaic-layer/LayerContainer"; -import Layer from "../file-mosaic/components/file-mosaic-layer/Layer"; -import FileMosaicImageLayer from "../file-mosaic/components/FIleMosaicImageLayer/FileMosaicImageLayer"; +} from "../core"; + import FileCardRightActions from "./components/FileCardRightActions"; import FileCardInfoLayer from "./components/FileCardInfoLayer"; -import FileMosaicStatus from "../file-mosaic/components/FileMosaicStatus/FileMosaicStatus"; import FileCardUploadLayer from "./components/FileCardUploadLayer"; import { Tooltip } from "../tooltip"; -import DownloadHidden from "../download-hidden/DownloadHidden"; -import { FilesUiContext } from "../../FilesUiProvider/FilesUiContext"; -import { handleClickUtil } from "../../files-ui-react/utils"; +import DownloadHidden from "../DownloadHidden/DownloadHidden"; +import { FilesUiContext } from "../FilesUiProvider/FilesUiContext"; +import { FileMosaicStatus } from "../FileMosaic"; +import Layer from "../FileMosaic/components/file-mosaic-layer/Layer"; +import LayerContainer from "../FileMosaic/components/file-mosaic-layer/LayerContainer"; +import FileMosaicImageLayer from "../FileMosaic/components/FIleMosaicImageLayer/FileMosaicImageLayer"; +import { useProgress, useFileMosaicInitializer, useIsUploading } from "../hooks"; +import { handleClickUtil } from "../utils"; const setFinalElevation = (elevation: string | number): number => { // let finalElevation: number = ""; diff --git a/src/files-ui/components/file-card/FileCardProps.ts b/src/files-ui/FileCard/FileCardProps.ts similarity index 91% rename from src/files-ui/components/file-card/FileCardProps.ts rename to src/files-ui/FileCard/FileCardProps.ts index ca3012323eb979e734e5eb3257918ebe700760c2..d0ced8ffc57f7cc18a1a4cd101684f9ac556b83e 100644 --- a/src/files-ui/components/file-card/FileCardProps.ts +++ b/src/files-ui/FileCard/FileCardProps.ts @@ -1,4 +1,4 @@ -import { FileMosaicPropsMap } from "../file-mosaic/components/file-mosaic/FileMosaicProps"; +import { FileMosaicPropsMap } from "../FileMosaic/components/file-mosaic/FileMosaicProps"; export interface FileCardPropsMap extends FileMosaicPropsMap { diff --git a/src/files-ui/components/file-card/components/FileCardInfoLayer.tsx b/src/files-ui/FileCard/components/FileCardInfoLayer.tsx similarity index 80% rename from src/files-ui/components/file-card/components/FileCardInfoLayer.tsx rename to src/files-ui/FileCard/components/FileCardInfoLayer.tsx index 4a36ce738f497d2e003ded6c8fdc5456314206df..526ef80aa32785dc854c6bef5670127892161d94 100644 --- a/src/files-ui/components/file-card/components/FileCardInfoLayer.tsx +++ b/src/files-ui/FileCard/components/FileCardInfoLayer.tsx @@ -1,7 +1,6 @@ import * as React from "react"; -import { FileItemLocalizerSelector, LocalLabels } from "../../../core"; -import { FileMosaicInfoLayerProps } from "../../file-mosaic/components/FileMosaicInfoLayer/FileMosaicInfoLayerProps"; -import FileMosaicStatus from "../../file-mosaic/components/FileMosaicStatus/FileMosaicStatus"; +import { FileItemLocalizerSelector, LocalLabels } from "../../core"; +import { FileMosaicInfoLayerProps } from "../../FileMosaic"; import { Cancel } from "../../icons"; type FileCardInfoLayerProps = FileMosaicInfoLayerProps; const FileCardInfoLayer: React.FC<FileCardInfoLayerProps> = ( diff --git a/src/files-ui/components/file-card/components/FileCardPaper.scss b/src/files-ui/FileCard/components/FileCardPaper.scss similarity index 100% rename from src/files-ui/components/file-card/components/FileCardPaper.scss rename to src/files-ui/FileCard/components/FileCardPaper.scss diff --git a/src/files-ui/components/file-card/components/FileCardRightActions.scss b/src/files-ui/FileCard/components/FileCardRightActions.scss similarity index 100% rename from src/files-ui/components/file-card/components/FileCardRightActions.scss rename to src/files-ui/FileCard/components/FileCardRightActions.scss diff --git a/src/files-ui/components/file-card/components/FileCardRightActions.tsx b/src/files-ui/FileCard/components/FileCardRightActions.tsx similarity index 96% rename from src/files-ui/components/file-card/components/FileCardRightActions.tsx rename to src/files-ui/FileCard/components/FileCardRightActions.tsx index 602a1c2b47d1226c8ac6683c657cdd19e04ac972..a3ded644604b8f1a5733b33675187925ce02a9a0 100644 --- a/src/files-ui/components/file-card/components/FileCardRightActions.tsx +++ b/src/files-ui/FileCard/components/FileCardRightActions.tsx @@ -1,5 +1,4 @@ import * as React from "react"; -import { Localization, UPLOADSTATUS } from "../../../core"; import { Clear, DownloadFile, @@ -13,7 +12,7 @@ declare type FileCardRightActionsProps = { darkMode?: boolean; deleteIcon?: boolean; onDelete?: Function; - + imageIcon: boolean; onSee: ((imageSource: string | undefined) => void) | undefined; @@ -51,7 +50,7 @@ const FileCardRightActions: React.FC<FileCardRightActionsProps> = ( if (visible) return ( <> - <div className="file-card-right-layer-header" > + <div className="file-card-right-layer-header"> {isActive && deleteIcon && ( <Clear className={ diff --git a/src/files-ui/components/file-card/components/FileCardUploadLayer.scss b/src/files-ui/FileCard/components/FileCardUploadLayer.scss similarity index 100% rename from src/files-ui/components/file-card/components/FileCardUploadLayer.scss rename to src/files-ui/FileCard/components/FileCardUploadLayer.scss diff --git a/src/files-ui/components/file-card/components/FileCardUploadLayer.tsx b/src/files-ui/FileCard/components/FileCardUploadLayer.tsx similarity index 97% rename from src/files-ui/components/file-card/components/FileCardUploadLayer.tsx rename to src/files-ui/FileCard/components/FileCardUploadLayer.tsx index 57f0c68a5423573f862d2b47de36838c056ee3bb..013d20a87289a0d86bb9da43877ee149ec5b2c99 100644 --- a/src/files-ui/components/file-card/components/FileCardUploadLayer.tsx +++ b/src/files-ui/FileCard/components/FileCardUploadLayer.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { Localization, UPLOADSTATUS } from "../../../core"; +import { Localization, UPLOADSTATUS } from "../../core"; import { AbortedStatus, EmptyStatus, @@ -7,7 +7,7 @@ import { PreparingStatus, SuccessStatus, UploadingStatus, -} from "../../file-status"; +} from "../../FileStatus"; import "./FileCardUploadLayer.scss"; export interface FileCardUploadLayerPropsMap { visible?: boolean; diff --git a/src/files-ui/components/file-input-button/FileInputButton.tsx b/src/files-ui/FileInputButton/FileInputButton.tsx similarity index 96% rename from src/files-ui/components/file-input-button/FileInputButton.tsx rename to src/files-ui/FileInputButton/FileInputButton.tsx index d300d8cb8ad724c2d146874e619a7f961959efa1..0a7a275a6a69fa32f27f646f49fa6b35f62803ff 100644 --- a/src/files-ui/components/file-input-button/FileInputButton.tsx +++ b/src/files-ui/FileInputButton/FileInputButton.tsx @@ -1,39 +1,37 @@ import * as React from "react"; import { - cleanInput, + Localization, + UploadConfig, + LocalLabels, DropzoneLocalizerSelector, + isValidateActive, ExtFile, ExtFileInstance, - ExtFileManager, - fakeFuiUpload, - fileListToExtFileArray, - FileValidatorProps, - getRandomInt, - //FunctionLabel, - //handleClickInput, - instantPreparingToUploadOne, isUploadAbleExtFile, - isValidateActive, - Localization, - LocalLabels, - sanitizeArrExtFile, + ExtFileManager, sleepPreparing, sleepTransition, - toUploadableExtFileList, - unexpectedErrorUploadResult, - UploadConfig, + instantPreparingToUploadOne, + sanitizeArrExtFile, + fakeFuiUpload, + getRandomInt, uploadExtFile, - //UploadResponse, + unexpectedErrorUploadResult, + FileValidatorProps, validateExtFileList, -} from "../../core"; -import { handleClickInput } from "../../files-ui-react/utils"; -import { FilesUiContext } from "../../FilesUiProvider/FilesUiContext"; -import useDropzoneFileListUpdater from "../../hooks/useDropzoneFileUpdater"; -import { DropzoneActions } from "../dropzone/components/dropzone/DropzoneProps"; -import DropzoneButtons from "../dropzone/components/DropzoneButtons/DropzoneButtons"; -import InputHidden from "../input-hidden/InputHidden"; -import { MaterialButton } from "../material-button"; + fileListToExtFileArray, + toUploadableExtFileList, + cleanInput, +} from "../core"; +import { DropzoneActions } from "../Dropzone/components/dropzone/DropzoneProps"; +import DropzoneButtons from "../Dropzone/components/DropzoneButtons/DropzoneButtons"; +import { FilesUiContext } from "../FilesUiProvider/FilesUiContext"; +import { useDropzoneFileListUpdater } from "../hooks"; +import InputHidden from "../InputHidden/InputHidden"; +import { MaterialButton } from "../MaterialButton"; + import { mergeProps } from "../overridable"; +import { handleClickInput } from "../utils"; import { defaultFileInputButtonProps, FileInputButtonProps, diff --git a/src/files-ui/components/file-input-button/InputButtonProps.ts b/src/files-ui/FileInputButton/InputButtonProps.ts similarity index 95% rename from src/files-ui/components/file-input-button/InputButtonProps.ts rename to src/files-ui/FileInputButton/InputButtonProps.ts index 8011f4d002369e509a1ee4d54b98cceae9958d58..9540459a9fcab2d9925357a87aaba96a7ff8c1ac 100644 --- a/src/files-ui/components/file-input-button/InputButtonProps.ts +++ b/src/files-ui/FileInputButton/InputButtonProps.ts @@ -1,6 +1,6 @@ -import { ValidateFileResponse, ExtFile, Localization, UploadConfig } from "../../core"; -import { DropzoneActions } from "../dropzone/components/dropzone/DropzoneProps"; -import { MaterialButtonProps } from "../material-button/MaterialButtonProps"; +import { ValidateFileResponse, ExtFile, Localization, UploadConfig } from "../core"; +import { ActionButtons } from "../Dropzone/components/dropzone/DropzoneProps"; +import { MaterialButtonProps } from "../MaterialButton/MaterialButtonProps"; interface InputButtonFullProps { /** @@ -116,7 +116,7 @@ interface InputButtonFullProps { This buttons triggresthe common opertions of the component such as clean, upload, abort and delete all. */ - actionButtons?: DropzoneActions; + actionButtons?: ActionButtons; // ADD OR REPLACE /** * The behaviour when new files are selected or dropped diff --git a/src/files-ui/components/file-input-button/index.ts b/src/files-ui/FileInputButton/index.ts similarity index 100% rename from src/files-ui/components/file-input-button/index.ts rename to src/files-ui/FileInputButton/index.ts diff --git a/src/files-ui/components/file-mosaic/components/FIleMosaicImageLayer/FileMosaicImageLayer.tsx b/src/files-ui/FileMosaic/components/FIleMosaicImageLayer/FileMosaicImageLayer.tsx similarity index 97% rename from src/files-ui/components/file-mosaic/components/FIleMosaicImageLayer/FileMosaicImageLayer.tsx rename to src/files-ui/FileMosaic/components/FIleMosaicImageLayer/FileMosaicImageLayer.tsx index 55f4935b34ff943369fa03962f8565d40c0a6fc5..18bda30f2bbb4bc83c59a50da5d8723b021c13ca 100644 --- a/src/files-ui/components/file-mosaic/components/FIleMosaicImageLayer/FileMosaicImageLayer.tsx +++ b/src/files-ui/FileMosaic/components/FIleMosaicImageLayer/FileMosaicImageLayer.tsx @@ -1,5 +1,6 @@ import * as React from "react"; -import { ImagePreview } from "../../../previews"; +import ImagePreview from "../../../ImagePreview/ImagePreview"; + interface FileMosaicImageLayerProps { /** * The image source diff --git a/src/files-ui/components/file-mosaic/components/FileMosaicInfoLayer/FileMosaicInfoLayer.scss b/src/files-ui/FileMosaic/components/FileMosaicInfoLayer/FileMosaicInfoLayer.scss similarity index 100% rename from src/files-ui/components/file-mosaic/components/FileMosaicInfoLayer/FileMosaicInfoLayer.scss rename to src/files-ui/FileMosaic/components/FileMosaicInfoLayer/FileMosaicInfoLayer.scss diff --git a/src/files-ui/components/file-mosaic/components/FileMosaicInfoLayer/FileMosaicInfoLayer.tsx b/src/files-ui/FileMosaic/components/FileMosaicInfoLayer/FileMosaicInfoLayer.tsx similarity index 99% rename from src/files-ui/components/file-mosaic/components/FileMosaicInfoLayer/FileMosaicInfoLayer.tsx rename to src/files-ui/FileMosaic/components/FileMosaicInfoLayer/FileMosaicInfoLayer.tsx index 2c8359f01623848c496c8034d9f7d044d059b012..c6c4bdb23aac113206101347672a38c6c589c78e 100644 --- a/src/files-ui/components/file-mosaic/components/FileMosaicInfoLayer/FileMosaicInfoLayer.tsx +++ b/src/files-ui/FileMosaic/components/FileMosaicInfoLayer/FileMosaicInfoLayer.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { FileItemLocalizerSelector, LocalLabels } from "../../../../core"; +import { FileItemLocalizerSelector, LocalLabels } from "../../../core"; import { Cancel } from "../../../icons"; import FileMosaicStatus from "../FileMosaicStatus/FileMosaicStatus"; import { FileMosaicInfoLayerProps } from "./FileMosaicInfoLayerProps"; diff --git a/src/files-ui/components/file-mosaic/components/FileMosaicInfoLayer/FileMosaicInfoLayerProps.ts b/src/files-ui/FileMosaic/components/FileMosaicInfoLayer/FileMosaicInfoLayerProps.ts similarity index 80% rename from src/files-ui/components/file-mosaic/components/FileMosaicInfoLayer/FileMosaicInfoLayerProps.ts rename to src/files-ui/FileMosaic/components/FileMosaicInfoLayer/FileMosaicInfoLayerProps.ts index c4ad738845ec57e4b6a15027dd9385db8de820eb..c141ae75822cd4a7f188c7a44b81bee9cf2c6910 100644 --- a/src/files-ui/components/file-mosaic/components/FileMosaicInfoLayer/FileMosaicInfoLayerProps.ts +++ b/src/files-ui/FileMosaic/components/FileMosaicInfoLayer/FileMosaicInfoLayerProps.ts @@ -1,4 +1,4 @@ -import { Localization, UPLOADSTATUS } from "../../../../core"; +import { Localization, UPLOADSTATUS } from "../../../core"; export type FileMosaicInfoLayerProps = { valid: boolean | null | undefined; diff --git a/src/files-ui/components/file-mosaic/components/FileMosaicMainLayer.tsx/FileMosaicMainLayer.scss b/src/files-ui/FileMosaic/components/FileMosaicMainLayer.tsx/FileMosaicMainLayer.scss similarity index 100% rename from src/files-ui/components/file-mosaic/components/FileMosaicMainLayer.tsx/FileMosaicMainLayer.scss rename to src/files-ui/FileMosaic/components/FileMosaicMainLayer.tsx/FileMosaicMainLayer.scss diff --git a/src/files-ui/components/file-mosaic/components/FileMosaicMainLayer.tsx/FileMosaicMainLayer.tsx b/src/files-ui/FileMosaic/components/FileMosaicMainLayer.tsx/FileMosaicMainLayer.tsx similarity index 100% rename from src/files-ui/components/file-mosaic/components/FileMosaicMainLayer.tsx/FileMosaicMainLayer.tsx rename to src/files-ui/FileMosaic/components/FileMosaicMainLayer.tsx/FileMosaicMainLayer.tsx diff --git a/src/files-ui/components/file-mosaic/components/FileMosaicMainLayer.tsx/FileMosaicMainLayerProps.ts b/src/files-ui/FileMosaic/components/FileMosaicMainLayer.tsx/FileMosaicMainLayerProps.ts similarity index 90% rename from src/files-ui/components/file-mosaic/components/FileMosaicMainLayer.tsx/FileMosaicMainLayerProps.ts rename to src/files-ui/FileMosaic/components/FileMosaicMainLayer.tsx/FileMosaicMainLayerProps.ts index d1858a20c978cbc73d35af42a89d2f7492cc3490..ed3f3dd442f410663f0c17a4f863be567b205aa1 100644 --- a/src/files-ui/components/file-mosaic/components/FileMosaicMainLayer.tsx/FileMosaicMainLayerProps.ts +++ b/src/files-ui/FileMosaic/components/FileMosaicMainLayer.tsx/FileMosaicMainLayerProps.ts @@ -1,4 +1,4 @@ -import { Localization, UPLOADSTATUS } from "../../../../core"; +import { Localization, UPLOADSTATUS } from "../../../core"; export interface FileMosaicMainLayerProps { darkMode?: boolean; diff --git a/src/files-ui/components/file-mosaic/components/FileMosaicName/FileMosaicName.tsx b/src/files-ui/FileMosaic/components/FileMosaicName/FileMosaicName.tsx similarity index 100% rename from src/files-ui/components/file-mosaic/components/FileMosaicName/FileMosaicName.tsx rename to src/files-ui/FileMosaic/components/FileMosaicName/FileMosaicName.tsx diff --git a/src/files-ui/components/file-mosaic/components/FileMosaicSize/FileMosaicSize.scss b/src/files-ui/FileMosaic/components/FileMosaicSize/FileMosaicSize.scss similarity index 100% rename from src/files-ui/components/file-mosaic/components/FileMosaicSize/FileMosaicSize.scss rename to src/files-ui/FileMosaic/components/FileMosaicSize/FileMosaicSize.scss diff --git a/src/files-ui/components/file-mosaic/components/FileMosaicSize/FileMosaicSize.tsx b/src/files-ui/FileMosaic/components/FileMosaicSize/FileMosaicSize.tsx similarity index 100% rename from src/files-ui/components/file-mosaic/components/FileMosaicSize/FileMosaicSize.tsx rename to src/files-ui/FileMosaic/components/FileMosaicSize/FileMosaicSize.tsx diff --git a/src/files-ui/components/file-mosaic/components/FileMosaicStatus/FileMosaicStatus.scss b/src/files-ui/FileMosaic/components/FileMosaicStatus/FileMosaicStatus.scss similarity index 100% rename from src/files-ui/components/file-mosaic/components/FileMosaicStatus/FileMosaicStatus.scss rename to src/files-ui/FileMosaic/components/FileMosaicStatus/FileMosaicStatus.scss diff --git a/src/files-ui/components/file-mosaic/components/FileMosaicStatus/FileMosaicStatus.tsx b/src/files-ui/FileMosaic/components/FileMosaicStatus/FileMosaicStatus.tsx similarity index 99% rename from src/files-ui/components/file-mosaic/components/FileMosaicStatus/FileMosaicStatus.tsx rename to src/files-ui/FileMosaic/components/FileMosaicStatus/FileMosaicStatus.tsx index 66dd014627d2163f8ce4678a104e01ef2cf2fa4d..7cccfd599c4c723e564f02585abc1900ef0cac19 100644 --- a/src/files-ui/components/file-mosaic/components/FileMosaicStatus/FileMosaicStatus.tsx +++ b/src/files-ui/FileMosaic/components/FileMosaicStatus/FileMosaicStatus.tsx @@ -3,7 +3,7 @@ import * as React from "react"; import { CheckCircle, CloudDone, DoDisturb, UploadError } from "../../../icons"; import { FileMosaicStatusProps } from "./FileMosaicStatusProps"; import "./FileMosaicStatus.scss"; -import { FileItemLocalizerSelector, LocalLabels } from "../../../../core"; +import { FileItemLocalizerSelector, LocalLabels } from "../../../core"; const FileMosaicStatus: React.FC<FileMosaicStatusProps> = ( props: FileMosaicStatusProps diff --git a/src/files-ui/components/file-mosaic/components/FileMosaicStatus/FileMosaicStatusProps.ts b/src/files-ui/FileMosaic/components/FileMosaicStatus/FileMosaicStatusProps.ts similarity index 88% rename from src/files-ui/components/file-mosaic/components/FileMosaicStatus/FileMosaicStatusProps.ts rename to src/files-ui/FileMosaic/components/FileMosaicStatus/FileMosaicStatusProps.ts index e449be638a27d7a09ddf7628d8a8d2c9c23e7743..b439eaa5bf7fac14fe16510fda89c7a206a435a7 100644 --- a/src/files-ui/components/file-mosaic/components/FileMosaicStatus/FileMosaicStatusProps.ts +++ b/src/files-ui/FileMosaic/components/FileMosaicStatus/FileMosaicStatusProps.ts @@ -1,4 +1,4 @@ -import { Localization, UPLOADSTATUS } from "../../../../core"; +import { Localization, UPLOADSTATUS } from "../../../core"; export interface FileMosaicStatusProps { diff --git a/src/files-ui/components/file-mosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayer.scss b/src/files-ui/FileMosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayer.scss similarity index 100% rename from src/files-ui/components/file-mosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayer.scss rename to src/files-ui/FileMosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayer.scss diff --git a/src/files-ui/components/file-mosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayer.tsx b/src/files-ui/FileMosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayer.tsx similarity index 97% rename from src/files-ui/components/file-mosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayer.tsx rename to src/files-ui/FileMosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayer.tsx index c288bad7aa4e4e643d9f209a7081df3c5188e87a..f12ab5ebf913fd65a378b57b0ca74094933f0bf9 100644 --- a/src/files-ui/components/file-mosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayer.tsx +++ b/src/files-ui/FileMosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayer.tsx @@ -1,16 +1,15 @@ import * as React from "react"; import { FileMosaicUploadLayerProps } from "./FileMosaicUploadLayerProps"; import "./FileMosaicUploadLayer.scss"; -import { UPLOADSTATUS } from "../../../../core"; - +import { UPLOADSTATUS } from "../../../core"; import { + PreparingStatus, + UploadingStatus, AbortedStatus, EmptyStatus, ErrorStatus, - PreparingStatus, SuccessStatus, - UploadingStatus, -} from "../../../file-status"; +} from "../../../FileStatus"; const FileMosaicUploadLayer: React.FC<FileMosaicUploadLayerProps> = ( props: FileMosaicUploadLayerProps diff --git a/src/files-ui/components/file-mosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayerLegacy.scss b/src/files-ui/FileMosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayerLegacy.scss similarity index 100% rename from src/files-ui/components/file-mosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayerLegacy.scss rename to src/files-ui/FileMosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayerLegacy.scss diff --git a/src/files-ui/components/file-mosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayerLegacy.tsx b/src/files-ui/FileMosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayerLegacy.tsx similarity index 99% rename from src/files-ui/components/file-mosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayerLegacy.tsx rename to src/files-ui/FileMosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayerLegacy.tsx index 8ae7926c8bdfb788d65f0a1cbca2903eb2d18c3c..4c5674e0396d4979c535e72bfb9e871ae964f08d 100644 --- a/src/files-ui/components/file-mosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayerLegacy.tsx +++ b/src/files-ui/FileMosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayerLegacy.tsx @@ -6,7 +6,7 @@ import { FileItemLocalizerSelector, LocalLabels, UPLOADSTATUS, -} from "../../../../core"; +} from "../../../core"; import { CheckCircle, CloudDone, UploadError } from "../../../icons"; import { DynamicLoader } from "../../../loader"; diff --git a/src/files-ui/components/file-mosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayerProps.ts b/src/files-ui/FileMosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayerProps.ts similarity index 84% rename from src/files-ui/components/file-mosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayerProps.ts rename to src/files-ui/FileMosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayerProps.ts index 69859573a3a2c89cb835e09e4ba623903d24380e..5d1fb28b79e6bd0e400a86972894cbe01ef19c4b 100644 --- a/src/files-ui/components/file-mosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayerProps.ts +++ b/src/files-ui/FileMosaic/components/FileMosaicUploadLayer/FileMosaicUploadLayerProps.ts @@ -1,4 +1,4 @@ -import { Localization, UPLOADSTATUS } from "../../../../core"; +import { Localization, UPLOADSTATUS } from "../../../core"; export interface FileMosaicUploadLayerPropsMap { visible?: boolean; diff --git a/src/files-ui/components/file-mosaic/components/file-mosaic-layer/Layer.scss b/src/files-ui/FileMosaic/components/file-mosaic-layer/Layer.scss similarity index 100% rename from src/files-ui/components/file-mosaic/components/file-mosaic-layer/Layer.scss rename to src/files-ui/FileMosaic/components/file-mosaic-layer/Layer.scss diff --git a/src/files-ui/components/file-mosaic/components/file-mosaic-layer/Layer.tsx b/src/files-ui/FileMosaic/components/file-mosaic-layer/Layer.tsx similarity index 94% rename from src/files-ui/components/file-mosaic/components/file-mosaic-layer/Layer.tsx rename to src/files-ui/FileMosaic/components/file-mosaic-layer/Layer.tsx index 2ec545930eb6b1d3ef4f614fbc8bb06a743c0120..652658ce5bb2657ddb2dd097b936bbf6360ea849 100644 --- a/src/files-ui/components/file-mosaic/components/file-mosaic-layer/Layer.tsx +++ b/src/files-ui/FileMosaic/components/file-mosaic-layer/Layer.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { addClassName } from "../../../../core"; +import { addClassName } from "../../../core"; import { OverridableComponentProps } from "../../../overridable"; import "./Layer.scss"; diff --git a/src/files-ui/components/file-mosaic/components/file-mosaic-layer/LayerContainer.scss b/src/files-ui/FileMosaic/components/file-mosaic-layer/LayerContainer.scss similarity index 100% rename from src/files-ui/components/file-mosaic/components/file-mosaic-layer/LayerContainer.scss rename to src/files-ui/FileMosaic/components/file-mosaic-layer/LayerContainer.scss diff --git a/src/files-ui/components/file-mosaic/components/file-mosaic-layer/LayerContainer.tsx b/src/files-ui/FileMosaic/components/file-mosaic-layer/LayerContainer.tsx similarity index 94% rename from src/files-ui/components/file-mosaic/components/file-mosaic-layer/LayerContainer.tsx rename to src/files-ui/FileMosaic/components/file-mosaic-layer/LayerContainer.tsx index 3509ae013d3d8ee422cae7b097207a001a22f9f5..83f6a8c275002878c368a3889d5353a18d9fe7e1 100644 --- a/src/files-ui/components/file-mosaic/components/file-mosaic-layer/LayerContainer.tsx +++ b/src/files-ui/FileMosaic/components/file-mosaic-layer/LayerContainer.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { addClassName } from "../../../../core"; +import { addClassName } from "../../../core"; import { OverridableComponentProps } from "../../../overridable"; import "./LayerContainer.scss"; diff --git a/src/files-ui/components/file-mosaic/components/file-mosaic/FileMosaic.scss b/src/files-ui/FileMosaic/components/file-mosaic/FileMosaic.scss similarity index 100% rename from src/files-ui/components/file-mosaic/components/file-mosaic/FileMosaic.scss rename to src/files-ui/FileMosaic/components/file-mosaic/FileMosaic.scss diff --git a/src/files-ui/components/file-mosaic/components/file-mosaic/FileMosaic.tsx b/src/files-ui/FileMosaic/components/file-mosaic/FileMosaic.tsx similarity index 95% rename from src/files-ui/components/file-mosaic/components/file-mosaic/FileMosaic.tsx rename to src/files-ui/FileMosaic/components/file-mosaic/FileMosaic.tsx index 2113dabba44a4ec02fb080d9005f04aad969a23d..45094d1e270193dbf6dfe6b360abc06a0645f118 100644 --- a/src/files-ui/components/file-mosaic/components/file-mosaic/FileMosaic.tsx +++ b/src/files-ui/FileMosaic/components/file-mosaic/FileMosaic.tsx @@ -4,8 +4,7 @@ import { fileSizeFormater, getLocalFileItemData, Localization, - //handleClickUtil, -} from "../../../../core"; +} from "../../../core"; import "./FileMosaic.scss"; import "./../../../icons/IconStyles.scss"; import { FileMosaicProps } from "./FileMosaicProps"; @@ -13,17 +12,15 @@ import LayerContainer from "../file-mosaic-layer/LayerContainer"; import Layer from "../file-mosaic-layer/Layer"; import FileMosaicName from "../FileMosaicName/FileMosaicName"; import FileMosaicUploadLayer from "../FileMosaicUploadLayer/FileMosaicUploadLayer"; -import useFileMosaicInitializer from "../../hooks/useFileMosaicInitializer"; import FileMosaicImageLayer from "../FIleMosaicImageLayer/FileMosaicImageLayer"; -import { useIsUploading } from "../../hooks/useIsUploading"; import { Tooltip } from "../../../tooltip"; import FileMosaicInfoLayer from "../FileMosaicInfoLayer/FileMosaicInfoLayer"; -import useProgress from "../../hooks/useProgress"; -import DownloadHidden from "../../../download-hidden/DownloadHidden"; +import DownloadHidden from "../../../DownloadHidden/DownloadHidden"; import FileMosaicMainLayer from "../FileMosaicMainLayer.tsx/FileMosaicMainLayer"; -import { FilesUiContext } from "../../../../FilesUiProvider/FilesUiContext"; -import { handleClickUtil } from "../../../../files-ui-react/utils"; +import { FilesUiContext } from "../../../FilesUiProvider/FilesUiContext"; +import { handleClickUtil } from "../../../utils"; +import { useProgress, useFileMosaicInitializer, useIsUploading } from "../../../hooks"; const FileMosaic: React.FC<FileMosaicProps> = (props: FileMosaicProps) => { const { diff --git a/src/files-ui/components/file-mosaic/components/file-mosaic/FileMosaicProps.ts b/src/files-ui/FileMosaic/components/file-mosaic/FileMosaicProps.ts similarity index 98% rename from src/files-ui/components/file-mosaic/components/file-mosaic/FileMosaicProps.ts rename to src/files-ui/FileMosaic/components/file-mosaic/FileMosaicProps.ts index 2d78610d3f72a1e18ee3428aec6fcab9db5f2fd5..3e4ec49f69a6796bd9aa10518a47a51aa3745c7b 100644 --- a/src/files-ui/components/file-mosaic/components/file-mosaic/FileMosaicProps.ts +++ b/src/files-ui/FileMosaic/components/file-mosaic/FileMosaicProps.ts @@ -1,4 +1,4 @@ -import { Localization, UPLOADSTATUS } from "../../../../core"; +import { Localization, UPLOADSTATUS } from "../../../core"; import { OverridableComponentProps } from "../../../overridable"; export interface FileMosaicPropsMap extends OverridableComponentProps { diff --git a/src/files-ui/FileMosaic/index.ts b/src/files-ui/FileMosaic/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..ffac68e1c543b7eba372a28e7dbc811e6440fa91 --- /dev/null +++ b/src/files-ui/FileMosaic/index.ts @@ -0,0 +1,11 @@ + +export { default as FileMosaic } from "./components/file-mosaic/FileMosaic"; +export * from "./components/file-mosaic/FileMosaic"; + + +export type { FileMosaicProps } from "./components/file-mosaic/FileMosaicProps"; + +export { default as FileMosaicStatus } from "./components/FileMosaicStatus/FileMosaicStatus"; +export * from "./components/FileMosaicStatus/FileMosaicStatus"; + +export type {FileMosaicInfoLayerProps} from "./components/FileMosaicInfoLayer/FileMosaicInfoLayerProps"; \ No newline at end of file diff --git a/src/files-ui/components/file-status/AbortedStatus.tsx b/src/files-ui/FileStatus/AbortedStatus.tsx similarity index 90% rename from src/files-ui/components/file-status/AbortedStatus.tsx rename to src/files-ui/FileStatus/AbortedStatus.tsx index f195e8d95de9ab794dbeda164d37bc17459eb449..ecd235def5649eec92df70d8acf68c202b587bb5 100644 --- a/src/files-ui/components/file-status/AbortedStatus.tsx +++ b/src/files-ui/FileStatus/AbortedStatus.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { FileItemLocalizerSelector, LocalLabels } from "../../core"; +import { FileItemLocalizerSelector, LocalLabels } from "../core"; import { DoDisturb } from "../icons"; import { FileStatusProps } from "./FileStatusProps"; interface AbortedStatusProps extends FileStatusProps {} diff --git a/src/files-ui/components/file-status/EmptyStatus.tsx b/src/files-ui/FileStatus/EmptyStatus.tsx similarity index 100% rename from src/files-ui/components/file-status/EmptyStatus.tsx rename to src/files-ui/FileStatus/EmptyStatus.tsx diff --git a/src/files-ui/components/file-status/ErrorStatus.tsx b/src/files-ui/FileStatus/ErrorStatus.tsx similarity index 91% rename from src/files-ui/components/file-status/ErrorStatus.tsx rename to src/files-ui/FileStatus/ErrorStatus.tsx index e930203c62556e7baa55443ad821c3a981300e80..0d7b0fb0609ddae02f13c372a8ae9c039356e30a 100644 --- a/src/files-ui/components/file-status/ErrorStatus.tsx +++ b/src/files-ui/FileStatus/ErrorStatus.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { FileItemLocalizerSelector, LocalLabels } from "../../core"; +import { FileItemLocalizerSelector, LocalLabels } from "../core"; import { Clear } from "../icons"; import { FileStatusProps } from "./FileStatusProps"; interface ErrorStatusProps extends FileStatusProps {} diff --git a/src/files-ui/components/file-status/FileStatusProps.ts b/src/files-ui/FileStatus/FileStatusProps.ts similarity index 66% rename from src/files-ui/components/file-status/FileStatusProps.ts rename to src/files-ui/FileStatus/FileStatusProps.ts index 442c799b44da6b29d2bee336182cf3d29455e87b..f73e560b94ba97742402963703cada93ccddd766 100644 --- a/src/files-ui/components/file-status/FileStatusProps.ts +++ b/src/files-ui/FileStatus/FileStatusProps.ts @@ -1,4 +1,4 @@ -import { Localization } from "../../core"; +import { Localization } from "../core"; export type FileStatusProps = { localization?: Localization; diff --git a/src/files-ui/components/file-status/PreparingStatus.tsx b/src/files-ui/FileStatus/PreparingStatus.tsx similarity index 91% rename from src/files-ui/components/file-status/PreparingStatus.tsx rename to src/files-ui/FileStatus/PreparingStatus.tsx index ba5e813c837b3b14c4dae4c4795e28cd18a8cb04..1ceceae9b07c640692002a8144ebbaa7bde4f883 100644 --- a/src/files-ui/components/file-status/PreparingStatus.tsx +++ b/src/files-ui/FileStatus/PreparingStatus.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { FileItemLocalizerSelector, LocalLabels } from "../../core"; +import { FileItemLocalizerSelector, LocalLabels } from "../core"; import InfiniteLoader from "../loader/InfiniteLoader/InfiniteLoader"; import { FileStatusProps } from "./FileStatusProps"; diff --git a/src/files-ui/components/file-status/SuccessStatus.tsx b/src/files-ui/FileStatus/SuccessStatus.tsx similarity index 91% rename from src/files-ui/components/file-status/SuccessStatus.tsx rename to src/files-ui/FileStatus/SuccessStatus.tsx index 76eaf5ab6a88c3d63176383b486c5bfa367cf149..c0d4c7bdcd27ce06a21fc9843c2a957489d9c22a 100644 --- a/src/files-ui/components/file-status/SuccessStatus.tsx +++ b/src/files-ui/FileStatus/SuccessStatus.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { FileItemLocalizerSelector, LocalLabels } from "../../core"; +import { FileItemLocalizerSelector, LocalLabels } from "../core"; import { CheckCircle } from "../icons"; import { FileStatusProps } from "./FileStatusProps"; interface SuccessStatusProps extends FileStatusProps {} diff --git a/src/files-ui/components/file-status/UploadingStatus.tsx b/src/files-ui/FileStatus/UploadingStatus.tsx similarity index 94% rename from src/files-ui/components/file-status/UploadingStatus.tsx rename to src/files-ui/FileStatus/UploadingStatus.tsx index 98f20d0785627347bace70a853a3ee0a3e624863..c53d6f80b42fc98ea9778756245a2122633f37d0 100644 --- a/src/files-ui/components/file-status/UploadingStatus.tsx +++ b/src/files-ui/FileStatus/UploadingStatus.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { FileItemLocalizerSelector, LocalLabels } from "../../core"; +import { FileItemLocalizerSelector, LocalLabels } from "../core"; import { DynamicLoader } from "../loader"; import InfiniteLoader from "../loader/InfiniteLoader/InfiniteLoader"; import { FileStatusProps } from "./FileStatusProps"; diff --git a/src/files-ui/components/file-status/index.ts b/src/files-ui/FileStatus/index.ts similarity index 100% rename from src/files-ui/components/file-status/index.ts rename to src/files-ui/FileStatus/index.ts diff --git a/src/files-ui/components/previews/FullScreen/FullScreen.scss b/src/files-ui/FullScreen/FullScreen.scss similarity index 100% rename from src/files-ui/components/previews/FullScreen/FullScreen.scss rename to src/files-ui/FullScreen/FullScreen.scss diff --git a/src/files-ui/components/previews/FullScreen/FullScreen.tsx b/src/files-ui/FullScreen/FullScreen.tsx similarity index 97% rename from src/files-ui/components/previews/FullScreen/FullScreen.tsx rename to src/files-ui/FullScreen/FullScreen.tsx index 64882e7106bba060c0788a830ee0f667cd3dc777..077fa13d38e0a13a50c191d252903b93584e6094 100644 --- a/src/files-ui/components/previews/FullScreen/FullScreen.tsx +++ b/src/files-ui/FullScreen/FullScreen.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { Clear } from "../../icons"; +import { Clear } from "../icons"; import { FullScreenProps } from "./FullScreenProps"; import "./FullScreen.scss"; const FullScreen: React.FC<FullScreenProps> = (props: FullScreenProps) => { diff --git a/src/files-ui/components/previews/FullScreen/FullScreenProps.ts b/src/files-ui/FullScreen/FullScreenProps.ts similarity index 89% rename from src/files-ui/components/previews/FullScreen/FullScreenProps.ts rename to src/files-ui/FullScreen/FullScreenProps.ts index 502fb8f126be890621eeb67a1811aaf685281722..6a6258e77443e2803aa51570b42a24338d860e8e 100644 --- a/src/files-ui/components/previews/FullScreen/FullScreenProps.ts +++ b/src/files-ui/FullScreen/FullScreenProps.ts @@ -1,4 +1,4 @@ -import { OverridableComponentProps } from "../../overridable"; +import { OverridableComponentProps } from "../overridable"; export interface FullScreenPropsMap extends OverridableComponentProps { diff --git a/src/files-ui/components/previews/ImagePreview/ImagePreview.scss b/src/files-ui/ImagePreview/ImagePreview.scss similarity index 100% rename from src/files-ui/components/previews/ImagePreview/ImagePreview.scss rename to src/files-ui/ImagePreview/ImagePreview.scss diff --git a/src/files-ui/components/previews/ImagePreview/ImagePreview.tsx b/src/files-ui/ImagePreview/ImagePreview.tsx similarity index 97% rename from src/files-ui/components/previews/ImagePreview/ImagePreview.tsx rename to src/files-ui/ImagePreview/ImagePreview.tsx index 55b83f15c493c62c0ee5b56e806387cf2ad88bcd..23c9b2e9bd4fc17d0b0deef99a9e09291189e18a 100644 --- a/src/files-ui/components/previews/ImagePreview/ImagePreview.tsx +++ b/src/files-ui/ImagePreview/ImagePreview.tsx @@ -3,8 +3,8 @@ import { ImagePreviewDefaultProps, ImagePreviewProps, } from "./ImagePreviewProps"; -import { mergeProps } from "../../overridable"; -import { getImageOrientation, readAsDataURL } from "../../../core"; +import { mergeProps } from "../overridable"; +import { getImageOrientation, readAsDataURL } from "../core"; import "./ImagePreview.scss"; diff --git a/src/files-ui/components/previews/ImagePreview/ImagePreviewProps.ts b/src/files-ui/ImagePreview/ImagePreviewProps.ts similarity index 97% rename from src/files-ui/components/previews/ImagePreview/ImagePreviewProps.ts rename to src/files-ui/ImagePreview/ImagePreviewProps.ts index 1fbc259d26c265888847a1e94fd4fccd712379f9..e6d563c191c7e01e141e2b77f8aaa73b96939dd0 100644 --- a/src/files-ui/components/previews/ImagePreview/ImagePreviewProps.ts +++ b/src/files-ui/ImagePreview/ImagePreviewProps.ts @@ -1,4 +1,4 @@ -import { OverridableComponentProps } from "../../overridable"; +import { OverridableComponentProps } from "../overridable"; diff --git a/src/files-ui/components/input-hidden/InputHidden.tsx b/src/files-ui/InputHidden/InputHidden.tsx similarity index 100% rename from src/files-ui/components/input-hidden/InputHidden.tsx rename to src/files-ui/InputHidden/InputHidden.tsx diff --git a/src/files-ui/components/input-hidden/InputHiddenProps.ts b/src/files-ui/InputHidden/InputHiddenProps.ts similarity index 100% rename from src/files-ui/components/input-hidden/InputHiddenProps.ts rename to src/files-ui/InputHidden/InputHiddenProps.ts diff --git a/src/files-ui/components/material-button/MaterialButton.scss b/src/files-ui/MaterialButton/MaterialButton.scss similarity index 100% rename from src/files-ui/components/material-button/MaterialButton.scss rename to src/files-ui/MaterialButton/MaterialButton.scss diff --git a/src/files-ui/components/material-button/MaterialButton.tsx b/src/files-ui/MaterialButton/MaterialButton.tsx similarity index 92% rename from src/files-ui/components/material-button/MaterialButton.tsx rename to src/files-ui/MaterialButton/MaterialButton.tsx index ba5be5e22bd62545d2b5b9c9ad36892b25d8d936..14f7f3c7ac262c9e6c881cc1fb870511bfb906eb 100644 --- a/src/files-ui/components/material-button/MaterialButton.tsx +++ b/src/files-ui/MaterialButton/MaterialButton.tsx @@ -2,9 +2,10 @@ import * as React from "react"; import useMaterialButtonClassName from "./hooks/useMaterialButtonClassName"; import { MaterialButtonProps } from "./MaterialButtonProps"; import "./MaterialButton.scss"; -import { createRippleButton } from "../../files-ui-react/utils"; -import { addClassName } from "../../core"; -import { FilesUiContext } from "../../FilesUiProvider/FilesUiContext"; +import { addClassName } from "../core"; +import { FilesUiContext } from "../FilesUiProvider/FilesUiContext"; +import { createRippleButton } from "../utils"; + const MaterialButton: React.FC<MaterialButtonProps> = ( props: MaterialButtonProps diff --git a/src/files-ui/components/material-button/MaterialButtonProps.ts b/src/files-ui/MaterialButton/MaterialButtonProps.ts similarity index 100% rename from src/files-ui/components/material-button/MaterialButtonProps.ts rename to src/files-ui/MaterialButton/MaterialButtonProps.ts diff --git a/src/files-ui/components/material-button/hooks/useMaterialButtonClassName.ts b/src/files-ui/MaterialButton/hooks/useMaterialButtonClassName.ts similarity index 100% rename from src/files-ui/components/material-button/hooks/useMaterialButtonClassName.ts rename to src/files-ui/MaterialButton/hooks/useMaterialButtonClassName.ts diff --git a/src/files-ui/components/material-button/index.ts b/src/files-ui/MaterialButton/index.ts similarity index 100% rename from src/files-ui/components/material-button/index.ts rename to src/files-ui/MaterialButton/index.ts diff --git a/src/files-ui/components/material-button/utils/MaterialButtonStyleManager.ts b/src/files-ui/MaterialButton/utils/MaterialButtonStyleManager.ts similarity index 99% rename from src/files-ui/components/material-button/utils/MaterialButtonStyleManager.ts rename to src/files-ui/MaterialButton/utils/MaterialButtonStyleManager.ts index c9c8876a3b95db0e33e301986539ed57481db5da..985bb494f703dc6c67f099791d373040dde5e164 100644 --- a/src/files-ui/components/material-button/utils/MaterialButtonStyleManager.ts +++ b/src/files-ui/MaterialButton/utils/MaterialButtonStyleManager.ts @@ -1,4 +1,4 @@ -import { asureColor, colourNameToHex, completeAsureColor, darkerColor } from "../../../core"; +import { asureColor, colourNameToHex, completeAsureColor, darkerColor } from "../../core"; import { DynamicSheet, DynamicSheetRule } from "@dynamicss/dynamicss"; export default class MaterialButtonStyleManager { diff --git a/src/files-ui/components/previews/VideoPreview/VideoPreview.scss b/src/files-ui/VideoPreview/VideoPreview.scss similarity index 100% rename from src/files-ui/components/previews/VideoPreview/VideoPreview.scss rename to src/files-ui/VideoPreview/VideoPreview.scss diff --git a/src/files-ui/components/previews/VideoPreview/VideoPreview.tsx b/src/files-ui/VideoPreview/VideoPreview.tsx similarity index 100% rename from src/files-ui/components/previews/VideoPreview/VideoPreview.tsx rename to src/files-ui/VideoPreview/VideoPreview.tsx diff --git a/src/files-ui/components/previews/VideoPreview/VideoPreviewProps.ts b/src/files-ui/VideoPreview/VideoPreviewProps.ts similarity index 88% rename from src/files-ui/components/previews/VideoPreview/VideoPreviewProps.ts rename to src/files-ui/VideoPreview/VideoPreviewProps.ts index 810fec3b12ec7f99d889a37a5797245852abadbb..516eae7a69031b5f8578cfff2ddc002ce4823bd9 100644 --- a/src/files-ui/components/previews/VideoPreview/VideoPreviewProps.ts +++ b/src/files-ui/VideoPreview/VideoPreviewProps.ts @@ -1,4 +1,4 @@ -import { OverridableComponentProps } from "../../overridable"; +import { OverridableComponentProps } from "../overridable"; export interface VideoPreviewPropsMap extends OverridableComponentProps { diff --git a/src/files-ui/components/dropzone/components/DropzoneActionButtons/DropzoneActionButtons.tsx b/src/files-ui/components/dropzone/components/DropzoneActionButtons/DropzoneActionButtons.tsx deleted file mode 100644 index 4612283596fb7c251e19b46cd61778bed288fbe7..0000000000000000000000000000000000000000 --- a/src/files-ui/components/dropzone/components/DropzoneActionButtons/DropzoneActionButtons.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import * as React from "react"; -interface ActionButtonsProps {} -const ActionButtons: React.FC<ActionButtonsProps> = ( - props: ActionButtonsProps -) => { - return <div>ActionButtons</div>; -}; -export default ActionButtons; diff --git a/src/files-ui/components/dropzone/makeListOfActionButtons.ts b/src/files-ui/components/dropzone/makeListOfActionButtons.ts deleted file mode 100644 index b26efc228d6ae5acb97ad47dca48de615a7ce03f..0000000000000000000000000000000000000000 --- a/src/files-ui/components/dropzone/makeListOfActionButtons.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { ActionButtonItem } from "./components/dropzone/DropzoneProps"; - -/** - * - * @param uploadButton upload action button props - * @param abortButton abort action button props - * @param deleteButton delete action button props - * @param other array of other custom action buttons props - * @returns - */ -export const makeListOfActionButtonItems = ( - uploadButton: ActionButtonItem | undefined, - abortButton: ActionButtonItem | undefined, - deleteButton: ActionButtonItem | undefined, - cleanButton: ActionButtonItem | undefined -): [ActionButtonItem[], ActionButtonItem[]] => { - let listOfTopButtons: ActionButtonItem[] = []; - let listOfBottomButtons: ActionButtonItem[] = []; - /* if (uploadButton) { - uploadButton.position === "top" - ? listOfTopButtons.push(uploadButton) - : listOfBottomButtons.push(uploadButton); - } - if (abortButton) { - abortButton.position === "top" - ? listOfTopButtons.push(abortButton) - : listOfBottomButtons.push(abortButton); - } - if (deleteButton) { - deleteButton.position === "top" - ? listOfTopButtons.push(deleteButton) - : listOfBottomButtons.push(deleteButton); - } - other?.forEach((actionButton) => { - actionButton.position === "top" - ? listOfTopButtons.push(actionButton) - : listOfBottomButtons.push(actionButton); - }); */ - - return [listOfTopButtons, listOfBottomButtons]; -}; \ No newline at end of file diff --git a/src/files-ui/components/dropzone/useDropzoneClassName.ts b/src/files-ui/components/dropzone/useDropzoneClassName.ts deleted file mode 100644 index fdc340d67a46f6526b99a74995aff39c1f5f7c5d..0000000000000000000000000000000000000000 --- a/src/files-ui/components/dropzone/useDropzoneClassName.ts +++ /dev/null @@ -1,168 +0,0 @@ -import { DynamicSheet, DynamicSheetRule, DynamiCSS } from "@dynamicss/dynamicss"; -import * as React from "react"; -import { completeAsureColor } from "../../core"; -import { DEFAULT_BORDER_RADIUS } from "./components/dropzone/DropzoneProps"; - -export default function useDropzoneClassName( - dropzoneId: string, - className: string | undefined, - //isDragging: boolean, - //header: boolean | undefined = false, - //footer: boolean | undefined = false, - color: string | undefined, - //borderRadius: string | number | undefined, - background: string | undefined, - minHeight: string | number | undefined -): [string | undefined, string | undefined, string | undefined, string | undefined] { - //console.log("useDropzoneClassName", className, isDragging, header, footer, color, background, minHeight); - const finalDropzoneId: string = (color === undefined && background === undefined && minHeight === undefined) ? "default" : dropzoneId.replaceAll(":", "_"); - - const baseClassName: string = "fui-dropzone-root fui-dropzone-border"; - - const [idStyles, setIdStyles] = React.useState<string>(""); - const [styleInjected, setStyleInjected] = React.useState<boolean>(false); - const [finalClassName, setFinalClassName] = React.useState<string | undefined>(undefined); - const [finalClassNameHeader, setFinalClassNameHeader] = React.useState<string | undefined>(undefined); - const [finalClassNameFooter, setFinalClassNameFooter] = React.useState<string | undefined>(undefined); - const [finalClassNameDisabled, setFinalClassNameDisabled] = React.useState<string | undefined>(undefined); - - //const [offset, setOffset] = React.useState<number>(0); - - const makeClassName = ( - className: string | undefined, - //isDragging: boolean, - // offset: number, - color: string | undefined, - //borderRadius: string | number | undefined, - background: string | undefined, - minHeight: string | number | undefined - - ) => { - let finalClassName: string = baseClassName; - - // better to come back to the custom stylesheet for each dropzone with the unique id - - let styleSheet: DynamicSheet = makeDynamicDropzoneStyleSheet( - finalDropzoneId, - // offset, - //isDragging, - color, - background, - minHeight, - //borderRadius - ); - let idStyle: string = ""; - - - if (!styleInjected) { - idStyle = DynamiCSS.insertStyleSheet(styleSheet); - setIdStyles(idStyle); - if (idStyle !== "") - setStyleInjected(true); - } else { - //already a stylesheet associated - DynamiCSS.editStyleSheet(idStyles, styleSheet.sheetRules || []); - } - - finalClassName += ` files-ui-dropzone-extra-${finalDropzoneId}`; - - if (className) { - finalClassName = `${finalClassName} ${className}`; - } - /* if (isDragging) { - finalClassName = `${finalClassName} fui-hide-border`; - } */ - - setFinalClassName(finalClassName); - setFinalClassNameHeader(`files-ui-header-border-rd-${finalDropzoneId}`); - setFinalClassNameFooter(`files-ui-footer-border-rd-top-bg-color-${finalDropzoneId}`); - setFinalClassNameDisabled(`files-ui-disabled-layer-color-${finalDropzoneId}`); - } - - React.useEffect(() => { - makeClassName(className, - //isDragging, - //offset, - color, - // borderRadius, - background, minHeight); - // eslint-disable-next-line - }, [className, - //isDragging, - // offset, - color, - //borderRadius, - background, minHeight]); - - return [finalClassName, finalClassNameHeader, finalClassNameFooter, finalClassNameDisabled]; -} - - - - -const makeDynamicDropzoneStyleSheet = ( - dropzoneId: string, - // offset: number, - //isDragging: boolean, - color: string | undefined, - background: string | undefined, - minHeight: string | number | undefined, - // borderRadius: string | number | undefined, -): DynamicSheet => { - - const rootColorBorderStyle: DynamicSheetRule = { - className: `files-ui-dropzone-extra-${dropzoneId}`, - rules: { - color: completeAsureColor(color), - border: `1px dashed ${completeAsureColor(color)}`, - borderRadius: DEFAULT_BORDER_RADIUS, - background: background, - minHeight: typeof minHeight === "number" ? `${minHeight}px` : minHeight, - }, - }; - - const rootColorBorderStyleHideBorder: DynamicSheetRule = { - className: `files-ui-root-border-hide`, - rules: { - borderColor: "transparent", - }, - } - const headerBorderStyle: DynamicSheetRule = { - className: `files-ui-header-border-rd-${dropzoneId}`, - rules: { - "border-top-left-radius": DEFAULT_BORDER_RADIUS, - "border-top-right-radius": DEFAULT_BORDER_RADIUS, - }, - }; - const footerBorderStyle: DynamicSheetRule = { - className: `files-ui-footer-border-rd-top-bg-color-${dropzoneId}`, - rules: { - "border-bottom-left-radius": DEFAULT_BORDER_RADIUS, - "border-bottom-right-radius": DEFAULT_BORDER_RADIUS, - background: completeAsureColor(color, 0.129), - borderTop: `1px dotted ${completeAsureColor(color)}` - - }, - }; - const disabledLayerStyle: DynamicSheetRule = { - className: `files-ui-disabled-layer-color-${dropzoneId}`, - rules: { - borderRadius: DEFAULT_BORDER_RADIUS, - background: completeAsureColor(color, 0.38), - } - } - const sheetRules: DynamicSheetRule[] = - [ - rootColorBorderStyle, - rootColorBorderStyleHideBorder, - headerBorderStyle, - footerBorderStyle, - disabledLayerStyle - ]; - - - return { - id: "files-dropzone-ui-style-id-" + dropzoneId, - sheetRules: sheetRules - } -} \ No newline at end of file diff --git a/src/files-ui/components/file-mosaic/index.ts b/src/files-ui/components/file-mosaic/index.ts deleted file mode 100644 index d0cb45371f8f3ef0aa92ea17b5c2854069ac3b07..0000000000000000000000000000000000000000 --- a/src/files-ui/components/file-mosaic/index.ts +++ /dev/null @@ -1,6 +0,0 @@ - -export { default as FileMosaic } from "./components/file-mosaic/FileMosaic"; -export * from "./components/file-mosaic/FileMosaic"; - - -export type { FileMosaicProps } from "./components/file-mosaic/FileMosaicProps"; diff --git a/src/files-ui/components/index.ts b/src/files-ui/components/index.ts deleted file mode 100644 index 3356996ef2650fe53854a2dbb3d513c9e73128d6..0000000000000000000000000000000000000000 --- a/src/files-ui/components/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -export { Avatar } from "./avatar"; -export * from "./avatar"; - -export { Dropzone } from "./dropzone"; -export * from "./dropzone"; - -export { FileInputButton } from "./file-input-button"; -export * from "./file-input-button"; - - -// internal components - -export { MaterialButton } from "./material-button"; -export * from "./material-button"; \ No newline at end of file diff --git a/src/files-ui/components/page-template/PageTemplate.tsx b/src/files-ui/components/page-template/PageTemplate.tsx deleted file mode 100644 index 395de66754755dfc6796b5be4615efbce0b8194b..0000000000000000000000000000000000000000 --- a/src/files-ui/components/page-template/PageTemplate.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import * as React from "react"; -import { PageTemplateProps } from "./PageTemplateProps"; - -const PageTemplate:React.FC<PageTemplateProps> = (props:PageTemplateProps) =>{ - return( - <div> - - </div> - ) -} -export default PageTemplate; \ No newline at end of file diff --git a/src/files-ui/components/page-template/PageTemplateProps.ts b/src/files-ui/components/page-template/PageTemplateProps.ts deleted file mode 100644 index 55eb9a35ee190ed169e49cbb60d2854b91a82316..0000000000000000000000000000000000000000 --- a/src/files-ui/components/page-template/PageTemplateProps.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface PageTemplateProps{ - -} \ No newline at end of file diff --git a/src/files-ui/components/previews/index.ts b/src/files-ui/components/previews/index.ts deleted file mode 100644 index b61c885c07373328fd3a4e37e63ea0b8b973658b..0000000000000000000000000000000000000000 --- a/src/files-ui/components/previews/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -export { default as FullScreen } from "./FullScreen/FullScreen"; -export * from "./FullScreen/FullScreen"; - -export { default as ImagePreview } from "./ImagePreview/ImagePreview"; -export * from "./ImagePreview/ImagePreview"; - -export { default as VideoPreview } from "./VideoPreview/VideoPreview"; -export * from "./VideoPreview/VideoPreview"; \ No newline at end of file diff --git a/src/files-ui/components/tooltip/index.ts b/src/files-ui/components/tooltip/index.ts deleted file mode 100644 index 9542bdc0694e23cae689632f6a999298ae49402f..0000000000000000000000000000000000000000 --- a/src/files-ui/components/tooltip/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as Tooltip } from "./components/Tooltip"; -export * from "./components/Tooltip"; diff --git a/src/files-ui/core/color/colors.ts b/src/files-ui/core/color/colors.ts deleted file mode 100644 index c0714f1b0d7e56ab4125a0d08e1c27321cd3b3aa..0000000000000000000000000000000000000000 --- a/src/files-ui/core/color/colors.ts +++ /dev/null @@ -1,231 +0,0 @@ -import { NAMED_COLORS } from "./namedColors"; - -/** - * Make the color into a darker color - * @param colorInput - * @returns the darked color in - */ -export const darkerColor = (colorInput: string, percentage = 25): string => { - let darkedColor = ""; - const reduce = (100 - percentage) / 100; - let component1: number = 0; - let component2: number = 0; - let component3: number = 0; - if (isHexColor(colourNameToHex(colorInput))) { - - component1 = hexTodec(colorInput.charAt(1)) * 16 + hexTodec(colorInput.charAt(2)); - component2 = hexTodec(colorInput.charAt(3)) * 16 + hexTodec(colorInput.charAt(4)); - component3 = hexTodec(colorInput.charAt(5)) * 16 + hexTodec(colorInput.charAt(6)); - - darkedColor = `rgb(${component1 * reduce}, ${component2 * reduce},${component3 * reduce})`; - } else { - if (colorInput.includes("rgba")) { - let slicer = colorInput.replace("rgba(", ""); - let components: string[] = slicer.split(","); - darkedColor = `rgb(${parseInt(components[0], 10) * reduce}, ${parseInt(components[1], 10) * reduce},${parseInt(components[2], 10) * reduce})`; - //return darkedColor; - } else if (colorInput.includes("rgb")) { - - let slicer = colorInput.replace("rgb(", ""); - let components: string[] = slicer.split(","); - darkedColor = `rgb(${parseInt(components[0], 10) * reduce}, ${parseInt(components[1], 10) * reduce},${parseInt(components[2], 10) * reduce})`; - // return darkedColor; - } - } - - return darkedColor; -} -/** - * Make the color into a brighted color - * @param colorInput - * @returns the brighted color - */ -export const brighterColor = (colorInput: string, percentage = 25): string => { - let brightedColor = ""; - const increase = (100 + percentage) / 100; - let component1: number = 0; - let component2: number = 0; - let component3: number = 0; - if (isHexColor(colourNameToHex(colorInput))) { - - component1 = hexTodec(colorInput.charAt(1)) * 16 + hexTodec(colorInput.charAt(2)); - component2 = hexTodec(colorInput.charAt(3)) * 16 + hexTodec(colorInput.charAt(4)); - component3 = hexTodec(colorInput.charAt(5)) * 16 + hexTodec(colorInput.charAt(6)); - - brightedColor = `rgb(${component1 * increase}, ${component2 * increase},${component3 * increase})`; - } else { - if (colorInput.includes("rgba")) { - let slicer = colorInput.replace("rgba(", ""); - let components: string[] = slicer.split(","); - brightedColor = `rgb(${parseInt(components[0], 10) * increase}, ${parseInt(components[1], 10) * increase},${parseInt(components[2], 10) * increase})`; - //return darkedColor; - } else if (colorInput.includes("rgb")) { - - let slicer = colorInput.replace("rgb(", ""); - let components: string[] = slicer.split(","); - brightedColor = `rgb(${parseInt(components[0], 10) * increase}, ${parseInt(components[1], 10) * increase},${parseInt(components[2], 10) * increase})`; - // return darkedColor; - } - } - - return brightedColor; -} - -/** - * In order to managae rgba() we convert hex colors into rgba() - * If the given color is already a rgb() color, it can add the percentage to convert it into rgba() - * - * - * @param colorInput color in hex or in rgb - * @param perc percentage for RGBA() color - * @returns the rgba representation of a hex color - */ -export const hexColorToRGB = (colorInput: string | undefined, perc = 0, defaultColor?: string): string => { - let resultDefault: string = defaultColor ? defaultColor : "rgba(255, 255, 255, 0.6)"; - if (!colorInput) { - return resultDefault; - } - //work only in uppercase - const color: string = colorInput.toUpperCase(); - // is already a rgba color - if (color.includes("RGBA")) { - return color; - } - - //return rbg => rgba - if (color.includes("RGB")) { - return color.replace('RGB', `rgba`).replace(')', `, ${perc})`); - } - - // if is a hex color or named color - if (!isHexColor(colourNameToHex(color))) { - return resultDefault; - } - let resultOk: string = ""; - //let strVar: string = ""; - let component1: number = 0; - let component2: number = 0; - let component3: number = 0; - //If passed all validations, proceed to transform - component1 = hexTodec(color.charAt(1)) * 16 + hexTodec(color.charAt(2)); - component2 = hexTodec(color.charAt(3)) * 16 + hexTodec(color.charAt(4)); - component3 = hexTodec(color.charAt(5)) * 16 + hexTodec(color.charAt(6)); - resultOk = `rgba(${component1}, ${component2},${component3} , ${perc})`; - return resultOk; -} - -/** - * Validates wheteher the color is hexadecimal css color - * Example: #FF56AC - * - * - * @param colorInput the color inpt to test - * @returns true if the inputColor is a hexadecimal css color - */ -export const isHexColor = (colorInput: string): boolean => { - - // if first element is no '#' return default background color - if (colorInput.charAt(0) !== '#') { - - return false; - } - // if color lenght is not exactly 7 return default - if (colorInput.length !== 7) { - - - return false; - } - // if one of the letters is not included in hex array return default - for (let i = 1; i < colorInput.length; i++) { - if (!hexArray.includes(colorInput.charAt(i))) { - - - return false; - } - } - - return true; -} - -/** - * Converts a named color into hexadecimal color - * from a list of well known namd colors if found. - * When not given returns a "" - * When not found in the list, returns the same value given - * @param colour the named color - * @returns The hex representation of the color or "" or the same color - */ -export function colourNameToHex(colour: string | undefined): string { - /** - * When not given - */ - if (!colour) { - return ""; - } - /** - * when named color is found - */ - if (NAMED_COLORS[colour.toLocaleLowerCase()] !== undefined) { - return NAMED_COLORS[colour.toLocaleLowerCase()]; - } - /** - * When the named color was not found - */ - - return colour; -} - -/** - * hexArray & decArray - * - * arrays of numbers used to convert hexadecimal numbers into decimal and viceversa - */ -const hexArray = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']; -const decArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]; - -/** - * Converts hex number in string representation to decimal number - * - * - * @param letter the string hex number - * @returns a decimal number - */ -export const hexTodec = (letter: string): number => { - if (hexArray.includes(letter)) { - return decArray[hexArray.indexOf(letter)]; - } else { - return 0; - } -} - - -/** - * Asure a base color. When not given or when given an incorrect color format - * default color is this kind of grey #5d6475 - * - * @param color param color given by user - * @returns returns the same color - */ -export const asureColor = (color?: string): string => { - if (color !== undefined && color !== "") { - return color; - } else { - return DEFAULT_FONT_COLOR; - } -} -/** - * Asure a base color. When not given or when given an incorrect color format - * default color is this kind of grey #5d6475 - * - * @param color param color given by user - * @returns returns the same color - */ -export const completeAsureColor = (color?: string, perc = 1): string => { - - return hexColorToRGB(asureColor(colourNameToHex(color)), perc); - -} - - - -export const DEFAULT_FONT_COLOR = "#646c7f"; \ No newline at end of file diff --git a/src/files-ui/core/color/index.ts b/src/files-ui/core/color/index.ts deleted file mode 100644 index 6b33c40aefc4bddf0d41bb7d19e768b27b46be09..0000000000000000000000000000000000000000 --- a/src/files-ui/core/color/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -export { NAMED_COLORS } from "./namedColors"; -export { - asureColor, - brighterColor, - colourNameToHex, - darkerColor, - hexColorToRGB, - hexTodec, - isHexColor, - completeAsureColor -} from "./colors"; \ No newline at end of file diff --git a/src/files-ui/core/color/namedColors.ts b/src/files-ui/core/color/namedColors.ts deleted file mode 100644 index 853d40ba9460247cf3e8df8fda32167a1694ec4b..0000000000000000000000000000000000000000 --- a/src/files-ui/core/color/namedColors.ts +++ /dev/null @@ -1,162 +0,0 @@ -import { NamedColor } from "../types/NamedColor"; - -/** - * The full list of named Colors provided by - * https://htmlcolorcodes.com/es/nombres-de-los-colores/ - */ -export const NAMED_COLORS: NamedColor = -{ - //RED - indianred: "#CD5C5C", - lightcoral: "#F08080", - salmon: "#FA8072", - darksalmon: "#E9967A", - lightsalmon: "#FFA07A", - crimson: "#DC143C", - red: "#FF0000", - firebrick: "#B22222", - darkred: "#8B0000", - //PINK - pink: "#FFC0CB", - lightpink: "#FFB6C1", - hotpink: "#FF69B4", - deeppink: "#FF1493", - mediumvioletred: "#C71585", - palevioletred: "#DB7093", - //ORANGE - //"lightsalmon: "#FFA07A", - coral: "#FF7F50", - tomato: "#FF6347", - orangered: "#FF4500", - darkorange: "#FF8C00", - orange: "#FFA500", - //YELLOW - gold: "#FFD700", - yellow: "#FFFF00", - lightyellow: "#FFFFE0", - lemonchiffon: "#FFFACD", - lightgoldenrodyellow: "#FAFAD2", - papayawhip: "#FFEFD5", - moccasin: "#FFE4B5", - peachpuff: "#FFDAB9", - palegoldenrod: "#EEE8AA", - khaki: "#F0E68C", - darkkhaki: "#BDB76B", - //PURPLE - lavender: "#E6E6FA", - thistle: "#D8BFD8", - plum: "#DDA0DD", - violet: "#EE82EE", - orchid: "#DA70D6", - fuchsia: "#FF00FF", - magenta: "#FF00FF", - mediumorchid: "#BA55D3", - mediumpurple: "#9370DB", - rebeccapurple: "#663399", - blueviolet: "#8A2BE2", - darkviolet: "#9400D3", - darkorchid: "#9932CC", - darkmagenta: "#8B008B", - purple: "#800080", - indigo: "#4B0082", - slateblue: "#6A5ACD", - darkslateblue: "#483D8B", - mediumslateblue: "#7B68EE", - //GREEN - greenyellow: "#ADFF2F", - chartreuse: "#7FFF00", - lawngreen: "#7CFC00", - lime: "#00FF00", - limegreen: "#32CD32", - palegreen: "#98FB98", - lightgreen: "#90EE90", - mediumspringgreen: "#00FA9A", - springgreen: "#00FF7F", - mediumseagreen: "#3CB371", - seagreen: "#2E8B57", - forestgreen: "#228B22", - green: "#008000", - darkgreen: "#006400", - yellowgreen: "#9ACD32", - olivedrab: "#6B8E23", - olive: "#808000", - darkolivegreen: "#556B2F", - mediumaquamarine: "#66CDAA", - darkseagreen: "#8FBC8B", - lightseagreen: "#20B2AA", - darkcyan: "#008B8B", - teal: "#008080", - //BLUE - aqua: "#00FFFF", - cyan: "#00FFFF", - lightcyan: "#E0FFFF", - paleturquoise: "#AFEEEE", - aquamarine: "#7FFFD4", - turquoise: "#40E0D0", - mediumturquoise: "#48D1CC", - darkturquoise: "#00CED1", - cadetblue: "#5F9EA0", - steelblue: "#4682B4", - lightsteelblue: "#B0C4DE", - powderblue: "#B0E0E6", - lightblue: "#ADD8E6", - skyblue: "#87CEEB", - lightskyblue: "#87CEFA", - deepskyblue: "#00BFFF", - dodgerblue: "#1E90FF", - cornflowerblue: "#6495ED", - //"mediumslateblue: "#7B68EE", - royalblue: "#4169E1", - blue: "#0000FF", - mediumblue: "#0000CD", - darkblue: "#00008B", - navy: "#000080", - midnightblue: "#191970", - //BROWN - cornsilk: "#FFF8DC", - blanchedalmond: "#FFEBCD", - bisque: "#FFE4C4", - navajowhite: "#FFDEAD", - wheat: "#F5DEB3", - burlywood: "#DEB887", - tan: "#D2B48C", - rosybrown: "#BC8F8F", - sandybrown: "#F4A460", - goldenrod: "#DAA520", - darkgoldenrod: "#B8860B", - peru: "#CD853F", - chocolate: "#D2691E", - saddlebrown: "#8B4513", - sienna: "#A0522D", - brown: "#A52A2A", - maroon: "#800000", - //WHITE - white: "#FFFFFF", - snow: "#FFFAFA", - honeydew: "#F0FFF0", - mintcream: "#F5FFFA", - azure: "#F0FFFF", - aliceblue: "#F0F8FF", - ghostwhite: "#F8F8FF", - whitesmoke: "#F5F5F5", - seashell: "#FFF5EE", - beige: "#F5F5DC", - oldlace: "#FDF5E6", - floralwhite: "#FFFAF0", - ivory: "#FFFFF0", - antiquewhite: "#FAEBD7", - linen: "#FAF0E6", - lavenderblush: "#FFF0F5", - mistyrose: "#FFE4E1", - //GREY - gainsboro: "#DCDCDC", - lightgray: "#D3D3D3", - silver: "#C0C0C0", - darkgray: "#A9A9A9", - gray: "#808080", - dimgray: "#696969", - lightslategray: "#778899", - slategray: "#708090", - darkslategray: "#2F4F4F", - black: "#000000" -} \ No newline at end of file diff --git a/src/files-ui/core/download/downloadFile.ts b/src/files-ui/core/download/downloadFile.ts deleted file mode 100644 index 709d6e5473b0d1199b7d7923b8287d2ecc92f2ef..0000000000000000000000000000000000000000 --- a/src/files-ui/core/download/downloadFile.ts +++ /dev/null @@ -1,17 +0,0 @@ -export const downloadFileAnchor=async(fileName?:string, downloadUrl?:string)=>{ - -} -export const downloadFileXHR=async(fileName?:string, downloadUrl?:string)=>{ - - -} -export const downloadFileFetch=async(fileName?:string, downloadUrl?:string)=>{ - - -} - -export const downloadAnchor=async(fileName?:string, downloadUrl?:string)=>{ - -const anchorElement:HTMLAnchorElement = document.createElement("a"); - -} \ No newline at end of file diff --git a/src/files-ui/core/file-manager/index.ts b/src/files-ui/core/file-manager/index.ts deleted file mode 100644 index f88618e87ced064023ee4f91b8464436a3154d09..0000000000000000000000000000000000000000 --- a/src/files-ui/core/file-manager/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { extFileReconcilation } from "./reconcilation"; \ No newline at end of file diff --git a/src/files-ui/core/file-manager/reconcilation.ts b/src/files-ui/core/file-manager/reconcilation.ts deleted file mode 100644 index a8ec2eca769dc5ee16089ffbb68af3e35564cb51..0000000000000000000000000000000000000000 --- a/src/files-ui/core/file-manager/reconcilation.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { ExtFile, ExtFileInstance, ExtFileManager } from "../types"; - -export const extFileReconcilation = ( - dropzoneId: number | string | undefined, - extFileIncomming: ExtFile[] -): ExtFile[] | undefined => { - let result: ExtFile[] = []; - - let arrOfExtFiles: ExtFileInstance[] | undefined = - ExtFileManager.getExtFileInstanceList(dropzoneId); - - // continue only if arrOfExtFiles exists - if (arrOfExtFiles) { - //different sizes means there was deleted files - //also can be new files to be uploaded - //needed an extra flag to allow add files in the middle of uploading process - // if new files are added, they are added to the Manager - // outside they were already added to the UI - // inside Dropzone, will be needed a .next() method for manager - - // 1st allow deleted files and ignore new ones - // reduce the arrOfExtFileInstances array - // parecido a listas ligadas, iterar hasta encontrar null XD - let incommingTemp: ExtFile[] = [...extFileIncomming]; - incommingTemp = incommingTemp.filter( - (F) => arrOfExtFiles?.findIndex(I => I.id === F.id) === -1 - ); - - console.log("reconciliation incommingTemp", incommingTemp); - - - //different sizes not allowed - if (arrOfExtFiles.length !== extFileIncomming.length || extFileIncomming.length === 0) { - return undefined; - } - for (let i = 0; i < arrOfExtFiles.length; i++) { - if ( - (extFileIncomming[i].uploadStatus === undefined) - && - (arrOfExtFiles[i].uploadStatus === "preparing") - ) { - console.log("useDropzoneFileListUpdater onCancel i", i); - arrOfExtFiles[i].uploadStatus = undefined; - } - } - } - - return result; -} \ No newline at end of file diff --git a/src/files-ui/core/index.d.ts b/src/files-ui/core/index.d.ts index a561c1ae7d85f9feff5da2ccb24944500b773474..899e9931af84c701a0ef2cfc3705c318e7aece2c 100644 --- a/src/files-ui/core/index.d.ts +++ b/src/files-ui/core/index.d.ts @@ -1,6 +1,6 @@ export { DropzoneEnglish, DropzoneFrench, DropzoneItalian, DropzoneLocalizer, DropzoneLocalizerSelector, DropzonePortuguese, DropzoneRussian, DropzoneSimplifiedChinese, DropzoneSpanish, DropzoneTraditionalChinese, FileItemEnglish, FileItemFrench, FileItemItalian, FileItemLocalizer, FileItemLocalizerSelector, FileItemPortuguese, FileItemRussian, FileItemSimplifiedChinese, FileItemSpanish, FileItemTraditionalChinese, ValidateErrorEnglish, ValidateErrorFrench, ValidateErrorItalian, ValidateErrorLocalizer, ValidateErrorLocalizerSelector, ValidateErrorPortuguese, ValidateErrorRussian, ValidateErrorSimplifiedChinese, ValidateErrorSpanish, ValidateErrorTraditionalChinese } from "./localization"; export { readAsArrayBuffer, readAsBinaryString, readAsDataURL, readAsText, resizeImage, getImageOrientation } from "./reader"; -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, oga, ogv, ogx, 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, applicationSelector, audioSelector, checkIsCode, extensionSelector, fontSelector, getURLFileIco, imageSelector, mimeSelector, textSelector, videoSelector, } from "./mime"; +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, oga, ogv, ogx, 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, applicationSelector, audioSelector, checkIsCode, extensionSelector, fontSelector, getURLFileIco, imageSelector, mimeSelector, textSelector, videoSelector, getURLFileIcoFromNameAndType, } from "./mime"; export type { ExtFile, Behaviour, ValidateFileResponse, ComponentLocalizer, ExtFileListMap, FileValidatorProps, FunctionLabel, LocalLabels, Localization, Method, NamedColor, ServerResponse, UploadPromiseResponse, UploadResponse, UploadConfig, UPLOADSTATUS, IconsMap } from "./types"; export { ExtFileInstance, ExtFileManager, createUploadConfig } from "./types"; export { extFileMock } from "./mocks"; diff --git a/src/files-ui/core/index.es.js b/src/files-ui/core/index.es.js index cb2eaac4cf0d15513d9ac6d32420850a75ae6bba..68eb2961f37a33226757b48dfe53a28039beffd8 100644 --- a/src/files-ui/core/index.es.js +++ b/src/files-ui/core/index.es.js @@ -1,2 +1,2 @@ -var e=function(e){if(e)return e<1024?e+" Bytes":e<1048576?(e/1024).toFixed(2)+" KB":e<1073741824?(e/1024/1024).toFixed(2)+" MB":e<1099511627776?(e/1024/1024/1024).toFixed(2)+" GB":(e/1024/1024/1024/1024).toFixed(2)+" TB"},t={defaultLabel:"Trascina qui i tuoi file",uploadingMessage:function(e){return"Caricamento di ".concat(e," file")},uploadFinished:function(e,t){return"File caricati: ".concat(e,", File rifiutati: ").concat(t)},noFilesMessage:"Nessun file valido in attesa di essere caricato",footer:{acceptAll:"Tutti i tipi di file sono accettati",acceptCustom:function(e){return"Tipi di file consentiti: ".concat(e)}},header:{uploadFilesMessage:"Caricamento",maxSizeMessage:function(e){return"Dimensione massima ".concat(e)},validFilesMessage:function(e,t){return"File ".concat(e,"/").concat(t)}},fakeuploadsuccess:"Il file è stato caricato con successo ",fakeUploadError:"Errore di caricamento del file"},r={fullInfoLayer:{name:"Nome: ",size:"Dimensione: ",type:"Tipo: "},status:{preparing:"preparazione",uploading:"In corso",success:"Successo",valid:"Valido",denied:"Non válido",error:"Errore",aborted:"Interrotto"}},a={maxSizeError:function(t){return"Il file è molto grande. Il tam. il massimo è ".concat(e(t))},acceptError:"Tipo di file illegale",maxFileCount:function(e){return"Numero massimo di file (".concat(e,") raggiunto")}},n={defaultLabel:"Déposez vos fichiers ici",uploadingMessage:function(e){return"Envoi de ".concat(e," fichiers")},uploadFinished:function(e,t){return"Fichiers téléchargés : ".concat(e,", Fichiers rejetés: ").concat(t)},noFilesMessage:"Aucun fichier valide ne manque",footer:{acceptAll:"Tous types de fichiers acceptés ",acceptCustom:function(e){return"Types de fichier: ".concat(e)}},header:{uploadFilesMessage:"Envoyer",maxSizeMessage:function(e){return"Taille maximale ".concat(e)},validFilesMessage:function(e,t){return"Fichiers ".concat(e,"/").concat(t)}},fakeuploadsuccess:"Le fichier a été téléchargé avec succès",fakeUploadError:"Erreur lors du téléchargement "},i={fullInfoLayer:{name:"Le nom: ",size:"Le taille: ",type:"Le type: "},status:{preparing:"préparer",uploading:"En cours",success:"Succès",valid:"Valide",denied:"Refusé",error:"Erreur",aborted:"Interrompu"}},c={maxSizeError:function(t){return"Le fichier est très volumineux. Le tam. le maximum est de ".concat(e(t))},acceptError:"Type de fichier illégal ",maxFileCount:function(e){return"Limite de fichiers atteinte (".concat(e,")")}},o={defaultLabel:"Drop your files here",uploadingMessage:function(e){return"Uploading ".concat(e," files")},uploadFinished:function(e,t){return"Uploaded files: ".concat(e,", Rejected files: ").concat(t)},noFilesMessage:"There is no missing valid file to upload",footer:{acceptAll:"All file types accepted",acceptCustom:function(e){return"Allowed types: ".concat(e)}},header:{uploadFilesMessage:"Upload files",maxSizeMessage:function(e){return"Max file size: ".concat(e)},validFilesMessage:function(e,t){return"Files ".concat(e,"/").concat(t)}},fakeuploadsuccess:"File was successfuly uploaded",fakeUploadError:"Error on uploading. Please try again later."},s={fullInfoLayer:{name:"Name: ",size:"Size: ",type:"Type: "},status:{preparing:"Preparing",uploading:"Uploading",success:"Success",valid:"Valid",denied:"Not valid",error:"Error",aborted:"Aborted"}},u={maxSizeError:function(t){return"File is too big. Max file size allowed is ".concat(e(t))},acceptError:"File type is not allowed",maxFileCount:function(e){return"Max amount of files (".concat(e,") has been reached")}},l={defaultLabel:"Suelta tus archivos aquí",uploadingMessage:function(e){return"Subiendo ".concat(e," archivos")},uploadFinished:function(e,t){return"Archivos subidos: ".concat(e,", Archivos rechazados: ").concat(t)},noFilesMessage:"No hay archivos válidos pendientes por subir",footer:{acceptAll:"Todos los tipos de archivo aceptados",acceptCustom:function(e){return"Tipo(s) de archivo permitidos: ".concat(e)}},header:{uploadFilesMessage:"Subir",maxSizeMessage:function(e){return"Tam. máximo ".concat(e)},validFilesMessage:function(e,t){return"Archivos ".concat(e,"/").concat(t)}},fakeuploadsuccess:"El archivo se subió correctamente",fakeUploadError:"Error al subir el archivo"},p={fullInfoLayer:{name:"Nombre: ",size:"Tamaño: ",type:"Tipo: "},status:{preparing:"Preparando",uploading:"Subiendo",success:"Éxito",valid:"Válido",denied:"No válido",error:"Error",aborted:"Anulado"}},d={maxSizeError:function(t){return"El archivo es muy grande. El tam. máximo es ".concat(e(t))},acceptError:"Tipo de archivo no permitido",maxFileCount:function(e){return"Cantidad máxima de archivos (".concat(e,") alcanzada")}},f={defaultLabel:"Перетащите сюда свои файлы.",uploadingMessage:function(e){return"Выгрузка ".concat(e," файлов")},uploadFinished:function(e,t){return"Загружено файлов: ".concat(e,", отклоненных файлов: ").concat(t)},noFilesMessage:"Действительный файл не отсутствует для загрузки",footer:{acceptAll:"Принимаются все типы файлов ",acceptCustom:function(e){return"Допустимые типы: ".concat(e)}},header:{uploadFilesMessage:"Отправить",maxSizeMessage:function(e){return"макс размер: ".concat(e)},validFilesMessage:function(e,t){return"Файлы ".concat(e,"/").concat(t)}},fakeuploadsuccess:"Файл был успешно загружен",fakeUploadError:"Ошибка при загрузке"},g={fullInfoLayer:{name:"Имя: ",size:"Размер: ",type:"Tип: "},status:{preparing:"подготовка",uploading:"Загрузка",success:"успех",valid:"годный",denied:"выкинутый",error:"ошибка",aborted:"прерванный"}},m={maxSizeError:function(t){return"Файл слишком большой. Максимально допустимый размер файла - ".concat(e(t))},acceptError:"Тип файла не разрешен",maxFileCount:function(e){return"Достигнуто максимальное количество файлов (".concat(e,")")}},h={defaultLabel:"Solte seus arquivos aqui ",uploadingMessage:function(e){return"Enviando ".concat(e," arquivos")},uploadFinished:function(e,t){return"Arquivos enviados: ".concat(e,", Arquivos rejeitados: ").concat(t)},noFilesMessage:"Nenhum arquivo válido está faltando para enviar",footer:{acceptAll:"Todos os tipos de arquivo são aceitos",acceptCustom:function(e){return"Tipos permitidos: ".concat(e)}},header:{uploadFilesMessage:"Enviar",maxSizeMessage:function(e){return"Tamanho máximo: ".concat(e)},validFilesMessage:function(e,t){return"Arquivos ".concat(e,"/").concat(t)}},fakeuploadsuccess:"O arquivo foi enviado com sucesso",fakeUploadError:"Erro ao enviar"},b={fullInfoLayer:{name:"Nome: ",size:"Tamanho: ",type:"Tipo: "},status:{preparing:"Preparando",uploading:"Enviando",success:"Êxito",valid:"válido",denied:"Negado",error:"Erro",aborted:"Abortado"}},v={maxSizeError:function(t){return"O arquivo é muito grande. O tamanho máximo de arquivo permitido é ".concat(e(t))},acceptError:"O tipo de arquivo não é permitido ",maxFileCount:function(e){return"Quantidade máxima de arquivos (".concat(e,") alcançada")}},F={defaultLabel:"将您的文件放在这里",uploadingMessage:function(e){return"上传 ".concat(e," 个文件")},uploadFinished:function(e,t){return"上传文件:".concat(e,",拒绝文件:").concat(t)},noFilesMessage:"没有缺少要加载的有效文件",footer:{acceptAll:"接受所有文件类型",acceptCustom:function(e){return"允许的类型: ".concat(e)}},header:{uploadFilesMessage:"上传文件",maxSizeMessage:function(e){return"最大文件大小:".concat(e)},validFilesMessage:function(e,t){return"文档 ".concat(e,"/").concat(t)}},fakeuploadsuccess:"文件已成功上传",fakeUploadError:"上传时出错"},w={fullInfoLayer:{name:"文档名称: ",size:"尺寸: ",type:"文件类型: "},status:{preparing:"预加载",uploading:"上传",success:"成功",valid:"接受的文件",denied:"被拒绝的文件",error:"错误",aborted:"中止"}},x={maxSizeError:function(t){return"文件太大。 允许的最大文件大小为 ".concat(e(t))},acceptError:"文件类型不允许",maxFileCount:function(e){return"已达到最大文件数 (".concat(e,")")}},_={defaultLabel:"把你的文件放在這裡 ",uploadingMessage:function(e){return"上傳".concat(e,"個文件")},uploadFinished:function(e,t){return"上傳文件: ".concat(e,", 拒絕的文件:").concat(t)},noFilesMessage:"沒有缺少要上傳的有效文件",footer:{acceptAll:"接受所有文件類型",acceptCustom:function(e){return"允許的類型:".concat(e)}},header:{uploadFilesMessage:"上傳文件",maxSizeMessage:function(e){return"最大文件大小:".concat(e)},validFilesMessage:function(e,t){return" 文件 ".concat(e,"/").concat(t)}},fakeuploadsuccess:"文件已成功上傳",fakeUploadError:"上傳時出錯"},y={fullInfoLayer:{name:"文檔名稱: ",size:"文件大小: ",type:"文件類型: "},status:{preparing:"預加載",uploading:"上傳",success:"成功",valid:"有效文件",denied:"無效文件",error:"錯誤",aborted:"中止"}},E={maxSizeError:function(t){return"文件太大。 允許的最大文件大小為 ".concat(e(t))},acceptError:"文件類型不允許",maxFileCount:function(e){return"已達到最大文件數 (".concat(e,")")}},A={"ES-es":p,"EN-en":s,"FR-fr":i,"IT-it":r,"PT-pt":b,"RU-ru":g,"ZH-cn":w,"ZH-hk":y},z=function(e){switch(e){case"ES-es":return A["ES-es"];case"EN-en":default:return A["EN-en"];case"FR-fr":return A["FR-fr"];case"IT-it":return A["IT-it"];case"PT-pt":return A["PT-pt"];case"RU-ru":return A["RU-ru"];case"ZH-cn":return A["ZH-cn"];case"ZH-hk":return A["ZH-hk"]}},k={"ES-es":l,"EN-en":o,"FR-fr":n,"IT-it":t,"PT-pt":h,"RU-ru":f,"ZH-cn":F,"ZH-hk":_},S=function(e){switch(e){case"ES-es":return k["ES-es"];case"EN-en":default:return k["EN-en"];case"FR-fr":return k["FR-fr"];case"IT-it":return k["IT-it"];case"PT-pt":return k["PT-pt"];case"RU-ru":return k["RU-ru"];case"ZH-cn":return k["ZH-cn"];case"ZH-hk":return k["ZH-hk"]}},M={"ES-es":d,"EN-en":u,"FR-fr":c,"IT-it":a,"PT-pt":v,"RU-ru":m,"ZH-cn":x,"ZH-hk":E},D=function(e){return e&&["ES-es","EN-en","FR-fr","IT-it","PT-pt","RU-ru","ZH-cn","ZH-hk"].includes(e)?M[e]:M["EN-en"]},j=function(e,t,r){return new Promise((function(a,n){try{var i=new FileReader;i.onprogress=function(){null==t||t()},i.onerror=function(){null==r||r()},i.onload=function(){a(i.result)},i.readAsDataURL(e)}catch(e){n(void 0)}}))},C=function(e,t,r,a){return new Promise((function(n,i){try{var c=new FileReader;c.onload=function(){n(c.result)},c.onprogress=function(){null==r||r()},c.onerror=function(){null==a||a()},c.readAsText(e,t||"base64")}catch(e){i(void 0)}}))},B=function(e,t,r){return new Promise((function(a,n){try{var i=new FileReader;i.onload=function(){a(i.result)},i.onprogress=function(){null==t||t()},i.onerror=function(){null==r||r()},i.readAsBinaryString(e)}catch(e){n(void 0)}}))},T=function(e,t,r){return new Promise((function(a,n){try{var i=new FileReader;i.onload=function(){a(i.result)},i.onprogress=function(){null==t||t()},i.onerror=function(){null==r||r()},i.readAsArrayBuffer(e)}catch(e){n(void 0)}}))};function I(e,t,r){return void 0===t&&(t=135),void 0===r&&(r=120),new Promise((function(a,n){try{var i=new Image;i.src=e,i.onload=function(){var c=document.createElement("canvas"),o=t,s=r,u=i.width,l=i.height;t>u&&r>l?a(e):u>l?u>o&&(l*=o/u,u=o):l>s&&(u*=s/l,l=s),c.width=u,c.height=l;var p=c.getContext("2d");p?(p.drawImage(i,0,0,u,l),a(c.toDataURL())):("development"===process.env.NODE_ENV&&console.error("An error ocurred when trying to make a thumnail"),n(void 0))}}catch(e){"development"===process.env.NODE_ENV&&console.error("An error ocurred when trying to make a thumnail"),n(void 0)}}))}function L(e){return new Promise((function(t,r){if(e&&0!==e.length)try{var a=new Image;a.src=e,a.onerror=function(e){r("landscape")},a.onload=function(){var e=a.width,r=a.height;t(e>r?"landscape":"portrait")}}catch(e){"development"===process.env.NODE_ENV&&console.error("An error ocurred when trying to get the image orientation"),r("landscape")}else r("landscape")}))}var U="https://user-images.githubusercontent.com/43678736/132086517-72a51a12-e403-4675-bfd7-22c23affa730.png",R="https://user-images.githubusercontent.com/43678736/132086518-7026d4f1-ea16-4ed0-89fd-37c1aa8ac3ed.png",N="https://user-images.githubusercontent.com/43678736/132086519-863c63b4-917e-4471-94ff-7e15651cc14b.png",P="https://user-images.githubusercontent.com/43678736/132086520-9bc6aa3b-51c9-4da2-9ef7-349162b86d0b.png",q="https://user-images.githubusercontent.com/43678736/132086521-dbd6cf0d-d4d7-4b92-bb26-17e8a51a9383.png",O="https://user-images.githubusercontent.com/43678736/132086522-070f48e8-78a8-4294-8dbb-aab81525e164.png",H="https://user-images.githubusercontent.com/43678736/132086595-90ab7f90-f87e-4900-94d9-d0b26745df48.png",Z="https://user-images.githubusercontent.com/43678736/132086597-e285ad5c-613a-4679-a270-493e5be4ffd9.png",V="https://user-images.githubusercontent.com/43678736/132086598-623c410a-084a-4395-a448-211b2ff61cfe.png",G="https://user-images.githubusercontent.com/43678736/132086600-8b70a007-512d-4252-9c66-eabd3ddd6573.png",X="https://user-images.githubusercontent.com/43678736/132086601-e62e5d1a-d8a2-4475-a14f-85922cec9272.png",K="https://user-images.githubusercontent.com/43678736/132086602-4c772934-f608-4f01-8459-c4622cee8ad5.png",J="https://user-images.githubusercontent.com/43678736/132086604-b5b019fe-572e-477e-92c2-3769a48a1304.png",Q="https://user-images.githubusercontent.com/43678736/132086606-715ccb66-4702-4f7d-9b09-ac93ba17b643.png",$="https://user-images.githubusercontent.com/43678736/132086608-bcae9d57-8e54-488c-90c4-4952ae530b5e.png",W="https://user-images.githubusercontent.com/43678736/132086618-397d6bd2-9fda-43ed-a135-cb40388c35af.png",Y="https://user-images.githubusercontent.com/43678736/132086620-2586ba40-c583-4589-b1a4-8bb5b258b44d.png",ee="https://user-images.githubusercontent.com/43678736/132086621-3b95fb64-2533-4ccc-abcd-bd2beba572e9.png",te="https://user-images.githubusercontent.com/43678736/132086622-af705a0c-2b25-4ba7-8ab6-bd69ec97f7e2.png",re="https://user-images.githubusercontent.com/43678736/132086624-89141a46-64e4-4fa0-bf69-54a0eb4d48c9.png",ae="https://user-images.githubusercontent.com/43678736/132086625-1b8f2652-1de0-4475-8c12-7da4a9973ffb.png",ne="https://user-images.githubusercontent.com/43678736/132086626-38699705-1e6f-4bca-984b-03167b236faa.png",ie="https://user-images.githubusercontent.com/43678736/132086650-f1166246-b361-4c30-a04e-9781c555d14a.png",ce="https://user-images.githubusercontent.com/43678736/132086650-f1166246-b361-4c30-a04e-9781c555d14a.png",oe="https://user-images.githubusercontent.com/43678736/132086652-4562942e-aaea-466c-968f-380fffabf3f9.png",se="https://user-images.githubusercontent.com/43678736/132086653-0487e7e2-1ee3-49e2-8cfe-3e20f1f7490a.png",ue="https://user-images.githubusercontent.com/43678736/132086656-6e96c815-e4e2-4ffd-9d71-57e9cc2450bc.png",le="https://user-images.githubusercontent.com/43678736/132086658-5d27d3c2-394f-43fb-b512-9b414a257875.png",pe="https://user-images.githubusercontent.com/43678736/132086659-98f3ef6e-b9f3-4b6d-b18f-469b5334ba27.png",de="https://user-images.githubusercontent.com/43678736/132086661-a5484553-06c7-4ffa-a8f9-96b57b1b0344.png",fe="https://user-images.githubusercontent.com/43678736/132086662-05ad1597-d5e5-4efa-833e-2876e966a745.png",ge="https://user-images.githubusercontent.com/43678736/132086663-90c58955-f7fb-4bdb-ac53-92667d16d4a3.png",me="https://user-images.githubusercontent.com/43678736/132086664-9a7530e7-6d78-4ef3-a176-20cf7f57b555.png",he="https://user-images.githubusercontent.com/43678736/132086666-ab3c505d-b2c0-4177-9a06-aed5d9c39ee4.png",be="https://user-images.githubusercontent.com/43678736/132086667-6c7dcbcc-8d83-41a2-8e0a-85b09e2791ae.png",ve="https://user-images.githubusercontent.com/43678736/132086668-9f246e91-cf2e-49cf-9617-e1fbb71abbbb.png",Fe="https://user-images.githubusercontent.com/43678736/132086669-46113762-84d1-4b32-9441-b0138ce17a5d.png",we="https://user-images.githubusercontent.com/43678736/145835364-2054509d-3448-4d34-921f-73dd6e297fc7.png",xe="https://user-images.githubusercontent.com/43678736/145835367-19172bf8-cd5a-4cbe-b512-d0de1d91f269.png",_e="https://user-images.githubusercontent.com/43678736/145835373-a57ef0f5-3968-483b-9f55-6d67e7f1dcea.png",ye="https://user-images.githubusercontent.com/43678736/132086670-0f96e770-cedc-4635-a5f9-cf97894c1d7a.png",Ee="https://user-images.githubusercontent.com/43678736/132086671-02ad35ef-ec3a-4a65-abd5-5bf794dfcf7b.png",Ae="https://user-images.githubusercontent.com/43678736/132086672-3a856fda-823d-4997-b802-c7c640e6ef44.png",ze="https://user-images.githubusercontent.com/43678736/132086673-0c4409ab-754e-4619-8cfa-179d0ccf1bd9.png",ke="https://user-images.githubusercontent.com/43678736/132086674-fdb56d02-5845-49b7-8462-6357bc963464.png",Se="https://user-images.githubusercontent.com/43678736/132086675-c879645d-acb4-41a6-ab3c-4e6c2048badb.png",Me="https://user-images.githubusercontent.com/43678736/132086685-4e327c4c-a409-4b83-b36a-8d88936b314b.png",De="https://user-images.githubusercontent.com/43678736/132086688-8e82fae4-3a9b-49c0-bf99-77189525514c.png",je="https://user-images.githubusercontent.com/43678736/132086689-fe1fef9f-d2db-455b-8f4b-09acd095f571.png",Ce="https://user-images.githubusercontent.com/43678736/132086689-fe1fef9f-d2db-455b-8f4b-09acd095f571.png",Be="https://user-images.githubusercontent.com/43678736/132086691-d472576b-ec6a-4332-acd2-dd6a00b72952.png",Te="https://user-images.githubusercontent.com/43678736/132086693-9d43571e-0c86-438f-b247-e2cb42e19e06.png",Ie="https://user-images.githubusercontent.com/43678736/132086694-4e661d6a-1118-441e-8bc3-c52fcb2133b6.png",Le="https://user-images.githubusercontent.com/43678736/132086697-1d82d724-35b6-4f06-847a-3c59a5deda6e.png",Ue="https://user-images.githubusercontent.com/43678736/132086698-19384230-dbd7-4e05-bc69-ef4537b6aae3.png",Re="https://user-images.githubusercontent.com/43678736/132086699-5993a482-04f4-4915-b105-9037f527cf61.png",Ne="https://user-images.githubusercontent.com/43678736/132086700-c23461c8-6819-46e1-aecd-0a1f8d3507bb.png",Pe="https://user-images.githubusercontent.com/43678736/132086701-c8044c09-8d95-4af1-9410-66761001d7da.png",qe="https://user-images.githubusercontent.com/43678736/132086702-59294337-ed99-4302-badd-316b2c1ff62f.png",Oe="https://user-images.githubusercontent.com/43678736/132086704-8fd51e7c-afa2-47a3-ab2f-d0bcd0ecae9f.png",He="https://user-images.githubusercontent.com/43678736/132086705-33294da1-5c0f-49f7-b890-e4857cec0a6d.png",Ze="https://user-images.githubusercontent.com/43678736/132086706-22f805d0-39d4-494b-824e-47dc75d05eb7.png",Ve="https://user-images.githubusercontent.com/43678736/132086707-e61a84de-d396-4dbf-8d1b-1d6ee19e1ac8.png",Ge="https://user-images.githubusercontent.com/43678736/132086707-e61a84de-d396-4dbf-8d1b-1d6ee19e1ac8.png",Xe="https://user-images.githubusercontent.com/43678736/132086708-21d096dd-7148-40aa-97f1-cbb099339740.png",Ke="https://user-images.githubusercontent.com/43678736/132086709-811d4e90-3cfa-4044-a956-aeda9c67fc92.png",Je="https://user-images.githubusercontent.com/43678736/132086710-c5479c6c-0249-4542-adad-48b0ef40b775.png",Qe="https://user-images.githubusercontent.com/43678736/132086711-1524a3e7-3e33-4822-a34f-ff3235404045.png",$e="https://user-images.githubusercontent.com/43678736/132086712-17e2c491-f6e4-4586-aef6-06bcc5f4b0e5.png",We="https://user-images.githubusercontent.com/43678736/132086715-204b5a8b-9c5a-4bac-8294-9237ebc16089.png",Ye="https://user-images.githubusercontent.com/43678736/132086716-64511d20-58cb-45a8-85df-f4d9408b469d.png",et="https://user-images.githubusercontent.com/43678736/132086718-a8499333-6282-4820-aa1f-4d133eb54648.png",tt=function(e){var t=/(?:\.([^.]+))?$/.exec(e);return t?t[1]:""},rt="octet",at=function(e){switch(e){case"aac":return"aac";case"midi":case"x-midi":return"midi";case"mpeg":return"mpeg";case"ogg":return"oga";case"opus":return"opus";case"wav":return"wav";case"webm":return"webm";case"wma":return"wma";default:return rt}},nt=function(e){switch(e){case"css":return"css";case"csv":return"csv";case"html":return"html";case"calendar":return"icalendar";case"javascript":case"x-javascript":return"javascript";case"plain":return"text";case"xml":return"xml";default:return rt}},it=function(e){switch(e){case"bmp":return"bmp";case"gif":return"gif";case"jpg":case"jpeg":return"jpeg";case"png":return"png";case"tiff":return"tiff";case"webp":return"webp";default:return rt}},ct=function(e){switch(e){case"otf":return"otf";case"ttf":return"ttf";case"woff":case"woff2":return"woff";default:return rt}},ot=function(e){switch(e){case"x-msvideo":case"msvideo":case"avi":return"avi";case"mp4":return"mp4";case"mpeg":return"mpeg";case"ogg":return"ogv";case"mp2t":return"mp2t";case"wmv":return"wmv";case"webm":return"webm";default:return rt}},st=function(e){switch(e){case"x-abiword":case"abiword":return"abw";case"x-freearc":case"freearc":return"arc";case"vnd.amazon.ebook":return"azw";case"octet-stream":return"octet";case"x-bzip":case"bzip":return"bz";case"x-bzip2":case"bzip2":return"bz2";case"x-cdf":return"cda";case"msaccess":return"accdb";case"csh":case"x-csh":return"csh";case"vnd.ms-fontobject":return"eot";case"epub+zip":return"epub";case"gzip":return"gzip";case"java-archive":return"jar";case"x-javascript":return"javascript";case"json":return"json";case"ld+json":return"jsonld";case"vnd.apple.installer+xml":return"mpkg";case"ogg":return"ogx";case"vnd.rar":return"rar";case"rtf":return"rtf";case"x-sh":case"sh":return"sh";case"x-shockwave-flash":return"swf";case"x-tar":return"tar";case"x-httpd-php":return"php";case"vnd.visio":return"vsd";case"xhtml+xml":return"xhtml";case"xml":return"xml";case"vnd.mozilla.xul+xml":return"xul";case"vnd.openxmlformats-officedocument.wordprocessingml.document":case"msword":return"docx";case"vnd.openxmlformats-officedocument.spreadsheetml.sheet":return"xlsx";case"vnd.openxmlformats-officedocument.presentationml.presentation":case"vnd.ms-powerpoint":return"pptx";case"vnd.oasis.opendocument.presentation":return"odp";case"vnd.oasis.opendocument.text":return"odt";case"vnd.oasis.opendocument.spreadsheet":return"ods";case"zip":case"x-zip-compressed":return"zip";case"pdf":return"pdf";default:return rt}},ut=function(e){if(!e||!e.includes("/"))return rt;var t=e.split("/")[0],r=e.split("/")[1];switch(t){case"application":return st(r);case"audio":return at(r);case"video":return ot(r);case"text":return nt(r);case"image":return it(r);case"font":return ct(r);default:return rt}},lt=function(e){var t="octet";return e&&""!==e&&(e.includes("zip")||e.includes("rar")?t="zip":e.includes("doc")?t="docx":e.includes("xls")?t="xlsx":e.includes("drawio")?t="drawio":e.includes("psd")?t="psd":e.includes("csv")?t="csv":"jsx"===e?t="react":"py"===e?t="python":"vue"===e?t="vue":"java"===e?t="java":"ts"===e?t="typescript":"sass"!==e&&"scss"!==e||(t="sass")),t},pt=function(e){var t="text";return e&&""!==e&&("jsx"===e?t="react":"py"===e?t="python":"vue"===e?t="vue":"java"===e?t="java":"ts"===e||"tsx"===e?t="typescript":"js"===e?t="javascript":"xml"===e?t="xml":"php"===e&&(t="php")),t},dt=function(e,t){var r="fallBack";if(!e)return r=rt,(null==t?void 0:t.fallBack)?{url:null==t?void 0:t.fallBack,mimeResume:r}:{url:ft[r],mimeResume:r};r=ut(e.type);var a=tt(e.name);"text"===r&&(r=pt(a)),r===rt&&(r=lt(a));var n=null==t?void 0:t[r];return void 0!==n?{url:n,mimeResume:r}:{url:ft[r],mimeResume:r}},ft={aac:R,accdb:P,abw:N,arc:ee,avi:q,azw:O,octet:he,bmp:H,bz:Z,bz2:V,cda:G,csh:X,css:K,csv:J,docx:Q,drawio:$,eot:W,epub:Y,gzip:re,gif:te,html:ae,icalendar:ne,jar:ce,jpeg:se,javascript:oe,json:ue,jsonld:le,midi:pe,mp3:de,mp4:fe,mpeg:ge,mpkg:me,mp2t:he,odp:be,ods:ve,odt:Fe,oga:we,ogv:xe,ogx:_e,opus:ye,otf:Ee,png:ke,pdf:Ae,php:ze,pptx:Se,psd:Me,rar:Ce,rtf:Te,sass:Ie,sh:Le,swf:Ue,tar:je,tiff:Ne,ttf:Pe,typescript:qe,text:Re,vsd:Oe,wav:Ze,weba:Ge,webm:Ve,webp:Xe,woff:Qe,wma:Ke,wmv:Je,xhtml:ae,xlsx:$e,xml:We,xul:Ye,zip:et,sevenzip:U,python:De,java:ie,react:Be,vue:He,fallBack:he},gt=function(){function e(e){var t=e.id,r=e.file,a=e.name,n=e.size,i=e.type,c=e.imageUrl,o=e.valid,s=e.errors,u=e.uploadMessage,l=e.uploadStatus,p=e.progress,d=e.xhr,f=e.extraData,g=e.extraUploadData,m=e.serverResponse,h=e.downloadUrl,b=e.videoUrl;this.id=t,this.file=r,this.name=a,this.size=n,this.type=i,this.imageUrl=c,this.valid=o,this.errors=s,this.uploadStatus=l,this.uploadMessage=u,this.progress=p,this.xhr=d,this.extraData=f,this.extraUploadData=g,this.serverResponse=m,this.downloadUrl=h,this.videoUrl=b}return e.toExtFile=function(e){for(var t={},r=Object.keys(e),a=Object.values(e),n=0;n<a.length;n++){var i=a[n],c=r[n];void 0!==i&&(t[c]=i)}return t},e.prototype.toExtFile=function(){return e.toExtFile(this)},e}(),mt=function(){return mt=Object.assign||function(e){for(var t,r=1,a=arguments.length;r<a;r++)for(var n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},mt.apply(this,arguments)};function ht(e,t,r,a){return new(r||(r=Promise))((function(n,i){function c(e){try{s(a.next(e))}catch(e){i(e)}}function o(e){try{s(a.throw(e))}catch(e){i(e)}}function s(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(c,o)}s((a=a.apply(e,t||[])).next())}))}function bt(e,t){var r,a,n,i,c={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return i={next:o(0),throw:o(1),return:o(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function o(o){return function(s){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,o[0]&&(c=0)),c;)try{if(r=1,a&&(n=2&o[0]?a.return:o[0]?a.throw||((n=a.return)&&n.call(a),0):a.next)&&!(n=n.call(a,o[1])).done)return n;switch(a=0,n&&(o=[2&o[0],n.value]),o[0]){case 0:case 1:n=o;break;case 4:return c.label++,{value:o[1],done:!1};case 5:c.label++,a=o[1],o=[0];continue;case 7:o=c.ops.pop(),c.trys.pop();continue;default:if(!(n=c.trys,(n=n.length>0&&n[n.length-1])||6!==o[0]&&2!==o[0])){c=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]<n[3])){c.label=o[1];break}if(6===o[0]&&c.label<n[1]){c.label=n[1],n=o;break}if(n&&c.label<n[2]){c.label=n[2],c.ops.push(o);break}n[2]&&c.ops.pop(),c.trys.pop();continue}o=t.call(e,c)}catch(e){o=[6,e],a=0}finally{r=n=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}}function vt(e,t,r){if(r||2===arguments.length)for(var a,n=0,i=t.length;n<i;n++)!a&&n in t||(a||(a=Array.prototype.slice.call(t,0,n)),a[n]=t[n]);return e.concat(a||Array.prototype.slice.call(t))}var Ft=function(){function e(){}return e.getNextId=function(){return e.nextId++,e.nextId},e.setFileList=function(t,r){return t?(e.fileLists[t]=vt([],r,!0),t):0},e.createFileListMap=function(){var t=e.getNextId();return e.fileLists[t]=[],t},e.removeFileListMap=function(t){if(!t)return 0;try{return e.fileLists[t]=void 0,t}catch(e){return"development"===process.env.NODE_ENV&&console.error("Error on remove",e),0}},e.getExtFileInstanceList=function(t){try{if(!t)return;return e.fileLists[t]}catch(e){return void("development"===process.env.NODE_ENV&&console.error("Error on getExtFileInstanceList",e))}},e.setFileListMapPreparing=function(t,r,a,n){if("number"==typeof t||"string"==typeof t)try{var i,c=vt([],r,!0);n&&a&&(c=c.filter((function(e){return e.valid}))),i=(c=a?c.map((function(e){return"success"!==e.uploadStatus&&e.valid?mt(mt({},e),{uploadStatus:"preparing"}):mt({},e)})):c.map((function(e){return"success"!==e.uploadStatus?mt(mt({},e),{uploadStatus:"preparing"}):mt({},e)}))).map((function(e){return new gt(e)}));e.setFileList(t,i);return i}catch(e){return void("development"===process.env.NODE_ENV&&console.error("setFileListMapPreparing Error on get List",e))}},e.setFileListMapPreparing2=function(t,r,a,n){return e.setFileList(t,r.map((function(e){return new gt(mt(mt({},e),{uploadStatus:"preparing"}))}))),e.getExtFileInstanceList(t)},e.nextId=0,e.fileLists={},e}(),wt=function(e,t,r,a,n){return{url:e,method:t,headers:r,uploadLabel:a,cleanonUpload:n}},xt=function(){function e(){}return e.createFile=function(e,t,r){var a=new File([],e,{type:r});return Object.defineProperty(a,"size",{get:function(){return t}}),a},e.create_aac=function(t){return e.createFile("acc_audio-file-with-large-name.aac",t||3516516,"audio/aac")},e.create_abw=function(t){return e.createFile("abiword-file-with-large-name.abw",t||3516516,"application/x-abiword")},e.create_freearc=function(t){return e.createFile("freearc-file-with-large-name.arc",t||3516516,"application/x-freearc")},e.create_avi=function(t){return e.createFile("avi-file-with-large-name.avi",t||3516516,"video/x-msvideo")},e.create_azw=function(t){return e.createFile("amazon_kindle_ebook-file-with-large-name.azw",t||3516516,"application/vnd.amazon.ebook")},e.create_octet=function(t){return e.createFile("binary_octet_stream-file-with-large-name.bin",t||3516516,"application/octet-stream")},e.create_bmp=function(t){return e.createFile("bit_map-file-with-large-name.bmp",t||3516516,"image/bmp")},e.create_bz=function(t){return e.createFile("x_bzip-file-with-large-name.bz",t||3516516,"application/x-bzip")},e.create_bz2=function(t){return e.createFile("x_bzip_2-file-with-large-name.bz2",t||3516516,"application/x-bzip2")},e.create_cda=function(t){return e.createFile("cd_audio-file-with-large-name.cda",t||3516516,"application/x-cdf")},e.create_csh=function(t){return e.createFile("test-file-with-large-name.csh",t||3516516,"application/x-csh")},e.create_css=function(t){return e.createFile("test-file-with-large-name.css",t||3516516,"text/css")},e.create_csv=function(t){return e.createFile("test-file-with-large-name.csv",t||3516516,"text/csv")},e.create_doc=function(t){return e.createFile("test-file-with-large-name.doc",t||3516516,"application/msword")},e.create_docx=function(t){return e.createFile("test-file-with-large-name.docx",t||3516516,"application/vnd.openxmlformats-officedocument.wordprocessingml.document")},e.create_eot=function(t){return e.createFile("test-file-with-large-name.eot",t||3516516,"application/vnd.ms-fontobject")},e.create_epub=function(t){return e.createFile("test-file-with-large-name.epub",t||3516516,"application/epub+zip")},e.create_gzip=function(t){return e.createFile("test-file-with-large-name.gz",t||3516516,"application/gzip")},e.create_gif=function(t){return e.createFile("test-file-with-large-name.gif",t||3516516,"image/gif")},e.create_htm=function(t){return e.createFile("test-file-with-large-name.htm",t||3516516,"text/html")},e.create_html=function(t){return e.createFile("test-file-with-large-name.html",t||3516516,"text/html")},e.create_ico=function(t){return e.createFile("test-file-with-large-name.ico",t||3516516,"image/vnd.microsoft.icon")},e.create_icalendar=function(t){return e.createFile("test-file-with-large-name.ics",t||3516516,"text/calendar")},e.create_jar=function(t){return e.createFile("test-file-with-large-name.jar",t||3516516,"application/java-archive")},e.create_jpeg=function(t){return e.createFile("test-file-with-large-name.jpeg",t||3516516,"image/jpeg")},e.create_jpg=function(t){return e.createFile("test-file-with-large-name.jpg",t||3516516,"image/jpeg")},e.create_js=function(t){return e.createFile("test-file-with-large-name.js",t||3516516,"text/javascript")},e.create_json=function(t){return e.createFile("test-file-with-large-name.json",t||3516516,"application/json")},e.create_jsonld=function(t){return e.createFile("test-file-with-large-name.jsonld",t||3516516,"application/ld+json")},e.create_mid=function(t){return e.createFile("test-file-with-large-name.mid",t||3516516,"audio/midi")},e.create_x_mid=function(t){return e.createFile("test-file-with-large-name.mid",t||3516516,"audio/x-midi")},e.create_midi=function(t){return e.createFile("test-file-with-large-name.midi",t||3516516,"audio/x-midi")},e.create_x_midi=function(t){return e.createFile("test-file-with-large-name.midi",t||3516516,"audio/x-midi")},e.create_mjs=function(t){return e.createFile("test-file-with-large-name.mjs",t||3516516,"text/javascript")},e.create_mp3=function(t){return e.createFile("test-file-with-large-name.mp3",t||3516516,"audio/mpeg")},e.create_mp4=function(t){return e.createFile("test-file-with-large-name.mp4",t||3516516,"video/mp4")},e.create_mpeg=function(t){return e.createFile("test-file-with-large-name.mpeg",t||3516516,"video/mpeg")},e.create_mpkg=function(t){return e.createFile("test-file-with-large-name.mpkg",t||3516516,"application/vnd.apple.installer+xml")},e.create_odp=function(t){return e.createFile("test-file-with-large-name.odp",t||3516516,"application/vnd.oasis.opendocument.presentation")},e.create_ods=function(t){return e.createFile("test-file-with-large-name.ods",t||3516516,"application/vnd.oasis.opendocument.spreadsheet")},e.create_odt=function(t){return e.createFile("test-file-with-large-name.odt",t||3516516,"application/vnd.oasis.opendocument.text")},e.create_oga=function(t){return e.createFile("test-file-with-large-name.oga",t||3516516,"audio/ogg")},e.create_ogv=function(t){return e.createFile("test-file-with-large-name.ogv",t||3516516,"video/ogg")},e.create_ogx=function(t){return e.createFile("test-file-with-large-name.ogx",t||3516516,"application/ogg")},e.create_opus=function(t){return e.createFile("test-file-with-large-name.opus",t||3516516,"audio/opus")},e.create_otf=function(t){return e.createFile("test-file-with-large-name.otf",t||3516516,"font/otf")},e.create_png=function(t){return e.createFile("test-file-with-large-name.png",t||3516516,"image/png")},e.create_pdf=function(t){return e.createFile("test-file-with-large-name.pdf",t||3516516,"application/pdf")},e.create_php=function(t){return e.createFile("test-file-with-large-name.php",t||3516516,"application/x-httpd-php")},e.create_ppt=function(t){return e.createFile("test-file-with-large-name.ppt",t||3516516,"application/vnd.ms-powerpoint")},e.create_pptx=function(t){return e.createFile("test-file-with-large-name.pptx",t||3516516,"application/vnd.openxmlformats-officedocument.presentationml.presentation")},e.create_rar=function(t){return e.createFile("test-file-with-large-name.rar",t||3516516,"application/vnd.rar")},e.create_rtf=function(t){return e.createFile("test-file-with-large-name.rtf",t||3516516,"application/rtf")},e.create_sh=function(t){return e.createFile("test-file-with-large-name.sh",t||3516516,"application/x-sh")},e.create_svg=function(t){return e.createFile("test-file-with-large-name.svg",t||3516516,"image/svg+xml")},e.create_swf=function(t){return e.createFile("test-file-with-large-name.swf",t||3516516,"application/x-shockwave-flash")},e.create_tar=function(t){return e.createFile("test-file-with-large-name.tar",t||3516516,"application/x-tar")},e.create_tif=function(t){return e.createFile("test-file-with-large-name.tif",t||3516516,"image/tiff")},e.create_tiff=function(t){return e.createFile("test-file-with-large-name.tiff",t||3516516,"image/tiff")},e.create_ts=function(t){return e.createFile("mp2t_video-file-with-large-name.ts",t||3516516,"video/mp2t")},e.create_ttf=function(t){return e.createFile("test-file-with-large-name.ttf",t||3516516,"font/ttf")},e.create_text=function(t){return e.createFile("test-file-with-large-name.txt",t||3516516,"text/plain")},e.create_typescript=function(t){return e.createFile("typescript-file-with-large-name.ts",t||3516516,"text/plain")},e.create_vsd=function(t){return e.createFile("ms_visio-file-with-large-name.vsd",t||3516516,"application/vnd.visio")},e.create_wav=function(t){return e.createFile("wav_audio-file-with-large-name.wav",t||3516516,"audio/wav")},e.create_weba=function(t){return e.createFile("web_audio-file-with-large-name.weba",t||3516516,"audio/webm")},e.create_webm=function(t){return e.createFile("web_video-file-with-large-name.webm",t||3516516,"video/webm")},e.create_webp=function(t){return e.createFile("web_image-file-with-large-name.webp",t||3516516,"image/webp")},e.create_woff=function(t){return e.createFile("test-file-with-large-name.woff",t||3516516,"font/woff")},e.create_woff2=function(t){return e.createFile("test-file-with-large-name.woff2",t||3516516,"font/woff2")},e.create_xhtml=function(t){return e.createFile("test-file-with-large-name.xhtml",t||3516516,"application/xhtml+xml")},e.create_xlsx=function(t){return e.createFile("test-file-with-large-name.xls",t||3516516,"application/vnd.ms-excel")},e.create_xls=function(t){return e.createFile("test-file-with-large-name.xlsx",t||3516516,"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")},e.create_xml=function(t){return e.createFile("xml-file-with-large-name.xml",t||3516516,"application/xml")},e.create_xml_txt=function(t){return e.createFile("xml_plain_text-file-with-large-name.xml",t||3516516,"application/xml")},e.create_xul=function(t){return e.createFile("test-file-with-large-name.xul",t||3516516,"application/vnd.mozilla.xul+xml")},e.create_zip=function(t){return e.createFile("zip-file-with-large-name.zip",t||3516516,"application/zip")},e.create_3gp=function(t){return e.createFile("3gp_video-file-with-large-name.3gp",t||3516516,"video/3gpp")},e.create_3gp2=function(t){return e.createFile("3gp2_video-file-with-large-name.3g2",t||3516516,"video/3gpp2")},e.create_3gp_a=function(t){return e.createFile("3gp_audio-file-with-large-name.3gp",t||3516516,"audio/3gpp")},e.create_3gp_v=function(t){return e.createFile("3gp_audio-file-with-large-name.3gp2",t||3516516,"audio/3gpp2")},e.create_7z=function(t){return e.createFile("seven_zip-file-with-large-name.7z",t||3516516,"application/x-7z-compressed")},e.create_python=function(t){return e.createFile("python-file-with-large-name.py",t||3516516,"text/plain")},e.create_java=function(t){return e.createFile("java-file-with-large-name.java",t||3516516,"text/plain")},e.create_react=function(t){return e.createFile("react_jsx-file-with-large-name.jsx",t||3516516,"text/plain")},e.create_vue=function(t){return e.createFile("vue-file-with-large-name.vue",t||3516516,"text/plain")},e.createFileListMiscelanious=function(t){var r=[];return r.push(e.create_aac(t)),r.push(e.create_abw(t)),r.push(e.create_freearc(t)),r.push(e.create_avi(t)),r.push(e.create_azw(t)),r.push(e.create_octet(t)),r.push(e.create_bmp(t)),r.push(e.create_bz(t)),r.push(e.create_bz2(t)),r.push(e.create_cda(t)),r.push(e.create_csh(t)),r.push(e.create_css(t)),r.push(e.create_csv(t)),r.push(e.create_doc(t)),r.push(e.create_docx(t)),r.push(e.create_eot(t)),r.push(e.create_epub(t)),r.push(e.create_gzip(t)),r.push(e.create_gif(t)),r.push(e.create_htm(t)),r.push(e.create_html(t)),r.push(e.create_ico(t)),r.push(e.create_icalendar(t)),r.push(e.create_jar(t)),r.push(e.create_jpeg(t)),r.push(e.create_jpg(t)),r.push(e.create_js(t)),r.push(e.create_json(t)),r.push(e.create_jsonld(t)),r.push(e.create_mid(t)),r.push(e.create_midi(t)),r.push(e.create_x_mid(t)),r.push(e.create_x_midi(t)),r.push(e.create_mjs(t)),r.push(e.create_mp3(t)),r.push(e.create_mp4(t)),r.push(e.create_mpeg(t)),r.push(e.create_mpkg(t)),r.push(e.create_odp(t)),r.push(e.create_ods(t)),r.push(e.create_odt(t)),r.push(e.create_oga(t)),r.push(e.create_ogv(t)),r.push(e.create_ogx(t)),r.push(e.create_opus(t)),r.push(e.create_otf(t)),r.push(e.create_png(t)),r.push(e.create_pdf(t)),r.push(e.create_php(t)),r.push(e.create_ppt(t)),r.push(e.create_pptx(t)),r.push(e.create_rar(t)),r.push(e.create_rtf(t)),r.push(e.create_sh(t)),r.push(e.create_svg(t)),r.push(e.create_swf(t)),r.push(e.create_tar(t)),r.push(e.create_tif(t)),r.push(e.create_tiff(t)),r.push(e.create_ts(t)),r.push(e.create_ttf(t)),r.push(e.create_text(t)),r.push(e.create_typescript(t)),r.push(e.create_vsd(t)),r.push(e.create_wav(t)),r.push(e.create_weba(t)),r.push(e.create_webm(t)),r.push(e.create_webp(t)),r.push(e.create_woff(t)),r.push(e.create_woff2(t)),r.push(e.create_xhtml(t)),r.push(e.create_xlsx(t)),r.push(e.create_xls(t)),r.push(e.create_xml(t)),r.push(e.create_xml_txt(t)),r.push(e.create_xul(t)),r.push(e.create_zip(t)),r.push(e.create_python(t)),r.push(e.create_java(t)),r.push(e.create_react(t)),r.push(e.create_vue(t)),r},e}(),_t=function(e){return xt.createFileListMiscelanious(e)},yt=function(e,t,r){return void 0===e&&(e="png-image-file-with-large-name.png"),void 0===t&&(t=455555),void 0===r&&(r="image/png"),xt.createFile(e,t,r)},Et=function(){function e(){}return e.getNextId=function(){return e.nextId++,e.nextId},e.nextId=0,e}(),At=function(e){for(var t=[],r=0,a=void 0;a=e[r];r++)t.push({id:Et.getNextId(),file:a,name:a.name,size:a.size,type:a.type});return t},zt=function(e){for(var t=[],r=0,a=void 0;a=e[r];r++)t.push(new gt({id:Et.getNextId(),file:a,name:a.name,size:a.size,type:a.type}));return t},kt=function(e,t,r,a){return null!=e||null!=t||null!=r||null!=a},St=function(e,t){void 0===e&&(e=""),void 0===t&&(t=!1);var r=e;return t?e.length>=20&&(r=e.slice(0,10)+"..."+e.slice(-7)):e.length>=30&&(r=e.slice(0,13)+"..."+e.slice(-8)),r},Mt=function(e){return new Promise((function(t,r){setTimeout((function(){t(mt(mt({},e),{uploadStatus:"uploading"}))}),1500)}))},Dt=function(e){return new Promise((function(t,r){setTimeout((function(){t(mt(mt({},e),{uploadStatus:"success"}))}),2e3)}))},jt=function(e){return void 0===e&&(e=5e3),new Promise((function(t,r){setTimeout((function(){t()}),e)}))},Ct=function(e){return new Promise((function(t,r){setTimeout((function(){e.uploadStatus="uploading",t(mt(mt({},e),{uploadStatus:"uploading"}))}),1500)}))},Bt=function(e){return new Promise((function(t,r){setTimeout((function(){e.uploadStatus="success",t(mt(mt({},e),{uploadStatus:"success"}))}),2e3)}))},Tt=function(e,t){void 0===t&&(t=S("EN-en"));var r=e.toExtFile();return new Promise((function(e,a){setTimeout((function(){if(Math.floor(10*Math.random())%2==0){var a=!0,n=t.fakeuploadsuccess,i={url:""};e(mt(mt({},r),{serverResponse:{success:a,message:n,payload:i},uploadStatus:"success",uploadMessage:n}))}else{a=!1,n=t.fakeUploadError,i={};e(mt(mt({},r),{serverResponse:{success:a,message:n,payload:i},uploadStatus:"error",uploadMessage:n}))}}),1700)}))};function It(e,t){return void 0===e&&(e=0),void 0===t&&(t=0),Math.floor(Math.random()*(t-e))+e}var Lt=function(e){e&&(e.value="")},Ut=function(e,t){return t?"".concat(e," ").concat(t):e},Rt=function(e,t){return(!t||t&&e.valid)&&"success"!==e.uploadStatus},Nt=function(e,t,r,a){var n="",i=void 0,c=void 0;return e&&"string"==typeof e.name?(n=e.name,i=e.type,c=e.size):t&&"string"==typeof t&&(n=t,i=r,c=a),[n,i,c]},Pt=function(e){return e&&0!==e.length?e.split(",").map((function(e){return e.trim()})):[]},qt=function(e,t){for(var r=t.name,a=t.type,n=0;n<e.length;n++){var i=e[n];if(0!==i.length){if("."===i.charAt(0)&&i.includes(tt(r)))return!0;if(a&&a.length>0&&i.includes("/")&&a.includes("/")){var c=i.split("/")[0],o=i.split("/")[1],s=a.split("/")[0],u=a.split("/")[1];if(c===s){if("*"===o)return!0;if(o===u)return!0}}}}return!1},Ot=function(e,t,r,a,n,i){for(var c=[],o=t,s=D(i),u=0,l=void 0;l=e[u];u++){var p=Vt(l,a,r,s);if(p.valid){var d=o>0;if(p.valid=d,!d){var f=s.maxFileCount;p.errors=p.errors?vt(vt([],p.errors,!0),[f(n||1/0)],!1):[f(n||1/0)]}o--}c.push(p)}return c},Ht=function(e,t,r,a,n,i){var c=[];if(!t)return c;for(var o=t,s=D(i),u=s.maxFileCount,l=0;l<e.length;l++){var p=e[l];if((p=Zt(p,a,r,s)).valid){var d=o>0;p.valid=d,d||(p.errors=p.errors?vt(vt([],p.errors,!0),[u(n||1/0)],!1):[u(n||1/0)]),o--}c.push(p)}return c},Zt=function(e,t,r,a){var n=mt({},e),i=[];if(!e.file)return mt({},n);if(t){var c=t(n.file).errors;c&&i.push.apply(i,c)}var o=r.maxFileSize,s=r.accept,u=e.file;if(o&&u.size>o){var l=a.maxSizeError;i.push(l(o))}s&&!qt(Pt(s),u)&&i.push(a.acceptError);var p=0===i.length;return n=mt(mt({},n),{valid:p,errors:p?void 0:i})},Vt=function(e,t,r,a){var n=Et.getNextId(),i=[];if(t)return mt({id:n,file:e},t(e));var c=r.maxFileSize,o=r.accept;if(c&&e.size>c){var s=a.maxSizeError;i.push(s(c))}return o&&!qt(Pt(o),e)&&i.push(a.acceptError),{id:n,file:e,valid:0===i.length,errors:i}},Gt=["File is too big. Max file size allowed is 80mb.","File's type is not allowed.","Max amount of files (28) has been reached."],Xt=function(e,t,r,a){void 0===t&&(t=Math.ceil(28*Math.random())%2==0);var n=[],i=r||function(){switch(It(0,4)){case 0:return"error";case 1:return"uploading";case 2:return"success";default:return}}(),c=a||"";if(t){if(!a)switch(i){case"error":c="Upload failed. There was an error";break;case"success":c="File was successfully upload";break;default:a=void 0}n=void 0}else{var o=It(0,3);n.push(Gt[o]),i=void 0,c=void 0}return{id:Et.getNextId(),valid:t,file:e,uploadStatus:i,uploadMessage:c,errors:n}},Kt=function(e){return{id:e||Et.getNextId(),name:"fileName.ext",size:29360128,type:"files-ui/mock",file:yt("fileName.ext",29360128,"files-ui/mock"),errors:Gt,uploadMessage:"uploaded",uploadStatus:"preparing",valid:!1,progress:28,xhr:new XMLHttpRequest,extraData:{extraData1:"files-ui is the best",extraData2:{id:1,name:"files-ui.mock"},deleted:!0},downloadUrl:"https://www.files-ui.com/mock/file-download"}};function Jt(e,t){for(var r=Object.keys(t||{}),a=0;a<r.length&&t;a++)e.append(r[a],t[r[a]]);e.append("otherValue","HAAAAAAAAAAAAAAa")}function Qt(e,t){for(var r=Object.keys(t||{}),a=0;a<r.length&&t;a++)e.setRequestHeader(r[a],t[r[a]])}var $t={success:!1,message:"Timeout error",payload:{}},Wt={success:!1,message:"Upload aborted",payload:{}},Yt={success:!1,message:"Error when parsing JSON response",payload:{}},er={success:!1,message:"Unexpected error",payload:{}},tr=function(e){return mt(mt({},e),{uploadMessage:"Unable to upload. xhr object was not provided",uploadStatus:"error",serverResponse:{success:!1}})},rr=function(e,t,r){return{success:e,message:t,payload:r}},ar=function(e){try{var t=JSON.parse(e.response),r=t.success,a=t.message;return{success:"boolean"==typeof r&&r,message:"string"==typeof a?a:"Error on message response",payload:t.payload||{}}}catch(e){return Yt}},nr=function(e,t){return mt(mt({},e),{serverResponse:t,uploadMessage:t.message,uploadStatus:"success"})},ir=function(e,t){return mt(mt({},e),{uploadMessage:t.message,uploadStatus:"error",serverResponse:t})},cr=function(e,t,r,a,n){return void 0===t&&(t="POST"),new Promise((function(i,c){var o=["POST","PUT","PATCH"].includes(t.toUpperCase())?t:"POST";e.upload.onload=function(){},e.upload.ontimeout=function(){return i($t)},e.upload.onabort=function(){i(Wt)},e.onloadend=function(e){return ht(void 0,void 0,void 0,(function(){return bt(this,(function(e){return[2]}))}))},e.onreadystatechange=function(t){return ht(void 0,void 0,void 0,(function(){return bt(this,(function(t){return e.readyState,4===e.readyState&&(""!==e.response?i(ar(e)):i(Wt)),[2]}))}))},e.open(o,r,!0),Qt(e,n),e.send(a)}))},or=function(e,t,r,a,n){return ht(void 0,void 0,void 0,(function(){return bt(this,(function(i){return[2,new Promise((function(i,c){return ht(void 0,void 0,void 0,(function(){var c,o,s,u,l,p;return bt(this,(function(d){switch(d.label){case 0:return d.trys.push([0,2,,3]),(c=e.xhr)?(o=r||"POST",s=e.file,(u=new FormData).append(n||"file",s),l=mt({otherValue:"other valueee haaaa",param2:{tecnica:"KIKOHUUUU",friend:"Chaos",age:25}},e.extraUploadData),Jt(u,l),p=void 0,[4,cr(c,o,t,u,a||{})]):(i(tr(e)),[2]);case 1:return(p=d.sent()).success?i(nr(e,p)):i(ir(e,p)),[3,3];case 2:return d.sent(),i(ir(e,er)),[3,3];case 3:return[2]}}))}))}))]}))}))};function sr(e,t,r,a,n){var i=this;return new Promise((function(c,o){return ht(i,void 0,void 0,(function(){var i,o;return bt(this,(function(s){switch(s.label){case 0:(i=new FormData).append(a||"file",e),s.label=1;case 1:return s.trys.push([1,3,,4]),[4,cr(new XMLHttpRequest,r,t,i,n)];case 2:return o=s.sent(),c(o),[3,4];case 3:return s.sent(),c(er),[3,4];case 4:return[2]}}))}))}))}var ur=function(e,t,r,a,n){return new Promise((function(i,c){e.upload.onload=function(){},e.upload.ontimeout=function(){return i($t)},e.upload.onabort=function(){return i(Wt)},e.onreadystatechange=function(t){return ht(void 0,void 0,void 0,(function(){return bt(this,(function(t){return 4===e.readyState&&(""!==e.response?i(ar(e)):i(er)),[2]}))}))},e.open(t,r,!0);for(var o=Object.keys(n),s=0;s<o.length;s++)e.setRequestHeader(o[s],n[o[s]]);e.send(a)}))},lr=function(e){return mt(mt({},e),{uploadMessage:"Unexpected error",uploadStatus:"error",serverResponse:{success:!1,message:"Error on upload: unexpected error ",payload:{}}})},pr=function(e){return{id:e.id,uploadedFile:mt(mt({},e),{uploadMessage:"Unable to upload. XHR was not provided",uploadStatus:"error"}),serverResponse:{success:!1,message:"Error on upload: Unable to upload. XHR was not provided ",payload:{}}}},dr=function(e,t,r){return{id:e.id,uploadedFile:mt(mt({},e),{uploadMessage:t.message,uploadStatus:r}),serverResponse:t}},fr=function(e){return e?e.map((function(e){return mt(mt({},e),{xhr:new XMLHttpRequest})})):[]},gr=function(e){return"preparing"===e.uploadStatus?(e.uploadStatus="uploading",mt(mt({},e),{uploadStatus:"uploading"})):e},mr=function(e){return new Promise((function(t,r){setTimeout((function(){"preparing"===e.uploadStatus?(e.uploadStatus="uploading",t(mt(mt({},e),{uploadStatus:"uploading"}))):t(e)}),1500)}))},hr=function(e){return void 0===e&&(e=1500),new Promise((function(t,r){setTimeout((function(){t(!0)}),e)}))},br=function(e){return e.filter((function(e){var t;return!(null===(t=e.extraData)||void 0===t?void 0:t.deleted)})).map((function(e){return"aborted"!==e.uploadStatus||e.uploadMessage||(e.uploadMessage="Upload aborted by user"),gt.toExtFile(e)}))},vr=function(e,t){var r=e.uploadStatus,a=t.uploadStatus;"preparing"===r&&["aborted",void 0].includes(a)?(e.uploadStatus=void 0,e.uploadMessage=t.uploadMessage):"uploading"===r&&["aborted",void 0].includes(a)&&(e.uploadStatus="aborted",e.uploadMessage=t.uploadMessage)},Fr={indianred:"#CD5C5C",lightcoral:"#F08080",salmon:"#FA8072",darksalmon:"#E9967A",lightsalmon:"#FFA07A",crimson:"#DC143C",red:"#FF0000",firebrick:"#B22222",darkred:"#8B0000",pink:"#FFC0CB",lightpink:"#FFB6C1",hotpink:"#FF69B4",deeppink:"#FF1493",mediumvioletred:"#C71585",palevioletred:"#DB7093",coral:"#FF7F50",tomato:"#FF6347",orangered:"#FF4500",darkorange:"#FF8C00",orange:"#FFA500",gold:"#FFD700",yellow:"#FFFF00",lightyellow:"#FFFFE0",lemonchiffon:"#FFFACD",lightgoldenrodyellow:"#FAFAD2",papayawhip:"#FFEFD5",moccasin:"#FFE4B5",peachpuff:"#FFDAB9",palegoldenrod:"#EEE8AA",khaki:"#F0E68C",darkkhaki:"#BDB76B",lavender:"#E6E6FA",thistle:"#D8BFD8",plum:"#DDA0DD",violet:"#EE82EE",orchid:"#DA70D6",fuchsia:"#FF00FF",magenta:"#FF00FF",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",rebeccapurple:"#663399",blueviolet:"#8A2BE2",darkviolet:"#9400D3",darkorchid:"#9932CC",darkmagenta:"#8B008B",purple:"#800080",indigo:"#4B0082",slateblue:"#6A5ACD",darkslateblue:"#483D8B",mediumslateblue:"#7B68EE",greenyellow:"#ADFF2F",chartreuse:"#7FFF00",lawngreen:"#7CFC00",lime:"#00FF00",limegreen:"#32CD32",palegreen:"#98FB98",lightgreen:"#90EE90",mediumspringgreen:"#00FA9A",springgreen:"#00FF7F",mediumseagreen:"#3CB371",seagreen:"#2E8B57",forestgreen:"#228B22",green:"#008000",darkgreen:"#006400",yellowgreen:"#9ACD32",olivedrab:"#6B8E23",olive:"#808000",darkolivegreen:"#556B2F",mediumaquamarine:"#66CDAA",darkseagreen:"#8FBC8B",lightseagreen:"#20B2AA",darkcyan:"#008B8B",teal:"#008080",aqua:"#00FFFF",cyan:"#00FFFF",lightcyan:"#E0FFFF",paleturquoise:"#AFEEEE",aquamarine:"#7FFFD4",turquoise:"#40E0D0",mediumturquoise:"#48D1CC",darkturquoise:"#00CED1",cadetblue:"#5F9EA0",steelblue:"#4682B4",lightsteelblue:"#B0C4DE",powderblue:"#B0E0E6",lightblue:"#ADD8E6",skyblue:"#87CEEB",lightskyblue:"#87CEFA",deepskyblue:"#00BFFF",dodgerblue:"#1E90FF",cornflowerblue:"#6495ED",royalblue:"#4169E1",blue:"#0000FF",mediumblue:"#0000CD",darkblue:"#00008B",navy:"#000080",midnightblue:"#191970",cornsilk:"#FFF8DC",blanchedalmond:"#FFEBCD",bisque:"#FFE4C4",navajowhite:"#FFDEAD",wheat:"#F5DEB3",burlywood:"#DEB887",tan:"#D2B48C",rosybrown:"#BC8F8F",sandybrown:"#F4A460",goldenrod:"#DAA520",darkgoldenrod:"#B8860B",peru:"#CD853F",chocolate:"#D2691E",saddlebrown:"#8B4513",sienna:"#A0522D",brown:"#A52A2A",maroon:"#800000",white:"#FFFFFF",snow:"#FFFAFA",honeydew:"#F0FFF0",mintcream:"#F5FFFA",azure:"#F0FFFF",aliceblue:"#F0F8FF",ghostwhite:"#F8F8FF",whitesmoke:"#F5F5F5",seashell:"#FFF5EE",beige:"#F5F5DC",oldlace:"#FDF5E6",floralwhite:"#FFFAF0",ivory:"#FFFFF0",antiquewhite:"#FAEBD7",linen:"#FAF0E6",lavenderblush:"#FFF0F5",mistyrose:"#FFE4E1",gainsboro:"#DCDCDC",lightgray:"#D3D3D3",silver:"#C0C0C0",darkgray:"#A9A9A9",gray:"#808080",dimgray:"#696969",lightslategray:"#778899",slategray:"#708090",darkslategray:"#2F4F4F",black:"#000000"},wr=function(e,t){void 0===t&&(t=25);var r="",a=(100-t)/100,n=0,i=0,c=0;if(yr(Er(e)))n=16*kr(e.charAt(1))+kr(e.charAt(2)),i=16*kr(e.charAt(3))+kr(e.charAt(4)),c=16*kr(e.charAt(5))+kr(e.charAt(6)),r="rgb(".concat(n*a,", ").concat(i*a,",").concat(c*a,")");else if(e.includes("rgba")){var o=e.replace("rgba(","").split(",");r="rgb(".concat(parseInt(o[0],10)*a,", ").concat(parseInt(o[1],10)*a,",").concat(parseInt(o[2],10)*a,")")}else if(e.includes("rgb")){o=e.replace("rgb(","").split(",");r="rgb(".concat(parseInt(o[0],10)*a,", ").concat(parseInt(o[1],10)*a,",").concat(parseInt(o[2],10)*a,")")}return r},xr=function(e,t){void 0===t&&(t=25);var r="",a=(100+t)/100,n=0,i=0,c=0;if(yr(Er(e)))n=16*kr(e.charAt(1))+kr(e.charAt(2)),i=16*kr(e.charAt(3))+kr(e.charAt(4)),c=16*kr(e.charAt(5))+kr(e.charAt(6)),r="rgb(".concat(n*a,", ").concat(i*a,",").concat(c*a,")");else if(e.includes("rgba")){var o=e.replace("rgba(","").split(",");r="rgb(".concat(parseInt(o[0],10)*a,", ").concat(parseInt(o[1],10)*a,",").concat(parseInt(o[2],10)*a,")")}else if(e.includes("rgb")){o=e.replace("rgb(","").split(",");r="rgb(".concat(parseInt(o[0],10)*a,", ").concat(parseInt(o[1],10)*a,",").concat(parseInt(o[2],10)*a,")")}return r},_r=function(e,t,r){void 0===t&&(t=0);var a=r||"rgba(255, 255, 255, 0.6)";if(!e)return a;var n=e.toUpperCase();if(n.includes("RGBA"))return n;if(n.includes("RGB"))return n.replace("RGB","rgba").replace(")",", ".concat(t,")"));if(!yr(Er(n)))return a;var i,c,o;return i=16*kr(n.charAt(1))+kr(n.charAt(2)),c=16*kr(n.charAt(3))+kr(n.charAt(4)),o=16*kr(n.charAt(5))+kr(n.charAt(6)),"rgba(".concat(i,", ").concat(c,",").concat(o," , ").concat(t,")")},yr=function(e){if("#"!==e.charAt(0))return!1;if(7!==e.length)return!1;for(var t=1;t<e.length;t++)if(!Ar.includes(e.charAt(t)))return!1;return!0};function Er(e){return e?void 0!==Fr[e.toLocaleLowerCase()]?Fr[e.toLocaleLowerCase()]:e:""}var Ar=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"],zr=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],kr=function(e){return Ar.includes(e)?zr[Ar.indexOf(e)]:0},Sr=function(e){return void 0!==e&&""!==e?e:Dr},Mr=function(e,t){return void 0===t&&(t=1),_r(Sr(Er(e)),t)},Dr="#646c7f",jr=function(e,t){var r=Ft.getExtFileInstanceList(e);if(r){var a=vt([],t,!0);if(a=a.filter((function(e){return-1===(null==r?void 0:r.findIndex((function(t){return t.id===e.id})))})),r.length!==t.length||0===t.length)return;for(var n=0;n<r.length;n++)void 0===t[n].uploadStatus&&"preparing"===r[n].uploadStatus&&(r[n].uploadStatus=void 0)}return[]};export{Wt as ABORTED_ERROR_RESPONSE,o as DropzoneEnglish,n as DropzoneFrench,t as DropzoneItalian,k as DropzoneLocalizer,S as DropzoneLocalizerSelector,h as DropzonePortuguese,f as DropzoneRussian,F as DropzoneSimplifiedChinese,l as DropzoneSpanish,_ as DropzoneTraditionalChinese,gt as ExtFileInstance,Ft as ExtFileManager,Et as FileIdGenerator,s as FileItemEnglish,i as FileItemFrench,r as FileItemItalian,A as FileItemLocalizer,z as FileItemLocalizerSelector,b as FileItemPortuguese,g as FileItemRussian,w as FileItemSimplifiedChinese,p as FileItemSpanish,y as FileItemTraditionalChinese,ur as FuiUpload,Yt as JSON_PARSE_ERROR_RESPONSE,ar as JsonParseResponse,Fr as NAMED_COLORS,tr as NO_XHR_PROVIDED_ERROR,xt as SyntheticFile,$t as TIMEOUT_ERROR_RESPONSE,er as UNEXPECTED_ERROR_RESPONSE,u as ValidateErrorEnglish,c as ValidateErrorFrench,a as ValidateErrorItalian,M as ValidateErrorLocalizer,D as ValidateErrorLocalizerSelector,v as ValidateErrorPortuguese,m as ValidateErrorRussian,x as ValidateErrorSimplifiedChinese,d as ValidateErrorSpanish,E as ValidateErrorTraditionalChinese,R as aac,N as abw,P as accdb,Ut as addClassName,Jt as addExtraData,Qt as addHeaders,st as applicationSelector,Sr as asureColor,at as audioSelector,q as avi,O as azw,H as bmp,xr as brighterColor,Z as bz,V as bz2,G as cda,pt as checkIsCode,Lt as cleanInput,Er as colourNameToHex,Mr as completeAsureColor,dr as completeUploadResult,_t as createListOfMultiTypeFile,yt as createSyntheticFile,wt as createUploadConfig,X as csh,K as css,J as csv,wr as darkerColor,Q as docx,$ as drawio,W as eot,Y as epub,Kt as extFileMock,jr as extFileReconcilation,lt as extensionSelector,Tt as fakeFuiUpload,At as fileListToExtFileArray,zt as fileListToExtFileInstanceArray,Ot as fileListvalidator,e as fileSizeFormater,ct as fontSelector,ee as freearc,tt as getExt,L as getImageOrientation,Nt as getLocalFileItemData,It as getRandomInt,dt as getURLFileIco,te as gif,re as gzip,_r as hexColorToRGB,kr as hexTodec,ae as html,ne as icalendar,it as imageSelector,gr as instantPreparingToUploadOne,yr as isHexColor,Rt as isUploadAbleExtFile,kt as isValidateActive,ce as jar,ie as java,oe as javascript,se as jpeg,ue as json,le as jsonld,ir as makeErrorUploadResponse,rr as makeServerResponse,nr as makeSuccessUploadResponse,Xt as makeSyntheticExtFile,pe as midi,ut as mimeSelector,de as mp3,fe as mp4,ge as mpeg,me as mpkg,he as octet,be as odp,ve as ods,Fe as odt,we as oga,xe as ogv,_e as ogx,ye as opus,Ee as otf,Ae as pdf,ze as php,ke as png,Se as pptx,Ct as prepToUploadOne,mr as preparingToUploadOne,Me as psd,De as python,Ce as rar,Be as react,T as readAsArrayBuffer,B as readAsBinaryString,j as readAsDataURL,C as readAsText,I as resizeImage,Te as rtf,br as sanitizeArrExtFile,Ie as sass,Pt as separateAccept,vr as setNextUploadStatus,Mt as setPrepToUploading,U as sevenzip,Le as sh,St as shrinkWord,jt as sleepPreparing,hr as sleepTransition,Ue as swf,je as tar,Re as text,nt as textSelector,Ne as tiff,fr as toUploadableExtFileList,Pe as ttf,qe as typescript,pr as unableToUploadResult,lr as unexpectedErrorUploadResult,or as uploadExtFile,sr as uploadFile,cr as uploadFormData,Dt as uploadOne,Bt as uploadOneExtFile,qt as validateAccept,Zt as validateExtFile,Ht as validateExtFileList,Vt as validateFile,ot as videoSelector,Oe as vsd,He as vue,Ze as wav,Ge as weba,Ve as webm,Xe as webp,Ke as wma,Je as wmv,Qe as woff,$e as xlsx,We as xml,Ye as xul,et as zip}; +var e=function(e){if(e)return e<1024?e+" Bytes":e<1048576?(e/1024).toFixed(2)+" KB":e<1073741824?(e/1024/1024).toFixed(2)+" MB":e<1099511627776?(e/1024/1024/1024).toFixed(2)+" GB":(e/1024/1024/1024/1024).toFixed(2)+" TB"},t={defaultLabel:"Trascina qui i tuoi file",uploadingMessage:function(e){return"Caricamento di ".concat(e," file")},uploadFinished:function(e,t){return"File caricati: ".concat(e,", File rifiutati: ").concat(t)},noFilesMessage:"Nessun file valido in attesa di essere caricato",footer:{acceptAll:"Tutti i tipi di file sono accettati",acceptCustom:function(e){return"Tipi di file consentiti: ".concat(e)}},header:{uploadFilesMessage:"Caricamento",maxSizeMessage:function(e){return"Dimensione massima ".concat(e)},validFilesMessage:function(e,t){return"File ".concat(e,"/").concat(t)}},fakeuploadsuccess:"Il file è stato caricato con successo ",fakeUploadError:"Errore di caricamento del file"},r={fullInfoLayer:{name:"Nome: ",size:"Dimensione: ",type:"Tipo: "},status:{preparing:"preparazione",uploading:"In corso",success:"Successo",valid:"Valido",denied:"Non válido",error:"Errore",aborted:"Interrotto"}},a={maxSizeError:function(t){return"Il file è molto grande. Il tam. il massimo è ".concat(e(t))},acceptError:"Tipo di file illegale",maxFileCount:function(e){return"Numero massimo di file (".concat(e,") raggiunto")}},n={defaultLabel:"Déposez vos fichiers ici",uploadingMessage:function(e){return"Envoi de ".concat(e," fichiers")},uploadFinished:function(e,t){return"Fichiers téléchargés : ".concat(e,", Fichiers rejetés: ").concat(t)},noFilesMessage:"Aucun fichier valide ne manque",footer:{acceptAll:"Tous types de fichiers acceptés ",acceptCustom:function(e){return"Types de fichier: ".concat(e)}},header:{uploadFilesMessage:"Envoyer",maxSizeMessage:function(e){return"Taille maximale ".concat(e)},validFilesMessage:function(e,t){return"Fichiers ".concat(e,"/").concat(t)}},fakeuploadsuccess:"Le fichier a été téléchargé avec succès",fakeUploadError:"Erreur lors du téléchargement "},i={fullInfoLayer:{name:"Le nom: ",size:"Le taille: ",type:"Le type: "},status:{preparing:"préparer",uploading:"En cours",success:"Succès",valid:"Valide",denied:"Refusé",error:"Erreur",aborted:"Interrompu"}},c={maxSizeError:function(t){return"Le fichier est très volumineux. Le tam. le maximum est de ".concat(e(t))},acceptError:"Type de fichier illégal ",maxFileCount:function(e){return"Limite de fichiers atteinte (".concat(e,")")}},o={defaultLabel:"Drop your files here",uploadingMessage:function(e){return"Uploading ".concat(e," files")},uploadFinished:function(e,t){return"Uploaded files: ".concat(e,", Rejected files: ").concat(t)},noFilesMessage:"There is no missing valid file to upload",footer:{acceptAll:"All file types accepted",acceptCustom:function(e){return"Allowed types: ".concat(e)}},header:{uploadFilesMessage:"Upload files",maxSizeMessage:function(e){return"Max file size: ".concat(e)},validFilesMessage:function(e,t){return"Files ".concat(e,"/").concat(t)}},fakeuploadsuccess:"File was successfuly uploaded",fakeUploadError:"Error on uploading. Please try again later."},s={fullInfoLayer:{name:"Name: ",size:"Size: ",type:"Type: "},status:{preparing:"Preparing",uploading:"Uploading",success:"Success",valid:"Valid",denied:"Not valid",error:"Error",aborted:"Aborted"}},u={maxSizeError:function(t){return"File is too big. Max file size allowed is ".concat(e(t))},acceptError:"File type is not allowed",maxFileCount:function(e){return"Max amount of files (".concat(e,") has been reached")}},l={defaultLabel:"Suelta tus archivos aquí",uploadingMessage:function(e){return"Subiendo ".concat(e," archivos")},uploadFinished:function(e,t){return"Archivos subidos: ".concat(e,", Archivos rechazados: ").concat(t)},noFilesMessage:"No hay archivos válidos pendientes por subir",footer:{acceptAll:"Todos los tipos de archivo aceptados",acceptCustom:function(e){return"Tipo(s) de archivo permitidos: ".concat(e)}},header:{uploadFilesMessage:"Subir",maxSizeMessage:function(e){return"Tam. máximo ".concat(e)},validFilesMessage:function(e,t){return"Archivos ".concat(e,"/").concat(t)}},fakeuploadsuccess:"El archivo se subió correctamente",fakeUploadError:"Error al subir el archivo"},p={fullInfoLayer:{name:"Nombre: ",size:"Tamaño: ",type:"Tipo: "},status:{preparing:"Preparando",uploading:"Subiendo",success:"Éxito",valid:"Válido",denied:"No válido",error:"Error",aborted:"Anulado"}},d={maxSizeError:function(t){return"El archivo es muy grande. El tam. máximo es ".concat(e(t))},acceptError:"Tipo de archivo no permitido",maxFileCount:function(e){return"Cantidad máxima de archivos (".concat(e,") alcanzada")}},f={defaultLabel:"Перетащите сюда свои файлы.",uploadingMessage:function(e){return"Выгрузка ".concat(e," файлов")},uploadFinished:function(e,t){return"Загружено файлов: ".concat(e,", отклоненных файлов: ").concat(t)},noFilesMessage:"Действительный файл не отсутствует для загрузки",footer:{acceptAll:"Принимаются все типы файлов ",acceptCustom:function(e){return"Допустимые типы: ".concat(e)}},header:{uploadFilesMessage:"Отправить",maxSizeMessage:function(e){return"макс размер: ".concat(e)},validFilesMessage:function(e,t){return"Файлы ".concat(e,"/").concat(t)}},fakeuploadsuccess:"Файл был успешно загружен",fakeUploadError:"Ошибка при загрузке"},g={fullInfoLayer:{name:"Имя: ",size:"Размер: ",type:"Tип: "},status:{preparing:"подготовка",uploading:"Загрузка",success:"успех",valid:"годный",denied:"выкинутый",error:"ошибка",aborted:"прерванный"}},m={maxSizeError:function(t){return"Файл слишком большой. Максимально допустимый размер файла - ".concat(e(t))},acceptError:"Тип файла не разрешен",maxFileCount:function(e){return"Достигнуто максимальное количество файлов (".concat(e,")")}},h={defaultLabel:"Solte seus arquivos aqui ",uploadingMessage:function(e){return"Enviando ".concat(e," arquivos")},uploadFinished:function(e,t){return"Arquivos enviados: ".concat(e,", Arquivos rejeitados: ").concat(t)},noFilesMessage:"Nenhum arquivo válido está faltando para enviar",footer:{acceptAll:"Todos os tipos de arquivo são aceitos",acceptCustom:function(e){return"Tipos permitidos: ".concat(e)}},header:{uploadFilesMessage:"Enviar",maxSizeMessage:function(e){return"Tamanho máximo: ".concat(e)},validFilesMessage:function(e,t){return"Arquivos ".concat(e,"/").concat(t)}},fakeuploadsuccess:"O arquivo foi enviado com sucesso",fakeUploadError:"Erro ao enviar"},b={fullInfoLayer:{name:"Nome: ",size:"Tamanho: ",type:"Tipo: "},status:{preparing:"Preparando",uploading:"Enviando",success:"Êxito",valid:"válido",denied:"Negado",error:"Erro",aborted:"Abortado"}},v={maxSizeError:function(t){return"O arquivo é muito grande. O tamanho máximo de arquivo permitido é ".concat(e(t))},acceptError:"O tipo de arquivo não é permitido ",maxFileCount:function(e){return"Quantidade máxima de arquivos (".concat(e,") alcançada")}},F={defaultLabel:"将您的文件放在这里",uploadingMessage:function(e){return"上传 ".concat(e," 个文件")},uploadFinished:function(e,t){return"上传文件:".concat(e,",拒绝文件:").concat(t)},noFilesMessage:"没有缺少要加载的有效文件",footer:{acceptAll:"接受所有文件类型",acceptCustom:function(e){return"允许的类型: ".concat(e)}},header:{uploadFilesMessage:"上传文件",maxSizeMessage:function(e){return"最大文件大小:".concat(e)},validFilesMessage:function(e,t){return"文档 ".concat(e,"/").concat(t)}},fakeuploadsuccess:"文件已成功上传",fakeUploadError:"上传时出错"},w={fullInfoLayer:{name:"文档名称: ",size:"尺寸: ",type:"文件类型: "},status:{preparing:"预加载",uploading:"上传",success:"成功",valid:"接受的文件",denied:"被拒绝的文件",error:"错误",aborted:"中止"}},x={maxSizeError:function(t){return"文件太大。 允许的最大文件大小为 ".concat(e(t))},acceptError:"文件类型不允许",maxFileCount:function(e){return"已达到最大文件数 (".concat(e,")")}},_={defaultLabel:"把你的文件放在這裡 ",uploadingMessage:function(e){return"上傳".concat(e,"個文件")},uploadFinished:function(e,t){return"上傳文件: ".concat(e,", 拒絕的文件:").concat(t)},noFilesMessage:"沒有缺少要上傳的有效文件",footer:{acceptAll:"接受所有文件類型",acceptCustom:function(e){return"允許的類型:".concat(e)}},header:{uploadFilesMessage:"上傳文件",maxSizeMessage:function(e){return"最大文件大小:".concat(e)},validFilesMessage:function(e,t){return" 文件 ".concat(e,"/").concat(t)}},fakeuploadsuccess:"文件已成功上傳",fakeUploadError:"上傳時出錯"},y={fullInfoLayer:{name:"文檔名稱: ",size:"文件大小: ",type:"文件類型: "},status:{preparing:"預加載",uploading:"上傳",success:"成功",valid:"有效文件",denied:"無效文件",error:"錯誤",aborted:"中止"}},E={maxSizeError:function(t){return"文件太大。 允許的最大文件大小為 ".concat(e(t))},acceptError:"文件類型不允許",maxFileCount:function(e){return"已達到最大文件數 (".concat(e,")")}},A={"ES-es":p,"EN-en":s,"FR-fr":i,"IT-it":r,"PT-pt":b,"RU-ru":g,"ZH-cn":w,"ZH-hk":y},z=function(e){switch(e){case"ES-es":return A["ES-es"];case"EN-en":default:return A["EN-en"];case"FR-fr":return A["FR-fr"];case"IT-it":return A["IT-it"];case"PT-pt":return A["PT-pt"];case"RU-ru":return A["RU-ru"];case"ZH-cn":return A["ZH-cn"];case"ZH-hk":return A["ZH-hk"]}},k={"ES-es":l,"EN-en":o,"FR-fr":n,"IT-it":t,"PT-pt":h,"RU-ru":f,"ZH-cn":F,"ZH-hk":_},S=function(e){switch(e){case"ES-es":return k["ES-es"];case"EN-en":default:return k["EN-en"];case"FR-fr":return k["FR-fr"];case"IT-it":return k["IT-it"];case"PT-pt":return k["PT-pt"];case"RU-ru":return k["RU-ru"];case"ZH-cn":return k["ZH-cn"];case"ZH-hk":return k["ZH-hk"]}},M={"ES-es":d,"EN-en":u,"FR-fr":c,"IT-it":a,"PT-pt":v,"RU-ru":m,"ZH-cn":x,"ZH-hk":E},D=function(e){return e&&["ES-es","EN-en","FR-fr","IT-it","PT-pt","RU-ru","ZH-cn","ZH-hk"].includes(e)?M[e]:M["EN-en"]},j=function(e,t,r){return new Promise((function(a,n){try{var i=new FileReader;i.onprogress=function(){null==t||t()},i.onerror=function(){null==r||r()},i.onload=function(){a(i.result)},i.readAsDataURL(e)}catch(e){n(void 0)}}))},C=function(e,t,r,a){return new Promise((function(n,i){try{var c=new FileReader;c.onload=function(){n(c.result)},c.onprogress=function(){null==r||r()},c.onerror=function(){null==a||a()},c.readAsText(e,t||"base64")}catch(e){i(void 0)}}))},B=function(e,t,r){return new Promise((function(a,n){try{var i=new FileReader;i.onload=function(){a(i.result)},i.onprogress=function(){null==t||t()},i.onerror=function(){null==r||r()},i.readAsBinaryString(e)}catch(e){n(void 0)}}))},T=function(e,t,r){return new Promise((function(a,n){try{var i=new FileReader;i.onload=function(){a(i.result)},i.onprogress=function(){null==t||t()},i.onerror=function(){null==r||r()},i.readAsArrayBuffer(e)}catch(e){n(void 0)}}))};function I(e,t,r){return void 0===t&&(t=135),void 0===r&&(r=120),new Promise((function(a,n){try{var i=new Image;i.src=e,i.onload=function(){var c=document.createElement("canvas"),o=t,s=r,u=i.width,l=i.height;t>u&&r>l?a(e):u>l?u>o&&(l*=o/u,u=o):l>s&&(u*=s/l,l=s),c.width=u,c.height=l;var p=c.getContext("2d");p?(p.drawImage(i,0,0,u,l),a(c.toDataURL())):("development"===process.env.NODE_ENV&&console.error("An error ocurred when trying to make a thumnail"),n(void 0))}}catch(e){"development"===process.env.NODE_ENV&&console.error("An error ocurred when trying to make a thumnail"),n(void 0)}}))}function L(e){return new Promise((function(t,r){if(e&&0!==e.length)try{var a=new Image;a.src=e,a.onerror=function(e){r("landscape")},a.onload=function(){var e=a.width,r=a.height;t(e>r?"landscape":"portrait")}}catch(e){"development"===process.env.NODE_ENV&&console.error("An error ocurred when trying to get the image orientation"),r("landscape")}else r("landscape")}))}var R="https://user-images.githubusercontent.com/43678736/132086517-72a51a12-e403-4675-bfd7-22c23affa730.png",U="https://user-images.githubusercontent.com/43678736/132086518-7026d4f1-ea16-4ed0-89fd-37c1aa8ac3ed.png",N="https://user-images.githubusercontent.com/43678736/132086519-863c63b4-917e-4471-94ff-7e15651cc14b.png",P="https://user-images.githubusercontent.com/43678736/132086520-9bc6aa3b-51c9-4da2-9ef7-349162b86d0b.png",q="https://user-images.githubusercontent.com/43678736/132086521-dbd6cf0d-d4d7-4b92-bb26-17e8a51a9383.png",O="https://user-images.githubusercontent.com/43678736/132086522-070f48e8-78a8-4294-8dbb-aab81525e164.png",H="https://user-images.githubusercontent.com/43678736/132086595-90ab7f90-f87e-4900-94d9-d0b26745df48.png",Z="https://user-images.githubusercontent.com/43678736/132086597-e285ad5c-613a-4679-a270-493e5be4ffd9.png",V="https://user-images.githubusercontent.com/43678736/132086598-623c410a-084a-4395-a448-211b2ff61cfe.png",G="https://user-images.githubusercontent.com/43678736/132086600-8b70a007-512d-4252-9c66-eabd3ddd6573.png",X="https://user-images.githubusercontent.com/43678736/132086601-e62e5d1a-d8a2-4475-a14f-85922cec9272.png",K="https://user-images.githubusercontent.com/43678736/132086602-4c772934-f608-4f01-8459-c4622cee8ad5.png",J="https://user-images.githubusercontent.com/43678736/132086604-b5b019fe-572e-477e-92c2-3769a48a1304.png",Q="https://user-images.githubusercontent.com/43678736/132086606-715ccb66-4702-4f7d-9b09-ac93ba17b643.png",$="https://user-images.githubusercontent.com/43678736/132086608-bcae9d57-8e54-488c-90c4-4952ae530b5e.png",W="https://user-images.githubusercontent.com/43678736/132086618-397d6bd2-9fda-43ed-a135-cb40388c35af.png",Y="https://user-images.githubusercontent.com/43678736/132086620-2586ba40-c583-4589-b1a4-8bb5b258b44d.png",ee="https://user-images.githubusercontent.com/43678736/132086621-3b95fb64-2533-4ccc-abcd-bd2beba572e9.png",te="https://user-images.githubusercontent.com/43678736/132086622-af705a0c-2b25-4ba7-8ab6-bd69ec97f7e2.png",re="https://user-images.githubusercontent.com/43678736/132086624-89141a46-64e4-4fa0-bf69-54a0eb4d48c9.png",ae="https://user-images.githubusercontent.com/43678736/132086625-1b8f2652-1de0-4475-8c12-7da4a9973ffb.png",ne="https://user-images.githubusercontent.com/43678736/132086626-38699705-1e6f-4bca-984b-03167b236faa.png",ie="https://user-images.githubusercontent.com/43678736/132086650-f1166246-b361-4c30-a04e-9781c555d14a.png",ce="https://user-images.githubusercontent.com/43678736/132086650-f1166246-b361-4c30-a04e-9781c555d14a.png",oe="https://user-images.githubusercontent.com/43678736/132086652-4562942e-aaea-466c-968f-380fffabf3f9.png",se="https://user-images.githubusercontent.com/43678736/132086653-0487e7e2-1ee3-49e2-8cfe-3e20f1f7490a.png",ue="https://user-images.githubusercontent.com/43678736/132086656-6e96c815-e4e2-4ffd-9d71-57e9cc2450bc.png",le="https://user-images.githubusercontent.com/43678736/132086658-5d27d3c2-394f-43fb-b512-9b414a257875.png",pe="https://user-images.githubusercontent.com/43678736/132086659-98f3ef6e-b9f3-4b6d-b18f-469b5334ba27.png",de="https://user-images.githubusercontent.com/43678736/132086661-a5484553-06c7-4ffa-a8f9-96b57b1b0344.png",fe="https://user-images.githubusercontent.com/43678736/132086662-05ad1597-d5e5-4efa-833e-2876e966a745.png",ge="https://user-images.githubusercontent.com/43678736/132086663-90c58955-f7fb-4bdb-ac53-92667d16d4a3.png",me="https://user-images.githubusercontent.com/43678736/132086664-9a7530e7-6d78-4ef3-a176-20cf7f57b555.png",he="https://user-images.githubusercontent.com/43678736/132086666-ab3c505d-b2c0-4177-9a06-aed5d9c39ee4.png",be="https://user-images.githubusercontent.com/43678736/132086667-6c7dcbcc-8d83-41a2-8e0a-85b09e2791ae.png",ve="https://user-images.githubusercontent.com/43678736/132086668-9f246e91-cf2e-49cf-9617-e1fbb71abbbb.png",Fe="https://user-images.githubusercontent.com/43678736/132086669-46113762-84d1-4b32-9441-b0138ce17a5d.png",we="https://user-images.githubusercontent.com/43678736/145835364-2054509d-3448-4d34-921f-73dd6e297fc7.png",xe="https://user-images.githubusercontent.com/43678736/145835367-19172bf8-cd5a-4cbe-b512-d0de1d91f269.png",_e="https://user-images.githubusercontent.com/43678736/145835373-a57ef0f5-3968-483b-9f55-6d67e7f1dcea.png",ye="https://user-images.githubusercontent.com/43678736/132086670-0f96e770-cedc-4635-a5f9-cf97894c1d7a.png",Ee="https://user-images.githubusercontent.com/43678736/132086671-02ad35ef-ec3a-4a65-abd5-5bf794dfcf7b.png",Ae="https://user-images.githubusercontent.com/43678736/132086672-3a856fda-823d-4997-b802-c7c640e6ef44.png",ze="https://user-images.githubusercontent.com/43678736/132086673-0c4409ab-754e-4619-8cfa-179d0ccf1bd9.png",ke="https://user-images.githubusercontent.com/43678736/132086674-fdb56d02-5845-49b7-8462-6357bc963464.png",Se="https://user-images.githubusercontent.com/43678736/132086675-c879645d-acb4-41a6-ab3c-4e6c2048badb.png",Me="https://user-images.githubusercontent.com/43678736/132086685-4e327c4c-a409-4b83-b36a-8d88936b314b.png",De="https://user-images.githubusercontent.com/43678736/132086688-8e82fae4-3a9b-49c0-bf99-77189525514c.png",je="https://user-images.githubusercontent.com/43678736/132086689-fe1fef9f-d2db-455b-8f4b-09acd095f571.png",Ce="https://user-images.githubusercontent.com/43678736/132086689-fe1fef9f-d2db-455b-8f4b-09acd095f571.png",Be="https://user-images.githubusercontent.com/43678736/132086691-d472576b-ec6a-4332-acd2-dd6a00b72952.png",Te="https://user-images.githubusercontent.com/43678736/132086693-9d43571e-0c86-438f-b247-e2cb42e19e06.png",Ie="https://user-images.githubusercontent.com/43678736/132086694-4e661d6a-1118-441e-8bc3-c52fcb2133b6.png",Le="https://user-images.githubusercontent.com/43678736/132086697-1d82d724-35b6-4f06-847a-3c59a5deda6e.png",Re="https://user-images.githubusercontent.com/43678736/132086698-19384230-dbd7-4e05-bc69-ef4537b6aae3.png",Ue="https://user-images.githubusercontent.com/43678736/132086699-5993a482-04f4-4915-b105-9037f527cf61.png",Ne="https://user-images.githubusercontent.com/43678736/132086700-c23461c8-6819-46e1-aecd-0a1f8d3507bb.png",Pe="https://user-images.githubusercontent.com/43678736/132086701-c8044c09-8d95-4af1-9410-66761001d7da.png",qe="https://user-images.githubusercontent.com/43678736/132086702-59294337-ed99-4302-badd-316b2c1ff62f.png",Oe="https://user-images.githubusercontent.com/43678736/132086704-8fd51e7c-afa2-47a3-ab2f-d0bcd0ecae9f.png",He="https://user-images.githubusercontent.com/43678736/132086705-33294da1-5c0f-49f7-b890-e4857cec0a6d.png",Ze="https://user-images.githubusercontent.com/43678736/132086706-22f805d0-39d4-494b-824e-47dc75d05eb7.png",Ve="https://user-images.githubusercontent.com/43678736/132086707-e61a84de-d396-4dbf-8d1b-1d6ee19e1ac8.png",Ge="https://user-images.githubusercontent.com/43678736/132086707-e61a84de-d396-4dbf-8d1b-1d6ee19e1ac8.png",Xe="https://user-images.githubusercontent.com/43678736/132086708-21d096dd-7148-40aa-97f1-cbb099339740.png",Ke="https://user-images.githubusercontent.com/43678736/132086709-811d4e90-3cfa-4044-a956-aeda9c67fc92.png",Je="https://user-images.githubusercontent.com/43678736/132086710-c5479c6c-0249-4542-adad-48b0ef40b775.png",Qe="https://user-images.githubusercontent.com/43678736/132086711-1524a3e7-3e33-4822-a34f-ff3235404045.png",$e="https://user-images.githubusercontent.com/43678736/132086712-17e2c491-f6e4-4586-aef6-06bcc5f4b0e5.png",We="https://user-images.githubusercontent.com/43678736/132086715-204b5a8b-9c5a-4bac-8294-9237ebc16089.png",Ye="https://user-images.githubusercontent.com/43678736/132086716-64511d20-58cb-45a8-85df-f4d9408b469d.png",et="https://user-images.githubusercontent.com/43678736/132086718-a8499333-6282-4820-aa1f-4d133eb54648.png",tt=function(e){var t=/(?:\.([^.]+))?$/.exec(e);return t?t[1]:""},rt="octet",at=function(e){switch(e){case"aac":return"aac";case"midi":case"x-midi":return"midi";case"mpeg":return"mpeg";case"ogg":return"oga";case"opus":return"opus";case"wav":return"wav";case"webm":return"webm";case"wma":return"wma";default:return rt}},nt=function(e){switch(e){case"css":return"css";case"csv":return"csv";case"html":return"html";case"calendar":return"icalendar";case"javascript":case"x-javascript":return"javascript";case"plain":return"text";case"xml":return"xml";default:return rt}},it=function(e){switch(e){case"bmp":return"bmp";case"gif":return"gif";case"jpg":case"jpeg":return"jpeg";case"png":return"png";case"tiff":return"tiff";case"webp":return"webp";default:return rt}},ct=function(e){switch(e){case"otf":return"otf";case"ttf":return"ttf";case"woff":case"woff2":return"woff";default:return rt}},ot=function(e){switch(e){case"x-msvideo":case"msvideo":case"avi":return"avi";case"mp4":return"mp4";case"mpeg":return"mpeg";case"ogg":return"ogv";case"mp2t":return"mp2t";case"wmv":return"wmv";case"webm":return"webm";default:return rt}},st=function(e){switch(e){case"x-abiword":case"abiword":return"abw";case"x-freearc":case"freearc":return"arc";case"vnd.amazon.ebook":return"azw";case"octet-stream":return"octet";case"x-bzip":case"bzip":return"bz";case"x-bzip2":case"bzip2":return"bz2";case"x-cdf":return"cda";case"msaccess":return"accdb";case"csh":case"x-csh":return"csh";case"vnd.ms-fontobject":return"eot";case"epub+zip":return"epub";case"gzip":return"gzip";case"java-archive":return"jar";case"x-javascript":return"javascript";case"json":return"json";case"ld+json":return"jsonld";case"vnd.apple.installer+xml":return"mpkg";case"ogg":return"ogx";case"vnd.rar":return"rar";case"rtf":return"rtf";case"x-sh":case"sh":return"sh";case"x-shockwave-flash":return"swf";case"x-tar":return"tar";case"x-httpd-php":return"php";case"vnd.visio":return"vsd";case"xhtml+xml":return"xhtml";case"xml":return"xml";case"vnd.mozilla.xul+xml":return"xul";case"vnd.openxmlformats-officedocument.wordprocessingml.document":case"msword":return"docx";case"vnd.openxmlformats-officedocument.spreadsheetml.sheet":return"xlsx";case"vnd.openxmlformats-officedocument.presentationml.presentation":case"vnd.ms-powerpoint":return"pptx";case"vnd.oasis.opendocument.presentation":return"odp";case"vnd.oasis.opendocument.text":return"odt";case"vnd.oasis.opendocument.spreadsheet":return"ods";case"zip":case"x-zip-compressed":return"zip";case"pdf":return"pdf";default:return rt}},ut=function(e){if(!e||!e.includes("/"))return rt;var t=e.split("/")[0],r=e.split("/")[1];switch(t){case"application":return st(r);case"audio":return at(r);case"video":return ot(r);case"text":return nt(r);case"image":return it(r);case"font":return ct(r);default:return rt}},lt=function(e){var t="octet";return e&&""!==e&&(e.includes("zip")||e.includes("rar")?t="zip":e.includes("doc")?t="docx":e.includes("xls")?t="xlsx":e.includes("drawio")?t="drawio":e.includes("psd")?t="psd":e.includes("csv")?t="csv":"jsx"===e?t="react":"py"===e?t="python":"vue"===e?t="vue":"java"===e?t="java":"ts"===e?t="typescript":"sass"!==e&&"scss"!==e||(t="sass")),t},pt=function(e){var t="text";return e&&""!==e&&("jsx"===e?t="react":"py"===e?t="python":"vue"===e?t="vue":"java"===e?t="java":"ts"===e||"tsx"===e?t="typescript":"js"===e?t="javascript":"xml"===e?t="xml":"php"===e&&(t="php")),t},dt=function(e,t){var r="fallBack";if(!e)return r=rt,(null==t?void 0:t.fallBack)?{url:null==t?void 0:t.fallBack,mimeResume:r}:{url:gt[r],mimeResume:r};r=ut(e.type);var a=tt(e.name);"text"===r&&(r=pt(a)),r===rt&&(r=lt(a));var n=null==t?void 0:t[r];return void 0!==n?{url:n,mimeResume:r}:{url:gt[r],mimeResume:r}},ft=function(e,t,r){var a="octet";if(!e)return a=rt,(null==r?void 0:r.fallBack)?{url:null==r?void 0:r.fallBack,mimeResume:a}:{url:gt[a],mimeResume:a};a=ut(t);var n=tt(e);"text"===a&&(a=pt(n)),a===rt&&(a=lt(n));var i=null==r?void 0:r[a];return void 0!==i?{url:i,mimeResume:a}:{url:gt[a],mimeResume:a}},gt={aac:U,accdb:P,abw:N,arc:ee,avi:q,azw:O,octet:he,bmp:H,bz:Z,bz2:V,cda:G,csh:X,css:K,csv:J,docx:Q,drawio:$,eot:W,epub:Y,gzip:re,gif:te,html:ae,icalendar:ne,jar:ce,jpeg:se,javascript:oe,json:ue,jsonld:le,midi:pe,mp3:de,mp4:fe,mpeg:ge,mpkg:me,mp2t:he,odp:be,ods:ve,odt:Fe,oga:we,ogv:xe,ogx:_e,opus:ye,otf:Ee,png:ke,pdf:Ae,php:ze,pptx:Se,psd:Me,rar:Ce,rtf:Te,sass:Ie,sh:Le,swf:Re,tar:je,tiff:Ne,ttf:Pe,typescript:qe,text:Ue,vsd:Oe,wav:Ze,weba:Ge,webm:Ve,webp:Xe,woff:Qe,wma:Ke,wmv:Je,xhtml:ae,xlsx:$e,xml:We,xul:Ye,zip:et,sevenzip:R,python:De,java:ie,react:Be,vue:He,fallBack:he},mt=function(){function e(e){var t=e.id,r=e.file,a=e.name,n=e.size,i=e.type,c=e.imageUrl,o=e.valid,s=e.errors,u=e.uploadMessage,l=e.uploadStatus,p=e.progress,d=e.xhr,f=e.extraData,g=e.extraUploadData,m=e.serverResponse,h=e.downloadUrl,b=e.videoUrl;this.id=t,this.file=r,this.name=a,this.size=n,this.type=i,this.imageUrl=c,this.valid=o,this.errors=s,this.uploadStatus=l,this.uploadMessage=u,this.progress=p,this.xhr=d,this.extraData=f,this.extraUploadData=g,this.serverResponse=m,this.downloadUrl=h,this.videoUrl=b}return e.toExtFile=function(e){for(var t={},r=Object.keys(e),a=Object.values(e),n=0;n<a.length;n++){var i=a[n],c=r[n];void 0!==i&&(t[c]=i)}return t},e.prototype.toExtFile=function(){return e.toExtFile(this)},e}(),ht=function(){return ht=Object.assign||function(e){for(var t,r=1,a=arguments.length;r<a;r++)for(var n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},ht.apply(this,arguments)};function bt(e,t,r,a){return new(r||(r=Promise))((function(n,i){function c(e){try{s(a.next(e))}catch(e){i(e)}}function o(e){try{s(a.throw(e))}catch(e){i(e)}}function s(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(c,o)}s((a=a.apply(e,t||[])).next())}))}function vt(e,t){var r,a,n,i,c={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return i={next:o(0),throw:o(1),return:o(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function o(o){return function(s){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,o[0]&&(c=0)),c;)try{if(r=1,a&&(n=2&o[0]?a.return:o[0]?a.throw||((n=a.return)&&n.call(a),0):a.next)&&!(n=n.call(a,o[1])).done)return n;switch(a=0,n&&(o=[2&o[0],n.value]),o[0]){case 0:case 1:n=o;break;case 4:return c.label++,{value:o[1],done:!1};case 5:c.label++,a=o[1],o=[0];continue;case 7:o=c.ops.pop(),c.trys.pop();continue;default:if(!(n=c.trys,(n=n.length>0&&n[n.length-1])||6!==o[0]&&2!==o[0])){c=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]<n[3])){c.label=o[1];break}if(6===o[0]&&c.label<n[1]){c.label=n[1],n=o;break}if(n&&c.label<n[2]){c.label=n[2],c.ops.push(o);break}n[2]&&c.ops.pop(),c.trys.pop();continue}o=t.call(e,c)}catch(e){o=[6,e],a=0}finally{r=n=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}}function Ft(e,t,r){if(r||2===arguments.length)for(var a,n=0,i=t.length;n<i;n++)!a&&n in t||(a||(a=Array.prototype.slice.call(t,0,n)),a[n]=t[n]);return e.concat(a||Array.prototype.slice.call(t))}var wt=function(){function e(){}return e.getNextId=function(){return e.nextId++,e.nextId},e.setFileList=function(t,r){return t?(e.fileLists[t]=Ft([],r,!0),t):0},e.createFileListMap=function(){var t=e.getNextId();return e.fileLists[t]=[],t},e.removeFileListMap=function(t){if(!t)return 0;try{return e.fileLists[t]=void 0,t}catch(e){return"development"===process.env.NODE_ENV&&console.error("Error on remove",e),0}},e.getExtFileInstanceList=function(t){try{if(!t)return;return e.fileLists[t]}catch(e){return void("development"===process.env.NODE_ENV&&console.error("Error on getExtFileInstanceList",e))}},e.setFileListMapPreparing=function(t,r,a,n){if("number"==typeof t||"string"==typeof t)try{var i,c=Ft([],r,!0);n&&a&&(c=c.filter((function(e){return e.valid}))),i=(c=a?c.map((function(e){return"success"!==e.uploadStatus&&e.valid?ht(ht({},e),{uploadStatus:"preparing"}):ht({},e)})):c.map((function(e){return"success"!==e.uploadStatus?ht(ht({},e),{uploadStatus:"preparing"}):ht({},e)}))).map((function(e){return new mt(e)}));e.setFileList(t,i);return i}catch(e){return void("development"===process.env.NODE_ENV&&console.error("setFileListMapPreparing Error on get List",e))}},e.setFileListMapPreparing2=function(t,r,a,n){return e.setFileList(t,r.map((function(e){return new mt(ht(ht({},e),{uploadStatus:"preparing"}))}))),e.getExtFileInstanceList(t)},e.nextId=0,e.fileLists={},e}(),xt=function(e,t,r,a,n){return{url:e,method:t,headers:r,uploadLabel:a,cleanonUpload:n}},_t=function(){function e(){}return e.createFile=function(e,t,r){var a=new File([],e,{type:r});return Object.defineProperty(a,"size",{get:function(){return t}}),a},e.create_aac=function(t){return e.createFile("acc_audio-file-with-large-name.aac",t||3516516,"audio/aac")},e.create_abw=function(t){return e.createFile("abiword-file-with-large-name.abw",t||3516516,"application/x-abiword")},e.create_freearc=function(t){return e.createFile("freearc-file-with-large-name.arc",t||3516516,"application/x-freearc")},e.create_avi=function(t){return e.createFile("avi-file-with-large-name.avi",t||3516516,"video/x-msvideo")},e.create_azw=function(t){return e.createFile("amazon_kindle_ebook-file-with-large-name.azw",t||3516516,"application/vnd.amazon.ebook")},e.create_octet=function(t){return e.createFile("binary_octet_stream-file-with-large-name.bin",t||3516516,"application/octet-stream")},e.create_bmp=function(t){return e.createFile("bit_map-file-with-large-name.bmp",t||3516516,"image/bmp")},e.create_bz=function(t){return e.createFile("x_bzip-file-with-large-name.bz",t||3516516,"application/x-bzip")},e.create_bz2=function(t){return e.createFile("x_bzip_2-file-with-large-name.bz2",t||3516516,"application/x-bzip2")},e.create_cda=function(t){return e.createFile("cd_audio-file-with-large-name.cda",t||3516516,"application/x-cdf")},e.create_csh=function(t){return e.createFile("test-file-with-large-name.csh",t||3516516,"application/x-csh")},e.create_css=function(t){return e.createFile("test-file-with-large-name.css",t||3516516,"text/css")},e.create_csv=function(t){return e.createFile("test-file-with-large-name.csv",t||3516516,"text/csv")},e.create_doc=function(t){return e.createFile("test-file-with-large-name.doc",t||3516516,"application/msword")},e.create_docx=function(t){return e.createFile("test-file-with-large-name.docx",t||3516516,"application/vnd.openxmlformats-officedocument.wordprocessingml.document")},e.create_eot=function(t){return e.createFile("test-file-with-large-name.eot",t||3516516,"application/vnd.ms-fontobject")},e.create_epub=function(t){return e.createFile("test-file-with-large-name.epub",t||3516516,"application/epub+zip")},e.create_gzip=function(t){return e.createFile("test-file-with-large-name.gz",t||3516516,"application/gzip")},e.create_gif=function(t){return e.createFile("test-file-with-large-name.gif",t||3516516,"image/gif")},e.create_htm=function(t){return e.createFile("test-file-with-large-name.htm",t||3516516,"text/html")},e.create_html=function(t){return e.createFile("test-file-with-large-name.html",t||3516516,"text/html")},e.create_ico=function(t){return e.createFile("test-file-with-large-name.ico",t||3516516,"image/vnd.microsoft.icon")},e.create_icalendar=function(t){return e.createFile("test-file-with-large-name.ics",t||3516516,"text/calendar")},e.create_jar=function(t){return e.createFile("test-file-with-large-name.jar",t||3516516,"application/java-archive")},e.create_jpeg=function(t){return e.createFile("test-file-with-large-name.jpeg",t||3516516,"image/jpeg")},e.create_jpg=function(t){return e.createFile("test-file-with-large-name.jpg",t||3516516,"image/jpeg")},e.create_js=function(t){return e.createFile("test-file-with-large-name.js",t||3516516,"text/javascript")},e.create_json=function(t){return e.createFile("test-file-with-large-name.json",t||3516516,"application/json")},e.create_jsonld=function(t){return e.createFile("test-file-with-large-name.jsonld",t||3516516,"application/ld+json")},e.create_mid=function(t){return e.createFile("test-file-with-large-name.mid",t||3516516,"audio/midi")},e.create_x_mid=function(t){return e.createFile("test-file-with-large-name.mid",t||3516516,"audio/x-midi")},e.create_midi=function(t){return e.createFile("test-file-with-large-name.midi",t||3516516,"audio/x-midi")},e.create_x_midi=function(t){return e.createFile("test-file-with-large-name.midi",t||3516516,"audio/x-midi")},e.create_mjs=function(t){return e.createFile("test-file-with-large-name.mjs",t||3516516,"text/javascript")},e.create_mp3=function(t){return e.createFile("test-file-with-large-name.mp3",t||3516516,"audio/mpeg")},e.create_mp4=function(t){return e.createFile("test-file-with-large-name.mp4",t||3516516,"video/mp4")},e.create_mpeg=function(t){return e.createFile("test-file-with-large-name.mpeg",t||3516516,"video/mpeg")},e.create_mpkg=function(t){return e.createFile("test-file-with-large-name.mpkg",t||3516516,"application/vnd.apple.installer+xml")},e.create_odp=function(t){return e.createFile("test-file-with-large-name.odp",t||3516516,"application/vnd.oasis.opendocument.presentation")},e.create_ods=function(t){return e.createFile("test-file-with-large-name.ods",t||3516516,"application/vnd.oasis.opendocument.spreadsheet")},e.create_odt=function(t){return e.createFile("test-file-with-large-name.odt",t||3516516,"application/vnd.oasis.opendocument.text")},e.create_oga=function(t){return e.createFile("test-file-with-large-name.oga",t||3516516,"audio/ogg")},e.create_ogv=function(t){return e.createFile("test-file-with-large-name.ogv",t||3516516,"video/ogg")},e.create_ogx=function(t){return e.createFile("test-file-with-large-name.ogx",t||3516516,"application/ogg")},e.create_opus=function(t){return e.createFile("test-file-with-large-name.opus",t||3516516,"audio/opus")},e.create_otf=function(t){return e.createFile("test-file-with-large-name.otf",t||3516516,"font/otf")},e.create_png=function(t){return e.createFile("test-file-with-large-name.png",t||3516516,"image/png")},e.create_pdf=function(t){return e.createFile("test-file-with-large-name.pdf",t||3516516,"application/pdf")},e.create_php=function(t){return e.createFile("test-file-with-large-name.php",t||3516516,"application/x-httpd-php")},e.create_ppt=function(t){return e.createFile("test-file-with-large-name.ppt",t||3516516,"application/vnd.ms-powerpoint")},e.create_pptx=function(t){return e.createFile("test-file-with-large-name.pptx",t||3516516,"application/vnd.openxmlformats-officedocument.presentationml.presentation")},e.create_rar=function(t){return e.createFile("test-file-with-large-name.rar",t||3516516,"application/vnd.rar")},e.create_rtf=function(t){return e.createFile("test-file-with-large-name.rtf",t||3516516,"application/rtf")},e.create_sh=function(t){return e.createFile("test-file-with-large-name.sh",t||3516516,"application/x-sh")},e.create_svg=function(t){return e.createFile("test-file-with-large-name.svg",t||3516516,"image/svg+xml")},e.create_swf=function(t){return e.createFile("test-file-with-large-name.swf",t||3516516,"application/x-shockwave-flash")},e.create_tar=function(t){return e.createFile("test-file-with-large-name.tar",t||3516516,"application/x-tar")},e.create_tif=function(t){return e.createFile("test-file-with-large-name.tif",t||3516516,"image/tiff")},e.create_tiff=function(t){return e.createFile("test-file-with-large-name.tiff",t||3516516,"image/tiff")},e.create_ts=function(t){return e.createFile("mp2t_video-file-with-large-name.ts",t||3516516,"video/mp2t")},e.create_ttf=function(t){return e.createFile("test-file-with-large-name.ttf",t||3516516,"font/ttf")},e.create_text=function(t){return e.createFile("test-file-with-large-name.txt",t||3516516,"text/plain")},e.create_typescript=function(t){return e.createFile("typescript-file-with-large-name.ts",t||3516516,"text/plain")},e.create_vsd=function(t){return e.createFile("ms_visio-file-with-large-name.vsd",t||3516516,"application/vnd.visio")},e.create_wav=function(t){return e.createFile("wav_audio-file-with-large-name.wav",t||3516516,"audio/wav")},e.create_weba=function(t){return e.createFile("web_audio-file-with-large-name.weba",t||3516516,"audio/webm")},e.create_webm=function(t){return e.createFile("web_video-file-with-large-name.webm",t||3516516,"video/webm")},e.create_webp=function(t){return e.createFile("web_image-file-with-large-name.webp",t||3516516,"image/webp")},e.create_woff=function(t){return e.createFile("test-file-with-large-name.woff",t||3516516,"font/woff")},e.create_woff2=function(t){return e.createFile("test-file-with-large-name.woff2",t||3516516,"font/woff2")},e.create_xhtml=function(t){return e.createFile("test-file-with-large-name.xhtml",t||3516516,"application/xhtml+xml")},e.create_xlsx=function(t){return e.createFile("test-file-with-large-name.xls",t||3516516,"application/vnd.ms-excel")},e.create_xls=function(t){return e.createFile("test-file-with-large-name.xlsx",t||3516516,"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")},e.create_xml=function(t){return e.createFile("xml-file-with-large-name.xml",t||3516516,"application/xml")},e.create_xml_txt=function(t){return e.createFile("xml_plain_text-file-with-large-name.xml",t||3516516,"application/xml")},e.create_xul=function(t){return e.createFile("test-file-with-large-name.xul",t||3516516,"application/vnd.mozilla.xul+xml")},e.create_zip=function(t){return e.createFile("zip-file-with-large-name.zip",t||3516516,"application/zip")},e.create_3gp=function(t){return e.createFile("3gp_video-file-with-large-name.3gp",t||3516516,"video/3gpp")},e.create_3gp2=function(t){return e.createFile("3gp2_video-file-with-large-name.3g2",t||3516516,"video/3gpp2")},e.create_3gp_a=function(t){return e.createFile("3gp_audio-file-with-large-name.3gp",t||3516516,"audio/3gpp")},e.create_3gp_v=function(t){return e.createFile("3gp_audio-file-with-large-name.3gp2",t||3516516,"audio/3gpp2")},e.create_7z=function(t){return e.createFile("seven_zip-file-with-large-name.7z",t||3516516,"application/x-7z-compressed")},e.create_python=function(t){return e.createFile("python-file-with-large-name.py",t||3516516,"text/plain")},e.create_java=function(t){return e.createFile("java-file-with-large-name.java",t||3516516,"text/plain")},e.create_react=function(t){return e.createFile("react_jsx-file-with-large-name.jsx",t||3516516,"text/plain")},e.create_vue=function(t){return e.createFile("vue-file-with-large-name.vue",t||3516516,"text/plain")},e.createFileListMiscelanious=function(t){var r=[];return r.push(e.create_aac(t)),r.push(e.create_abw(t)),r.push(e.create_freearc(t)),r.push(e.create_avi(t)),r.push(e.create_azw(t)),r.push(e.create_octet(t)),r.push(e.create_bmp(t)),r.push(e.create_bz(t)),r.push(e.create_bz2(t)),r.push(e.create_cda(t)),r.push(e.create_csh(t)),r.push(e.create_css(t)),r.push(e.create_csv(t)),r.push(e.create_doc(t)),r.push(e.create_docx(t)),r.push(e.create_eot(t)),r.push(e.create_epub(t)),r.push(e.create_gzip(t)),r.push(e.create_gif(t)),r.push(e.create_htm(t)),r.push(e.create_html(t)),r.push(e.create_ico(t)),r.push(e.create_icalendar(t)),r.push(e.create_jar(t)),r.push(e.create_jpeg(t)),r.push(e.create_jpg(t)),r.push(e.create_js(t)),r.push(e.create_json(t)),r.push(e.create_jsonld(t)),r.push(e.create_mid(t)),r.push(e.create_midi(t)),r.push(e.create_x_mid(t)),r.push(e.create_x_midi(t)),r.push(e.create_mjs(t)),r.push(e.create_mp3(t)),r.push(e.create_mp4(t)),r.push(e.create_mpeg(t)),r.push(e.create_mpkg(t)),r.push(e.create_odp(t)),r.push(e.create_ods(t)),r.push(e.create_odt(t)),r.push(e.create_oga(t)),r.push(e.create_ogv(t)),r.push(e.create_ogx(t)),r.push(e.create_opus(t)),r.push(e.create_otf(t)),r.push(e.create_png(t)),r.push(e.create_pdf(t)),r.push(e.create_php(t)),r.push(e.create_ppt(t)),r.push(e.create_pptx(t)),r.push(e.create_rar(t)),r.push(e.create_rtf(t)),r.push(e.create_sh(t)),r.push(e.create_svg(t)),r.push(e.create_swf(t)),r.push(e.create_tar(t)),r.push(e.create_tif(t)),r.push(e.create_tiff(t)),r.push(e.create_ts(t)),r.push(e.create_ttf(t)),r.push(e.create_text(t)),r.push(e.create_typescript(t)),r.push(e.create_vsd(t)),r.push(e.create_wav(t)),r.push(e.create_weba(t)),r.push(e.create_webm(t)),r.push(e.create_webp(t)),r.push(e.create_woff(t)),r.push(e.create_woff2(t)),r.push(e.create_xhtml(t)),r.push(e.create_xlsx(t)),r.push(e.create_xls(t)),r.push(e.create_xml(t)),r.push(e.create_xml_txt(t)),r.push(e.create_xul(t)),r.push(e.create_zip(t)),r.push(e.create_python(t)),r.push(e.create_java(t)),r.push(e.create_react(t)),r.push(e.create_vue(t)),r},e}(),yt=function(e){return _t.createFileListMiscelanious(e)},Et=function(e,t,r){return void 0===e&&(e="png-image-file-with-large-name.png"),void 0===t&&(t=455555),void 0===r&&(r="image/png"),_t.createFile(e,t,r)},At=function(){function e(){}return e.getNextId=function(){return e.nextId++,e.nextId},e.nextId=0,e}(),zt=function(e){for(var t=[],r=0,a=void 0;a=e[r];r++)t.push({id:At.getNextId(),file:a,name:a.name,size:a.size,type:a.type});return t},kt=function(e){for(var t=[],r=0,a=void 0;a=e[r];r++)t.push(new mt({id:At.getNextId(),file:a,name:a.name,size:a.size,type:a.type}));return t},St=function(e,t,r,a){return null!=e||null!=t||null!=r||null!=a},Mt=function(e,t){void 0===e&&(e=""),void 0===t&&(t=!1);var r=e;return t?e.length>=20&&(r=e.slice(0,10)+"..."+e.slice(-7)):e.length>=30&&(r=e.slice(0,13)+"..."+e.slice(-8)),r},Dt=function(e){return new Promise((function(t,r){setTimeout((function(){t(ht(ht({},e),{uploadStatus:"uploading"}))}),1500)}))},jt=function(e){return new Promise((function(t,r){setTimeout((function(){t(ht(ht({},e),{uploadStatus:"success"}))}),2e3)}))},Ct=function(e){return void 0===e&&(e=5e3),new Promise((function(t,r){setTimeout((function(){t()}),e)}))},Bt=function(e){return new Promise((function(t,r){setTimeout((function(){e.uploadStatus="uploading",t(ht(ht({},e),{uploadStatus:"uploading"}))}),1500)}))},Tt=function(e){return new Promise((function(t,r){setTimeout((function(){e.uploadStatus="success",t(ht(ht({},e),{uploadStatus:"success"}))}),2e3)}))},It=function(e,t){void 0===t&&(t=S("EN-en"));var r=e.toExtFile();return new Promise((function(e,a){setTimeout((function(){if(Math.floor(10*Math.random())%2==0){var a=!0,n=t.fakeuploadsuccess,i={url:""};e(ht(ht({},r),{serverResponse:{success:a,message:n,payload:i},uploadStatus:"success",uploadMessage:n}))}else{a=!1,n=t.fakeUploadError,i={};e(ht(ht({},r),{serverResponse:{success:a,message:n,payload:i},uploadStatus:"error",uploadMessage:n}))}}),1700)}))};function Lt(e,t){return void 0===e&&(e=0),void 0===t&&(t=0),Math.floor(Math.random()*(t-e))+e}var Rt=function(e){e&&(e.value="")},Ut=function(e,t){return t?"".concat(e," ").concat(t):e},Nt=function(e,t){return(!t||t&&e.valid)&&"success"!==e.uploadStatus},Pt=function(e,t,r,a){var n="",i=void 0,c=void 0;return e&&"string"==typeof e.name?(n=e.name,i=e.type,c=e.size):t&&"string"==typeof t&&(n=t,i=r,c=a),[n,i,c]},qt=function(e){return e&&0!==e.length?e.split(",").map((function(e){return e.trim()})):[]},Ot=function(e,t){for(var r=t.name,a=t.type,n=0;n<e.length;n++){var i=e[n];if(0!==i.length){if("."===i.charAt(0)&&i.includes(tt(r)))return!0;if(a&&a.length>0&&i.includes("/")&&a.includes("/")){var c=i.split("/")[0],o=i.split("/")[1],s=a.split("/")[0],u=a.split("/")[1];if(c===s){if("*"===o)return!0;if(o===u)return!0}}}}return!1},Ht=function(e,t,r,a,n,i){for(var c=[],o=t,s=D(i),u=0,l=void 0;l=e[u];u++){var p=Gt(l,a,r,s);if(p.valid){var d=o>0;if(p.valid=d,!d){var f=s.maxFileCount;p.errors=p.errors?Ft(Ft([],p.errors,!0),[f(n||1/0)],!1):[f(n||1/0)]}o--}c.push(p)}return c},Zt=function(e,t,r,a,n,i){var c=[];if(!t)return c;for(var o=t,s=D(i),u=s.maxFileCount,l=0;l<e.length;l++){var p=e[l];if((p=Vt(p,a,r,s)).valid){var d=o>0;p.valid=d,d||(p.errors=p.errors?Ft(Ft([],p.errors,!0),[u(n||1/0)],!1):[u(n||1/0)]),o--}c.push(p)}return c},Vt=function(e,t,r,a){var n=ht({},e),i=[];if(!e.file)return ht({},n);if(t){var c=t(n.file).errors;c&&i.push.apply(i,c)}var o=r.maxFileSize,s=r.accept,u=e.file;if(o&&u.size>o){var l=a.maxSizeError;i.push(l(o))}s&&!Ot(qt(s),u)&&i.push(a.acceptError);var p=0===i.length;return n=ht(ht({},n),{valid:p,errors:p?void 0:i})},Gt=function(e,t,r,a){var n=At.getNextId(),i=[];if(t)return ht({id:n,file:e},t(e));var c=r.maxFileSize,o=r.accept;if(c&&e.size>c){var s=a.maxSizeError;i.push(s(c))}return o&&!Ot(qt(o),e)&&i.push(a.acceptError),{id:n,file:e,valid:0===i.length,errors:i}},Xt=["File is too big. Max file size allowed is 80mb.","File's type is not allowed.","Max amount of files (28) has been reached."],Kt=function(e,t,r,a){void 0===t&&(t=Math.ceil(28*Math.random())%2==0);var n=[],i=r||function(){switch(Lt(0,4)){case 0:return"error";case 1:return"uploading";case 2:return"success";default:return}}(),c=a||"";if(t){if(!a)switch(i){case"error":c="Upload failed. There was an error";break;case"success":c="File was successfully upload";break;default:a=void 0}n=void 0}else{var o=Lt(0,3);n.push(Xt[o]),i=void 0,c=void 0}return{id:At.getNextId(),valid:t,file:e,uploadStatus:i,uploadMessage:c,errors:n}},Jt=function(e){return{id:e||At.getNextId(),name:"fileName.ext",size:29360128,type:"files-ui/mock",file:Et("fileName.ext",29360128,"files-ui/mock"),errors:Xt,uploadMessage:"uploaded",uploadStatus:"preparing",valid:!1,progress:28,xhr:new XMLHttpRequest,extraData:{extraData1:"files-ui is the best",extraData2:{id:1,name:"files-ui.mock"},deleted:!0},downloadUrl:"https://www.files-ui.com/mock/file-download"}};function Qt(e,t){for(var r=Object.keys(t||{}),a=0;a<r.length&&t;a++)e.append(r[a],t[r[a]]);e.append("otherValue","HAAAAAAAAAAAAAAa")}function $t(e,t){for(var r=Object.keys(t||{}),a=0;a<r.length&&t;a++)e.setRequestHeader(r[a],t[r[a]])}var Wt={success:!1,message:"Timeout error",payload:{}},Yt={success:!1,message:"Upload aborted",payload:{}},er={success:!1,message:"Error when parsing JSON response",payload:{}},tr={success:!1,message:"Unexpected error",payload:{}},rr=function(e){return ht(ht({},e),{uploadMessage:"Unable to upload. xhr object was not provided",uploadStatus:"error",serverResponse:{success:!1}})},ar=function(e,t,r){return{success:e,message:t,payload:r}},nr=function(e){try{var t=JSON.parse(e.response),r=t.success,a=t.message;return{success:"boolean"==typeof r&&r,message:"string"==typeof a?a:"Error on message response",payload:t.payload||{}}}catch(e){return er}},ir=function(e,t){return ht(ht({},e),{serverResponse:t,uploadMessage:t.message,uploadStatus:"success"})},cr=function(e,t){return ht(ht({},e),{uploadMessage:t.message,uploadStatus:"error",serverResponse:t})},or=function(e,t,r,a,n){return void 0===t&&(t="POST"),new Promise((function(i,c){var o=["POST","PUT","PATCH"].includes(t.toUpperCase())?t:"POST";e.upload.onload=function(){},e.upload.ontimeout=function(){return i(Wt)},e.upload.onabort=function(){i(Yt)},e.onloadend=function(e){return bt(void 0,void 0,void 0,(function(){return vt(this,(function(e){return[2]}))}))},e.onreadystatechange=function(t){return bt(void 0,void 0,void 0,(function(){return vt(this,(function(t){return e.readyState,4===e.readyState&&(""!==e.response?i(nr(e)):i(Yt)),[2]}))}))},e.open(o,r,!0),$t(e,n),e.send(a)}))},sr=function(e,t,r,a,n){return bt(void 0,void 0,void 0,(function(){return vt(this,(function(i){return[2,new Promise((function(i,c){return bt(void 0,void 0,void 0,(function(){var c,o,s,u,l,p;return vt(this,(function(d){switch(d.label){case 0:return d.trys.push([0,2,,3]),(c=e.xhr)?(o=r||"POST",s=e.file,(u=new FormData).append(n||"file",s),l=ht({otherValue:"other valueee haaaa",param2:{tecnica:"KIKOHUUUU",friend:"Chaos",age:25}},e.extraUploadData),Qt(u,l),p=void 0,[4,or(c,o,t,u,a||{})]):(i(rr(e)),[2]);case 1:return(p=d.sent()).success?i(ir(e,p)):i(cr(e,p)),[3,3];case 2:return d.sent(),i(cr(e,tr)),[3,3];case 3:return[2]}}))}))}))]}))}))};function ur(e,t,r,a,n){var i=this;return new Promise((function(c,o){return bt(i,void 0,void 0,(function(){var i,o;return vt(this,(function(s){switch(s.label){case 0:(i=new FormData).append(a||"file",e),s.label=1;case 1:return s.trys.push([1,3,,4]),[4,or(new XMLHttpRequest,r,t,i,n)];case 2:return o=s.sent(),c(o),[3,4];case 3:return s.sent(),c(tr),[3,4];case 4:return[2]}}))}))}))}var lr=function(e,t,r,a,n){return new Promise((function(i,c){e.upload.onload=function(){},e.upload.ontimeout=function(){return i(Wt)},e.upload.onabort=function(){return i(Yt)},e.onreadystatechange=function(t){return bt(void 0,void 0,void 0,(function(){return vt(this,(function(t){return 4===e.readyState&&(""!==e.response?i(nr(e)):i(tr)),[2]}))}))},e.open(t,r,!0);for(var o=Object.keys(n),s=0;s<o.length;s++)e.setRequestHeader(o[s],n[o[s]]);e.send(a)}))},pr=function(e){return ht(ht({},e),{uploadMessage:"Unexpected error",uploadStatus:"error",serverResponse:{success:!1,message:"Error on upload: unexpected error ",payload:{}}})},dr=function(e){return{id:e.id,uploadedFile:ht(ht({},e),{uploadMessage:"Unable to upload. XHR was not provided",uploadStatus:"error"}),serverResponse:{success:!1,message:"Error on upload: Unable to upload. XHR was not provided ",payload:{}}}},fr=function(e,t,r){return{id:e.id,uploadedFile:ht(ht({},e),{uploadMessage:t.message,uploadStatus:r}),serverResponse:t}},gr=function(e){return e?e.map((function(e){return ht(ht({},e),{xhr:new XMLHttpRequest})})):[]},mr=function(e){return"preparing"===e.uploadStatus?(e.uploadStatus="uploading",ht(ht({},e),{uploadStatus:"uploading"})):e},hr=function(e){return new Promise((function(t,r){setTimeout((function(){"preparing"===e.uploadStatus?(e.uploadStatus="uploading",t(ht(ht({},e),{uploadStatus:"uploading"}))):t(e)}),1500)}))},br=function(e){return void 0===e&&(e=1500),new Promise((function(t,r){setTimeout((function(){t(!0)}),e)}))},vr=function(e){return e.filter((function(e){var t;return!(null===(t=e.extraData)||void 0===t?void 0:t.deleted)})).map((function(e){return"aborted"!==e.uploadStatus||e.uploadMessage||(e.uploadMessage="Upload aborted by user"),mt.toExtFile(e)}))},Fr=function(e,t){var r=e.uploadStatus,a=t.uploadStatus;"preparing"===r&&["aborted",void 0].includes(a)?(e.uploadStatus=void 0,e.uploadMessage=t.uploadMessage):"uploading"===r&&["aborted",void 0].includes(a)&&(e.uploadStatus="aborted",e.uploadMessage=t.uploadMessage)},wr={indianred:"#CD5C5C",lightcoral:"#F08080",salmon:"#FA8072",darksalmon:"#E9967A",lightsalmon:"#FFA07A",crimson:"#DC143C",red:"#FF0000",firebrick:"#B22222",darkred:"#8B0000",pink:"#FFC0CB",lightpink:"#FFB6C1",hotpink:"#FF69B4",deeppink:"#FF1493",mediumvioletred:"#C71585",palevioletred:"#DB7093",coral:"#FF7F50",tomato:"#FF6347",orangered:"#FF4500",darkorange:"#FF8C00",orange:"#FFA500",gold:"#FFD700",yellow:"#FFFF00",lightyellow:"#FFFFE0",lemonchiffon:"#FFFACD",lightgoldenrodyellow:"#FAFAD2",papayawhip:"#FFEFD5",moccasin:"#FFE4B5",peachpuff:"#FFDAB9",palegoldenrod:"#EEE8AA",khaki:"#F0E68C",darkkhaki:"#BDB76B",lavender:"#E6E6FA",thistle:"#D8BFD8",plum:"#DDA0DD",violet:"#EE82EE",orchid:"#DA70D6",fuchsia:"#FF00FF",magenta:"#FF00FF",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",rebeccapurple:"#663399",blueviolet:"#8A2BE2",darkviolet:"#9400D3",darkorchid:"#9932CC",darkmagenta:"#8B008B",purple:"#800080",indigo:"#4B0082",slateblue:"#6A5ACD",darkslateblue:"#483D8B",mediumslateblue:"#7B68EE",greenyellow:"#ADFF2F",chartreuse:"#7FFF00",lawngreen:"#7CFC00",lime:"#00FF00",limegreen:"#32CD32",palegreen:"#98FB98",lightgreen:"#90EE90",mediumspringgreen:"#00FA9A",springgreen:"#00FF7F",mediumseagreen:"#3CB371",seagreen:"#2E8B57",forestgreen:"#228B22",green:"#008000",darkgreen:"#006400",yellowgreen:"#9ACD32",olivedrab:"#6B8E23",olive:"#808000",darkolivegreen:"#556B2F",mediumaquamarine:"#66CDAA",darkseagreen:"#8FBC8B",lightseagreen:"#20B2AA",darkcyan:"#008B8B",teal:"#008080",aqua:"#00FFFF",cyan:"#00FFFF",lightcyan:"#E0FFFF",paleturquoise:"#AFEEEE",aquamarine:"#7FFFD4",turquoise:"#40E0D0",mediumturquoise:"#48D1CC",darkturquoise:"#00CED1",cadetblue:"#5F9EA0",steelblue:"#4682B4",lightsteelblue:"#B0C4DE",powderblue:"#B0E0E6",lightblue:"#ADD8E6",skyblue:"#87CEEB",lightskyblue:"#87CEFA",deepskyblue:"#00BFFF",dodgerblue:"#1E90FF",cornflowerblue:"#6495ED",royalblue:"#4169E1",blue:"#0000FF",mediumblue:"#0000CD",darkblue:"#00008B",navy:"#000080",midnightblue:"#191970",cornsilk:"#FFF8DC",blanchedalmond:"#FFEBCD",bisque:"#FFE4C4",navajowhite:"#FFDEAD",wheat:"#F5DEB3",burlywood:"#DEB887",tan:"#D2B48C",rosybrown:"#BC8F8F",sandybrown:"#F4A460",goldenrod:"#DAA520",darkgoldenrod:"#B8860B",peru:"#CD853F",chocolate:"#D2691E",saddlebrown:"#8B4513",sienna:"#A0522D",brown:"#A52A2A",maroon:"#800000",white:"#FFFFFF",snow:"#FFFAFA",honeydew:"#F0FFF0",mintcream:"#F5FFFA",azure:"#F0FFFF",aliceblue:"#F0F8FF",ghostwhite:"#F8F8FF",whitesmoke:"#F5F5F5",seashell:"#FFF5EE",beige:"#F5F5DC",oldlace:"#FDF5E6",floralwhite:"#FFFAF0",ivory:"#FFFFF0",antiquewhite:"#FAEBD7",linen:"#FAF0E6",lavenderblush:"#FFF0F5",mistyrose:"#FFE4E1",gainsboro:"#DCDCDC",lightgray:"#D3D3D3",silver:"#C0C0C0",darkgray:"#A9A9A9",gray:"#808080",dimgray:"#696969",lightslategray:"#778899",slategray:"#708090",darkslategray:"#2F4F4F",black:"#000000"},xr=function(e,t){void 0===t&&(t=25);var r="",a=(100-t)/100,n=0,i=0,c=0;if(Er(Ar(e)))n=16*Sr(e.charAt(1))+Sr(e.charAt(2)),i=16*Sr(e.charAt(3))+Sr(e.charAt(4)),c=16*Sr(e.charAt(5))+Sr(e.charAt(6)),r="rgb(".concat(n*a,", ").concat(i*a,",").concat(c*a,")");else if(e.includes("rgba")){var o=e.replace("rgba(","").split(",");r="rgb(".concat(parseInt(o[0],10)*a,", ").concat(parseInt(o[1],10)*a,",").concat(parseInt(o[2],10)*a,")")}else if(e.includes("rgb")){o=e.replace("rgb(","").split(",");r="rgb(".concat(parseInt(o[0],10)*a,", ").concat(parseInt(o[1],10)*a,",").concat(parseInt(o[2],10)*a,")")}return r},_r=function(e,t){void 0===t&&(t=25);var r="",a=(100+t)/100,n=0,i=0,c=0;if(Er(Ar(e)))n=16*Sr(e.charAt(1))+Sr(e.charAt(2)),i=16*Sr(e.charAt(3))+Sr(e.charAt(4)),c=16*Sr(e.charAt(5))+Sr(e.charAt(6)),r="rgb(".concat(n*a,", ").concat(i*a,",").concat(c*a,")");else if(e.includes("rgba")){var o=e.replace("rgba(","").split(",");r="rgb(".concat(parseInt(o[0],10)*a,", ").concat(parseInt(o[1],10)*a,",").concat(parseInt(o[2],10)*a,")")}else if(e.includes("rgb")){o=e.replace("rgb(","").split(",");r="rgb(".concat(parseInt(o[0],10)*a,", ").concat(parseInt(o[1],10)*a,",").concat(parseInt(o[2],10)*a,")")}return r},yr=function(e,t,r){void 0===t&&(t=0);var a=r||"rgba(255, 255, 255, 0.6)";if(!e)return a;var n=e.toUpperCase();if(n.includes("RGBA"))return n;if(n.includes("RGB"))return n.replace("RGB","rgba").replace(")",", ".concat(t,")"));if(!Er(Ar(n)))return a;var i,c,o;return i=16*Sr(n.charAt(1))+Sr(n.charAt(2)),c=16*Sr(n.charAt(3))+Sr(n.charAt(4)),o=16*Sr(n.charAt(5))+Sr(n.charAt(6)),"rgba(".concat(i,", ").concat(c,",").concat(o," , ").concat(t,")")},Er=function(e){if("#"!==e.charAt(0))return!1;if(7!==e.length)return!1;for(var t=1;t<e.length;t++)if(!zr.includes(e.charAt(t)))return!1;return!0};function Ar(e){return e?void 0!==wr[e.toLocaleLowerCase()]?wr[e.toLocaleLowerCase()]:e:""}var zr=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"],kr=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],Sr=function(e){return zr.includes(e)?kr[zr.indexOf(e)]:0},Mr=function(e){return void 0!==e&&""!==e?e:jr},Dr=function(e,t){return void 0===t&&(t=1),yr(Mr(Ar(e)),t)},jr="#646c7f",Cr=function(e,t){var r=wt.getExtFileInstanceList(e);if(r){var a=Ft([],t,!0);if(a=a.filter((function(e){return-1===(null==r?void 0:r.findIndex((function(t){return t.id===e.id})))})),r.length!==t.length||0===t.length)return;for(var n=0;n<r.length;n++)void 0===t[n].uploadStatus&&"preparing"===r[n].uploadStatus&&(r[n].uploadStatus=void 0)}return[]};export{Yt as ABORTED_ERROR_RESPONSE,o as DropzoneEnglish,n as DropzoneFrench,t as DropzoneItalian,k as DropzoneLocalizer,S as DropzoneLocalizerSelector,h as DropzonePortuguese,f as DropzoneRussian,F as DropzoneSimplifiedChinese,l as DropzoneSpanish,_ as DropzoneTraditionalChinese,mt as ExtFileInstance,wt as ExtFileManager,At as FileIdGenerator,s as FileItemEnglish,i as FileItemFrench,r as FileItemItalian,A as FileItemLocalizer,z as FileItemLocalizerSelector,b as FileItemPortuguese,g as FileItemRussian,w as FileItemSimplifiedChinese,p as FileItemSpanish,y as FileItemTraditionalChinese,lr as FuiUpload,er as JSON_PARSE_ERROR_RESPONSE,nr as JsonParseResponse,wr as NAMED_COLORS,rr as NO_XHR_PROVIDED_ERROR,_t as SyntheticFile,Wt as TIMEOUT_ERROR_RESPONSE,tr as UNEXPECTED_ERROR_RESPONSE,u as ValidateErrorEnglish,c as ValidateErrorFrench,a as ValidateErrorItalian,M as ValidateErrorLocalizer,D as ValidateErrorLocalizerSelector,v as ValidateErrorPortuguese,m as ValidateErrorRussian,x as ValidateErrorSimplifiedChinese,d as ValidateErrorSpanish,E as ValidateErrorTraditionalChinese,U as aac,N as abw,P as accdb,Ut as addClassName,Qt as addExtraData,$t as addHeaders,st as applicationSelector,Mr as asureColor,at as audioSelector,q as avi,O as azw,H as bmp,_r as brighterColor,Z as bz,V as bz2,G as cda,pt as checkIsCode,Rt as cleanInput,Ar as colourNameToHex,Dr as completeAsureColor,fr as completeUploadResult,yt as createListOfMultiTypeFile,Et as createSyntheticFile,xt as createUploadConfig,X as csh,K as css,J as csv,xr as darkerColor,Q as docx,$ as drawio,W as eot,Y as epub,Jt as extFileMock,Cr as extFileReconcilation,lt as extensionSelector,It as fakeFuiUpload,zt as fileListToExtFileArray,kt as fileListToExtFileInstanceArray,Ht as fileListvalidator,e as fileSizeFormater,ct as fontSelector,ee as freearc,tt as getExt,L as getImageOrientation,Pt as getLocalFileItemData,Lt as getRandomInt,dt as getURLFileIco,ft as getURLFileIcoFromNameAndType,te as gif,re as gzip,yr as hexColorToRGB,Sr as hexTodec,ae as html,ne as icalendar,it as imageSelector,mr as instantPreparingToUploadOne,Er as isHexColor,Nt as isUploadAbleExtFile,St as isValidateActive,ce as jar,ie as java,oe as javascript,se as jpeg,ue as json,le as jsonld,cr as makeErrorUploadResponse,ar as makeServerResponse,ir as makeSuccessUploadResponse,Kt as makeSyntheticExtFile,pe as midi,ut as mimeSelector,de as mp3,fe as mp4,ge as mpeg,me as mpkg,he as octet,be as odp,ve as ods,Fe as odt,we as oga,xe as ogv,_e as ogx,ye as opus,Ee as otf,Ae as pdf,ze as php,ke as png,Se as pptx,Bt as prepToUploadOne,hr as preparingToUploadOne,Me as psd,De as python,Ce as rar,Be as react,T as readAsArrayBuffer,B as readAsBinaryString,j as readAsDataURL,C as readAsText,I as resizeImage,Te as rtf,vr as sanitizeArrExtFile,Ie as sass,qt as separateAccept,Fr as setNextUploadStatus,Dt as setPrepToUploading,R as sevenzip,Le as sh,Mt as shrinkWord,Ct as sleepPreparing,br as sleepTransition,Re as swf,je as tar,Ue as text,nt as textSelector,Ne as tiff,gr as toUploadableExtFileList,Pe as ttf,qe as typescript,dr as unableToUploadResult,pr as unexpectedErrorUploadResult,sr as uploadExtFile,ur as uploadFile,or as uploadFormData,jt as uploadOne,Tt as uploadOneExtFile,Ot as validateAccept,Vt as validateExtFile,Zt as validateExtFileList,Gt as validateFile,ot as videoSelector,Oe as vsd,He as vue,Ze as wav,Ge as weba,Ve as webm,Xe as webp,Ke as wma,Je as wmv,Qe as woff,$e as xlsx,We as xml,Ye as xul,et as zip}; //# sourceMappingURL=index.es.js.map diff --git a/src/files-ui/core/index.es.js.map b/src/files-ui/core/index.es.js.map index a44e666147f60695794a38fec4c079ad734d18bb..c4a8edb4f9b9d15ce32af04ce7d75a85b3d06df8 100644 --- a/src/files-ui/core/index.es.js.map +++ b/src/files-ui/core/index.es.js.map @@ -1 +1 @@ -{"version":3,"file":"index.es.js","sources":["../src/utils/fileSizeFormatter.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","../src/reader/readers.ts","../src/reader/resizeImage.ts","../src/reader/imageOrientation.ts","../src/mime/icons.ts","../src/utils/getExt.ts","../src/mime/mime.ts","../src/types/ExtFile.ts","../src/types/ExtFileManager.ts","../src/types/UploadConfig.ts","../src/synthetic-file/SyntheticFile.ts","../src/utils/IdGenerator.ts","../src/utils/fileListParser.ts","../src/utils/dropzone.utils.ts","../src/utils/shrinkWord.ts","../src/utils/fakeupload.utils.ts","../src/utils/randomInt.ts","../src/utils/input.utils.ts","../src/utils/addClassName.ts","../src/utils/isUploadAbleExtFile.ts","../src/utils/getLocalFileItemData.ts","../src/validation/separateAccept.ts","../src/validation/validateAccept.ts","../src/validation/fileValidator.ts","../src/validation/fakeerros.ts","../src/synthetic-file/syntheticfileGenerator.ts","../src/validation/randomStatus.ts","../src/mocks/extFileMock.ts","../src/upload/addExtraData.upload.ts","../src/upload/addheaders.upload.ts","../src/upload/errors.upload.ts","../src/upload/response.upload.ts","../src/upload/upload.ts","../src/upload/utils.upload.ts","../src/color/namedColors.ts","../src/color/colors.ts","../src/file-manager/reconcilation.ts"],"sourcesContent":["/**\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\n export const fileSizeFormater = (fileSize?: number | false): string| undefined => {\r\n let result = \"\";\r\n if (!fileSize) {\r\n return undefined;\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}","import { fileSizeFormater } from \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"preparazione\",\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 aborted:\"Interrotto\"\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 \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"préparer\",\r\n uploading: \"En cours\",\r\n success: \"Succès\",\r\n valid: \"Valide\",\r\n denied: \"Refusé\",\r\n error: \"Erreur\",\r\n aborted:\"Interrompu\"\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}","import { fileSizeFormater } from \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"Preparing\",\r\n uploading: \"Uploading\",\r\n success: \"Success\",\r\n valid: \"Valid\",\r\n denied: \"Not valid\",\r\n error: \"Error\",\r\n aborted:\"Aborted\"\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 \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"Preparando\",\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 aborted: \"Anulado\"\r\n },\r\n}\r\n/**\r\n * Spanish translation for Validation Errors\r\n */\r\nexport 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 \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"подготовка\",\r\n uploading: \"Загрузка\",\r\n success: \"успех\",\r\n valid: \"годный\",\r\n denied: \"выкинутый\",\r\n error: \"ошибка\",\r\n aborted:\"прерванный\"\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 \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"Preparando\",\r\n uploading: \"Enviando\",\r\n success: \"Êxito\",\r\n valid: \"válido\",\r\n denied: \"Negado\",\r\n error: \"Erro\",\r\n aborted:\"Abortado\"\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}","import { LocalLabels } from \"../../types\";\r\nimport { fileSizeFormater } from \"../../utils/fileSizeFormatter\";\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 * Chinnese 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 preparing:\"预加载\",\r\n uploading: \"上传\",\r\n success: \"成功\",\r\n valid: \"接受的文件\",\r\n denied: \"被拒绝的文件\",\r\n error: \"错误\",\r\n aborted:\"中止\"\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}","import { fileSizeFormater } from \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\r\n\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 * Chinese 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 preparing: \"預加載\",\r\n uploading: \"上傳\",\r\n success: \"成功\",\r\n valid: \"有效文件\",\r\n denied: \"無效文件\",\r\n error: \"錯誤\",\r\n aborted: \"中止\"\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 \"../types\";\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 { 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\nimport { ComponentLocalizer, Localization, LocalLabels } from \"../types\";\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 \"./../types\";\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 if (!local || ![\"ES-es\", \"EN-en\", \"FR-fr\", \"IT-it\", \"PT-pt\", \"RU-ru\", \"ZH-cn\", \"ZH-hk\"].includes(local)) {\r\n return ValidateErrorLocalizer[\"EN-en\"];\r\n }\r\n return ValidateErrorLocalizer[local];\r\n}","/**\r\n * Reads an image (or other type) file as data URL in a promise way, \r\n * so you can use await.\r\n * It will return a string that contains the URL representation\r\n * @param file File or Blob object\r\n * @returns data URL of the file\r\n */\r\nexport const readAsDataURL = (file: File | Blob, onProgress?: Function, onError?: Function): Promise<string | undefined> => {\r\n return new Promise<string | undefined>((resolve, reject) => {\r\n try {\r\n const reader = new FileReader();\r\n reader.onprogress = () => {\r\n onProgress?.();\r\n }\r\n reader.onerror = function () {\r\n onError?.();\r\n }\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\r\n\r\n/**\r\n * Reads a file as Text 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 or Blob object\r\n * @param encoding The type of encoding such as \"base64\"\r\n * @returns data text of the file\r\n */\r\nexport const readAsText = (file: File | Blob, encoding?: string, onProgress?: Function, onError?: Function): 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.onprogress = () => {\r\n onProgress?.();\r\n }\r\n reader.onerror = function () {\r\n onError?.();\r\n }\r\n reader.readAsText(file, encoding ? encoding : \"base64\");\r\n } catch (error) {\r\n reject(undefined);\r\n }\r\n });\r\n}\r\n\r\n\r\n\r\n/**\r\n * Reads a file and return the raw binary data from the file. \r\n * @param file File or Blob object\r\n * @param encoding The type of encoding such as \"base64\"\r\n * @returns raw binary data of the file\r\n */\r\nexport const readAsBinaryString = (file: File | Blob, onProgress?: Function, onError?: Function): 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.onprogress = () => {\r\n onProgress?.();\r\n }\r\n reader.onerror = function () {\r\n onError?.();\r\n }\r\n reader.readAsBinaryString(file);\r\n } catch (error) {\r\n reject(undefined);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Reads a file and returns an ArrayBuffer representing the file's data \r\n * @param file File or blob object\r\n * @param encoding The type of encoding such as \"base64\"\r\n * @returns ArrayBuffer representation of the file\r\n */\r\nexport const readAsArrayBuffer = (file: File | Blob, onProgress?: Function, onError?: Function): 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.onprogress = () => {\r\n onProgress?.();\r\n }\r\n reader.onerror = function () {\r\n onError?.();\r\n }\r\n reader.readAsArrayBuffer(file);\r\n } catch (error) {\r\n reject(undefined);\r\n }\r\n });\r\n}","/**\r\n * Resize an image resolution given maxWidth and maxHeight\r\n * \r\n * Should be called with await\r\n * @param base64Str a string representation of an imae file\r\n * @param maxWidth the max width of he image\r\n * @param maxHeight the max height of he image\r\n * @returns the resized image\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: HTMLCanvasElement = document.createElement('canvas');\r\n const MAX_WIDTH: number = maxWidth;\r\n const MAX_HEIGHT: number = maxHeight;\r\n let width: number = img.width;\r\n let height: number = 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: CanvasRenderingContext2D | null = 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 if (process.env.NODE_ENV === \"development\") {\r\n console.error(\"An error ocurred when trying to make a thumnail\");\r\n }\r\n reject(undefined);\r\n }\r\n }\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.error(\"An error ocurred when trying to make a thumnail\");\r\n }\r\n reject(undefined);\r\n }\r\n });\r\n}\r\n\r\n","/**\r\n * Resize an image resolution given maxWidth and maxHeight\r\n * \r\n * Should be called with await\r\n * @param base64Str a string representation of an imae file\r\n * @param maxWidth the max width of he image\r\n * @param maxHeight the max height of he image\r\n * @returns the resized image\r\n */\r\nexport function getImageOrientation(\r\n imageSource: string | undefined,\r\n): Promise<\"landscape\" | \"portrait\"> {\r\n return new Promise((resolve, reject) => {\r\n //console.log(\"getImageOrientation imageSource\", imageSource);\r\n if (!imageSource || imageSource.length === 0) {\r\n // console.log(\"getImageOrientation rejected\", imageSource);\r\n\r\n reject(\"landscape\");\r\n return;\r\n }\r\n try {\r\n //console.log(\"getImageOrientation try ini\", imageSource);\r\n\r\n let img: HTMLImageElement = new Image();\r\n img.src = imageSource;\r\n img.onerror = (ev: string | Event) => {\r\n //console.log(\"getImageOrientation There was a ne error reading\", ev);\r\n reject(\"landscape\");\r\n }\r\n img.onload = () => {\r\n let width: number = img.width;\r\n let height: number = img.height;\r\n if (width > height) {\r\n resolve(\"landscape\");\r\n } else {\r\n resolve(\"portrait\");\r\n }\r\n }\r\n } catch (error) {\r\n //console.error(\"An error ocurred when trying to get the image orientation\");\r\n\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.error(\"An error ocurred when trying to get the image orientation\");\r\n }\r\n reject(\"landscape\");\r\n }\r\n });\r\n}\r\n\r\n","export 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\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\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\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\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 * Looks for the first file extension\r\n * @param fileName file name\r\n * @returns the file name extension\r\n */\r\n export 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};","import {\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 \"./icons\";\r\nimport { getExt } from \"../utils/getExt\";\r\nimport { IconsMap } from \"../types\";\r\n\r\nconst DEF_GEN_MIME: keyof IconsMap = \"octet\";\r\n/**\r\n * \r\n * @param tailMime \r\n * @returns \r\n */\r\nexport const audioSelector = (tailMime: string): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\r\n let genericMime: keyof IconsMap = \"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 = \"typescript\";\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): keyof IconsMap => {\r\n let genericMime: keyof IconsMap = \"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 * If not found, returns octet-stream url\r\n * @param props mime and extension from file to search\r\n * @returns the result file ico\r\n */\r\nexport const getURLFileIco = (\r\n file: File | undefined,\r\n customIcons: IconsMap | undefined\r\n): ResultFileIco => {\r\n\r\n let result: keyof IconsMap = \"fallBack\";\r\n //if not file, return octet\r\n if (!file) {\r\n result = DEF_GEN_MIME;\r\n if (customIcons?.fallBack)\r\n return { url: customIcons?.fallBack, mimeResume: result };\r\n\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 const customUrl = customIcons?.[result];\r\n if (customUrl !== undefined)\r\n return { url: customUrl, mimeResume: result };\r\n\r\n\r\n return { url: mimeUrlList[result], mimeResume: result };\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 getURLFileIcoFromNameAndType = (\r\n name: string | undefined,\r\n type: string | undefined,\r\n customIcons: IconsMap | undefined\r\n): ResultFileIco => {\r\n\r\n let result: keyof IconsMap = \"octet\";\r\n //if not nam and type, return octet\r\n if (!name) {\r\n result = DEF_GEN_MIME;\r\n if (customIcons?.fallBack)\r\n return { url: customIcons?.fallBack, mimeResume: result };\r\n return { url: mimeUrlList[result], mimeResume: result };\r\n } else {\r\n result = mimeSelector(type);\r\n }\r\n //If plain text\r\n const extention: string = getExt(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 const customUrl = customIcons?.[result];\r\n if (customUrl !== undefined)\r\n return { url: customUrl, mimeResume: result };\r\n\r\n return { url: mimeUrlList[result], mimeResume: result };\r\n}\r\ninterface ResultFileIco {\r\n url: string;\r\n mimeResume: keyof IconsMap;\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 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 fallBack: octet,\r\n};","\r\nimport { UPLOADSTATUS, ServerResponse } from \"../types\";\r\n\r\n/**\r\n * ExtFile === \"Extended File\".\r\n * This object \"extends\" the File Object\r\n */\r\nexport declare type ExtFile = {\r\n /** \r\n * An identifier for the extFile\r\n */\r\n id?: number | string | undefined;\r\n /**\r\n * The file object. Used mostly when user selects or drops files in the client sid.\r\n */\r\n file?: File;\r\n /**\r\n * The name of the file. Used mostly for displaying file data from server.\r\n */\r\n name?: string;\r\n /**\r\n * The type of the file. Used mostly for displaying file data from server.\r\n */\r\n type?: string;\r\n /**\r\n * The size of the file. Used mostly for displaying file data from server.\r\n */\r\n size?: number;\r\n /**\r\n * a flag that determines whether the file is valid, not valid or it is not validated.\r\n */\r\n valid?: boolean;\r\n /**\r\n * The list of errors when the file was validated\r\n */\r\n errors?: string[];\r\n /**\r\n * The current upload status. (e.g. \"uploading\")\r\n */\r\n uploadStatus?: UPLOADSTATUS | undefined;\r\n /**\r\n * A message that shows the result of the upload process\r\n */\r\n uploadMessage?: string;\r\n /**\r\n * Link, URI or string representation of an image\r\n */\r\n imageUrl?: string;\r\n /**\r\n * The XMLHttpRequest object for performing uploads to a server\r\n */\r\n xhr?: XMLHttpRequest;\r\n /**\r\n * The current percentage of upload progress.\r\n * This value will have a higher priority over the upload progress value calculated inside the component.\r\n * @default undefined\r\n */\r\n progress?: number;\r\n /**\r\n * The additional data that will be sent to the server\r\n * when files are uploaded individually\r\n */\r\n extraUploadData?: Record<string, any>;\r\n /**\r\n * Any kind of extra data that could be needed.\r\n */\r\n extraData?: Object;\r\n /**\r\n * The upload response from server\r\n */\r\n serverResponse?: ServerResponse;\r\n /**\r\n * The url to be used to perform a GET request in order to download the\r\n file. If defined, the download icon will be shown.\r\n */\r\n downloadUrl?: string;\r\n /**\r\n * Link, URI, FIle object or string representation of a video\r\n */\r\n videoUrl?: string;\r\n}\r\n\r\n/**\r\n * A class definition for ExtFile.\r\n * This class has the purpose to allow the creation of instances\r\n * of an ExtFile for performing complex operations that cannot be\r\n * accomplished just by using the ExtFile type.\r\n * For instance, it can help in changing the value of some attributes\r\n * across different scopes thanks to memory reference.\r\n */\r\nexport class ExtFileInstance {\r\n /**\r\n * An identifier for the extFile\r\n */\r\n public id?: number | string;\r\n /**\r\n * The file object. Used mostly when user selects or drops files in the client sid.\r\n */\r\n public file?: File;\r\n /**\r\n * The name of the file. Used mostly for displaying file data from server.\r\n */\r\n public name?: string;\r\n /**\r\n * The type of the file. Used mostly for displaying file data from server.\r\n */\r\n public type?: string;\r\n /**\r\n * The size of the file. Used mostly for displaying file data from server.\r\n */\r\n public size?: number;\r\n\r\n public imageUrl?: string;\r\n /**\r\n * A flag that determines whether the file is valid, not valid or it is not validated.\r\n */\r\n public valid?: boolean;\r\n /**\r\n * The list of errors when the file was validated\r\n */\r\n public errors?: string[];\r\n /**\r\n * A message that shows the result of the upload process\r\n */\r\n public uploadMessage?: string;\r\n /**\r\n * The current upload status. (e.g. \"uploading\")\r\n */\r\n public uploadStatus?: UPLOADSTATUS | undefined;\r\n /**\r\n * The current upload progress\r\n */\r\n public progress?: number;\r\n /**\r\n * The XMLHttpRequest object for performing uploads to a server\r\n */\r\n public xhr?: XMLHttpRequest;\r\n /**\r\n * The additional data that will be sent to the server\r\n */\r\n public extraData?: Record<string, any>;\r\n /**\r\n * The additional data that will be sent to the server\r\n * when filesare uploaded individually\r\n */\r\n public extraUploadData?: Record<string, any>;\r\n /**\r\n * The upload response from server\r\n */\r\n public serverResponse?: ServerResponse;\r\n /**\r\n * Url to perform a GET request in order to download the file.\r\n * This action is triggered when download button is clicked or pressed.\r\n * In case onDownload prop is given\r\n */\r\n public downloadUrl?: string;\r\n /**\r\n * Link, URI, FIle object or string representation of a video\r\n */\r\n public videoUrl?: string;\r\n\r\n constructor(extFile: ExtFile) {\r\n const {\r\n id,\r\n file,\r\n name,\r\n size,\r\n type,\r\n imageUrl,\r\n valid,\r\n errors,\r\n uploadMessage,\r\n uploadStatus,\r\n progress,\r\n xhr,\r\n extraData,\r\n extraUploadData,\r\n serverResponse,\r\n downloadUrl, videoUrl\r\n } = extFile;\r\n\r\n this.id = id;\r\n this.file = file;\r\n this.name = name;\r\n this.size = size;\r\n this.type = type;\r\n this.imageUrl = imageUrl;\r\n\r\n this.valid = valid;\r\n this.errors = errors;\r\n this.uploadStatus = uploadStatus;\r\n this.uploadMessage = uploadMessage;\r\n this.progress = progress;\r\n this.xhr = xhr;\r\n\r\n this.extraData = extraData;\r\n this.extraUploadData = extraUploadData;\r\n this.serverResponse = serverResponse;\r\n\r\n this.downloadUrl = downloadUrl;\r\n this.videoUrl = videoUrl;\r\n }\r\n /**\r\n * method under construction\r\n */\r\n /* private static kamuiFile() {\r\n \r\n }\r\n */\r\n /**\r\n * Copies all non undefined attributes from ExtFileInstance to a new ExtFile object\r\n * @param extFileInstance the instance of ExtFile\r\n * @returns an ExtFile object\r\n */\r\n static toExtFile(extFileInstance: ExtFileInstance): ExtFile {\r\n //console.log(\"before toExtFile()\", extFileInstance);\r\n\r\n let extFileClone: ExtFile = {}; // the new empty object\r\n const extFileInstanceKeys = Object.keys(extFileInstance) as [keyof ExtFile];\r\n const extFileInstanceValues = Object.values(extFileInstance) as Array<ExtFile[keyof ExtFile]>;\r\n // let's copy all user properties into it\r\n for (let i = 0; i < extFileInstanceValues.length; i++) {\r\n const currentValue: ExtFile[keyof ExtFile] = extFileInstanceValues[i];\r\n\r\n\r\n const currKey = extFileInstanceKeys[i];\r\n if (currentValue !== undefined) {\r\n\r\n extFileClone[currKey] = currentValue as ExtFile[keyof ExtFile] as never;\r\n }\r\n }\r\n //console.log(\"after toExtFile()\", extFileClone);\r\n //console.log(\"current extFileClone keys\",Object.keys( extFileClone).length);\r\n return extFileClone;\r\n }\r\n /**\r\n * Copies all non undefined attributes from ExtFileInstance to a new ExtFile object.\r\n * @returns an ExtFile object\r\n */\r\n toExtFile(): ExtFile {\r\n return ExtFileInstance.toExtFile(this);\r\n }\r\n\r\n /* static mock = (id?: number): ExtFileInstance => {\r\n return new ExtFileInstance(\r\n extFileMock(id)\r\n );\r\n } */\r\n}\r\n\r\n\r\n","import { ExtFileInstance, ExtFile } from \"./ExtFile\";\r\n\r\nexport class ExtFileManager {\r\n private static nextId: number = 0;\r\n static fileLists: Record<number | string, ExtFileInstance[] | undefined> = {};\r\n /**\r\n * Increases the id counter and returns the next id available.\r\n * @returns the next integer id available\r\n */\r\n public static getNextId(): number {\r\n ExtFileManager.nextId++;\r\n return ExtFileManager.nextId;\r\n }\r\n /**\r\n * Updates a dui file list given an id\r\n * @param id id of the fileList\r\n * @param extFiles list of DuiFiles forinitializing the array\r\n * @returns the id of the fileList\r\n */\r\n public static setFileList(\r\n id: number | string | undefined,\r\n extFilesInstances: ExtFileInstance[]\r\n ): number | string {\r\n if (!id) {\r\n return 0;\r\n } else {\r\n ExtFileManager.fileLists[id] = [...extFilesInstances];\r\n\r\n return id;\r\n }\r\n\r\n }\r\n /**\r\n * Generates a new ID\r\n * @returns the next Id asociated with a DuiFIle list\r\n */\r\n public static createFileListMap(): number {\r\n const nextId: number = ExtFileManager.getNextId();\r\n ExtFileManager.fileLists[nextId] = [];\r\n\r\n return nextId;\r\n }\r\n\r\n /**\r\n * Deletes a list map\r\n * @returns the next Id asociated with a DuiFIle list\r\n */\r\n public static removeFileListMap(id?: number | string): number | string {\r\n if (!id) {\r\n return 0;\r\n } else {\r\n try {\r\n ExtFileManager.fileLists[id] = undefined;\r\n return id;\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"development\")\r\n console.error(\"Error on remove\", error);\r\n return 0;\r\n }\r\n }\r\n }\r\n /**\r\n * \r\n * @param id the id of the dropzone\r\n * @returns \r\n */\r\n public static getExtFileInstanceList(\r\n id?: number | string\r\n ): ExtFileInstance[] | undefined {\r\n try {\r\n if (!id) {\r\n return undefined;\r\n }\r\n return ExtFileManager.fileLists[id];\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"development\")\r\n console.error(\"Error on getExtFileInstanceList\", error);\r\n return undefined;\r\n }\r\n }\r\n /**\r\n * Updates(replaces) the extFile list on preparing stage and returns the new array.\r\n * Removes the non valid files if cleanOnUpload is true and validateFiles is also true\r\n * Then sets on preparing stage all files according to the following creiteria:\r\n * If theuploadStatus is diferent than \"sucess\" AND\r\n * then, update the files on preparing stage. Otherwise keep the extFile props.\r\n * Finally, updates the ExtFileInstance list on ExtFileManager.\r\n * @param dropzoneId the id to access the right list\r\n * @param localFiles the list of extFiles\r\n * @param validateFiles flag that indicates that validation is active or o¿not\r\n * @param cleanOnUpload flag to determine whther to clena the list oof non valid files or not\r\n * @returns a list of ExtFileInstance\r\n */\r\n public static setFileListMapPreparing(\r\n dropzoneId: number | string,\r\n localFiles: ExtFile[],\r\n validateFiles: boolean,\r\n cleanOnUpload: boolean\r\n ): ExtFileInstance[] | undefined {\r\n //console.log(\"setFileListMapPreparing before if\", dropzoneId, localFiles, cleanOnUpload);\r\n\r\n if (!(typeof dropzoneId === \"number\" || typeof dropzoneId === \"string\")) return undefined;\r\n\r\n //console.log(\"setFileListMapPreparing before try\", localFiles, cleanOnUpload);\r\n try {\r\n\r\n let resultExtList: ExtFileInstance[] = [];\r\n\r\n //initializes the extFileLInstance list\r\n let temLocalFiles: ExtFile[] = [...localFiles];\r\n\r\n //remove non valids if cleanOnUpload is true and validateFiles is also true\r\n if (cleanOnUpload && validateFiles) {\r\n // clean on Upload is true, so non valid files must be removed\r\n temLocalFiles = temLocalFiles.filter(extFile => extFile.valid)\r\n //console.log(\"temLocalFiles filter\", temLocalFiles);\r\n }\r\n\r\n //console.log(\"setFileListMapPreparing after remove non valids\", temLocalFiles);\r\n\r\n if (validateFiles) {\r\n // validation flag was set to true, so only valid=true files will be set to \"preparing\"\r\n\r\n //so, only valid files was kept in the temLocalfiles array\r\n //now set the preparing state only for files with uploadStatus !== \"success\"\r\n temLocalFiles =\r\n temLocalFiles\r\n .map(extFile => {\r\n if (extFile.uploadStatus !== \"success\" && extFile.valid) {\r\n return { ...extFile, uploadStatus: \"preparing\" }\r\n } else {\r\n return { ...extFile }\r\n }\r\n });\r\n } else {\r\n // all files will be set to \"preparing\" whether the valid value\r\n // except those files with uploadStatus ===\"success\"\r\n temLocalFiles =\r\n temLocalFiles\r\n .map(extFile => {\r\n if (extFile.uploadStatus !== \"success\") {\r\n return { ...extFile, uploadStatus: \"preparing\" }\r\n } else {\r\n return { ...extFile }\r\n }\r\n });\r\n }\r\n\r\n //console.log(\"setFileListMapPreparing result\", temLocalFiles);\r\n\r\n //converto to Object instances\r\n resultExtList = temLocalFiles.map(F => new ExtFileInstance(F));\r\n //console.log(\"setFileListMapPreparing RESULT resultExtList\", resultExtList);\r\n\r\n const resultSet = ExtFileManager.setFileList(dropzoneId, resultExtList);\r\n //console.log(\"setFileListMapPreparing RESULT resultSet\", resultSet);\r\n\r\n return resultExtList;\r\n // return ExtFileManager.fileLists[dropzoneId];\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"development\")\r\n console.error(\"setFileListMapPreparing Error on get List\", error);\r\n return undefined;\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n /**\r\n * Updates(replaces) the extFile list on preparing stage and returns the new array.\r\n * Removes the non valid files if cleanOnUpload is true and validateFiles is also true\r\n * Then sets on preparing stage all files according to the following creiteria:\r\n * If theuploadStatus is diferent than \"sucess\" AND\r\n * then, update the files on preparing stage. Otherwise keep the extFile props.\r\n * Finally, updates the ExtFileInstance list on ExtFileManager.\r\n * @param dropzoneId the id to access the right list\r\n * @param localFiles the list of extFiles\r\n * @param validateFiles flag that indicates that validation is active or o¿not\r\n * @param cleanOnUpload flag to determine whther to clena the list oof non valid files or not\r\n * @returns a list of ExtFileInstance\r\n */\r\n public static setFileListMapPreparing2(\r\n dropzoneId: number | string,\r\n localFiles: ExtFile[],\r\n validateFiles: boolean,\r\n cleanOnUpload: boolean\r\n ): ExtFileInstance[] | undefined {\r\n\r\n ExtFileManager.setFileList(dropzoneId, localFiles.map(F => new ExtFileInstance({ ...F, uploadStatus: \"preparing\" })));\r\n\r\n return ExtFileManager.getExtFileInstanceList(dropzoneId);\r\n }\r\n\r\n\r\n\r\n /**\r\n * \r\n * @param dropzoneId \r\n * @param index \r\n * @param incommingDuiFile \r\n * @returns \r\n */\r\n /* public static updateFileListMapPreparingById(\r\n dropzoneId: number,\r\n index: number,\r\n incommingDuiFile: ExtFileInstance\r\n ): ExtFileInstance[] | undefined {\r\n if (!(typeof dropzoneId === \"number\") || !(typeof index === \"number\") || index > 0) return undefined;\r\n const extFileList: ExtFileInstance[] | undefined = ExtFileManager.fileLists[dropzoneId];\r\n\r\n if (!(extFileList && extFileList.length > 0)) return undefined;\r\n extFileList[index]=\r\n try {\r\n ExtFileManager.setFileList(dropzoneId, [\r\n ...localFiles.map(\r\n (x) =>\r\n new ExtFileInstance({ ...x, uploadStatus: \"preparing\" })\r\n ),\r\n ]);\r\n return ExtFileManager.fileLists[dropzoneId];\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"development\")\r\n console.error(\"Error on get List\", error);\r\n return undefined;\r\n }\r\n\r\n } */\r\n}","import { Method } from \"./method\"\r\n\r\nexport type UploadConfig = {\r\n /**\r\n * The url endpoint to upload the file.\r\n * e.g. https://www.myasomwbackend/uploads/file\r\n */\r\n url?: string;\r\n /**\r\n * upload method, can be POST | PUT | PATCH\r\n * @default \"POST\"\r\n */\r\n method?: Method;\r\n /**\r\n * Request headers for http request.\r\n * e.g.\r\n * ```jsx\r\n * headers = { \r\n * \"content-type\": \"multipart/form-data\",\r\n * Authorization: \"Bearer YOUR_BEARER_TOKEN_GOES_HERE\",\r\n * } \r\n * ```\r\n */\r\n headers?: Record<string, string>;\r\n /**\r\n * the label to use in request\r\n * On server this must be the label to get the file.\r\n * @default \"file\"\r\n */\r\n uploadLabel?: string;\r\n /**\r\n * Flag for indicating whther to remove the non-valid files\r\n * before starting the upload process.\r\n * This flag is valid only if validation is enable\r\n */\r\n cleanOnUpload?: boolean;\r\n /**\r\n * If true, onDrop event or file selection not only will make Dropzone to return the list of files, but also\r\n * it will start the upload stage for the files if at least url was set\r\n * By default is false\r\n */\r\n autoUpload?: boolean;\r\n /**\r\n * The time that will last the \"preparing\" stage\r\n * By default is 1500 miliseconds = 1.5 seconds\r\n */\r\n preparingTime?: number;\r\n /**\r\n * A message to show in the footer when the uploading process takes place.\r\n */\r\n uploadingMessage?: string;\r\n}\r\n\r\nexport const createUploadConfig = (\r\n url?: string,\r\n method?: Method,\r\n headers?: Record<string, string>,\r\n uploadLabel?: string,\r\n cleanonUpload?: boolean\r\n) => {\r\n return {\r\n url,\r\n method,\r\n headers,\r\n uploadLabel,\r\n cleanonUpload\r\n }\r\n}","\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}\r\n///////////////////// SHORTCUTS\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/**\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 * An id generator for FileItems\r\n */\r\n export abstract class FileIdGenerator {\r\n static nextId = 0;\r\n /**\r\n * Increases the id counter 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}","import { ExtFile, ExtFileInstance } from \"../types\";\r\nimport { FileIdGenerator } from \"./IdGenerator\";\r\n\r\n\r\n/**\r\n * Converts the fileList into an array of separated ExtFile objects\r\n * @param fileList the FileList object given by input(event.target.files) or drop operation (event.dataTransfer)\r\n * @returns an array of ExtFile objects\r\n */\r\nexport const fileListToExtFileArray = (fileList: FileList): ExtFile[] => {\r\n let extFileArray: ExtFile[] = [];\r\n for (let i = 0, f: File; (f = fileList[i]); i++) {\r\n extFileArray.push({ id: FileIdGenerator.getNextId(), file: f, name: f.name, size: f.size, type: f.type });\r\n }\r\n return extFileArray;\r\n};\r\n\r\n/**\r\n * Converts the fileList into an array of separated ExtFile instances\r\n * @param fileList the FileList object given by input (event.target.files) or drop operation (event.dataTransfer)\r\n * @returns an array of ExtFile instances\r\n */\r\nexport const fileListToExtFileInstanceArray = (fileList: FileList): ExtFileInstance[] => {\r\n let extFileArray: ExtFileInstance[] = [];\r\n for (let i = 0, f: File; (f = fileList[i]); i++) {\r\n extFileArray.push(new ExtFileInstance({ id: FileIdGenerator.getNextId(), file: f, name: f.name, size: f.size, type: f.type }));\r\n }\r\n return extFileArray;\r\n};","export const isValidateActive = (\r\n accept: string | undefined,\r\n maxFileSize: number | undefined,\r\n maxFiles: number | undefined,\r\n validator: Function | undefined\r\n ): boolean => {\r\n return (\r\n (accept !== undefined && accept !== null) ||\r\n (maxFileSize !== undefined && maxFileSize !== null) ||\r\n (maxFiles !== undefined && maxFiles !== null) ||\r\n (validator !== undefined && validator !== null)\r\n );\r\n };\r\n ","/**\r\n * The max size of the word in characters\r\n */\r\nexport const DEFAULT_MAX_SIZE_WORD = 30;\r\n/**\r\n * \r\n * @param word the word to be shrinked\r\n * @returns the shrinked word\r\n */\r\nexport const shrinkWord = (word = \"\", card = false): string => {\r\n let newWord = word;\r\n if (card) {\r\n if (word.length >= 20) {\r\n newWord = word.slice(0, 10) + \"...\" + word.slice(-7);\r\n }\r\n } else if (word.length >= DEFAULT_MAX_SIZE_WORD) {\r\n newWord = word.slice(0, 13) + \"...\" + word.slice(-8);\r\n }\r\n return newWord;\r\n};","\r\nimport { DropzoneLocalizerSelector } from \"../localization\";\r\nimport { ExtFile, ExtFileInstance, UploadResponse } from \"../types\";\r\n\r\n/**\r\n * Updates a extFile and sets its uploadStatus to \"uploading\"\r\n * @param extFile the extended file object\r\n * @returns the extended file with the uploadStatus attribute modified\r\n */\r\nexport const setPrepToUploading = (\r\n extFile: ExtFile\r\n): Promise<ExtFile> => {\r\n //console.log(\"prepToUpload One\", extFile);\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve({\r\n ...extFile,\r\n uploadStatus: \"uploading\",\r\n });\r\n }, 1500);\r\n\r\n });\r\n};\r\n/**\r\n * Updates a extFile and sets its uploadStatus to \"success\"\r\n * @param extFile the extended file object\r\n * @returns the extended file with the uploadStatus attribute modified\r\n */\r\nexport const uploadOne = (\r\n extFile: ExtFile\r\n): Promise<ExtFile> => {\r\n //console.log(\"upload One\", extFile);\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve({\r\n ...extFile,\r\n uploadStatus: \"success\",\r\n });\r\n }, 2000);\r\n });\r\n};\r\n/**\r\n * Awaits the given time before start uploading\r\n * @param preparingTime the time in miliseconds, by default it will wait 1.5 secs\r\n * @returns an empty object\r\n */\r\nexport const sleepPreparing = (\r\n preparingTime: number = 5000\r\n): Promise<void> => {\r\n //console.log(\"uploadfiles preparingTime One\", preparingTime);\r\n return new Promise((resolve, reject) => {\r\n\r\n setTimeout(() => {\r\n resolve();\r\n }, preparingTime);\r\n\r\n });\r\n}\r\n\r\n/**\r\n * \r\n * @param extFileInstance \r\n * @returns \r\n */\r\nexport const prepToUploadOne = (\r\n extFileInstance: ExtFileInstance | ExtFile\r\n): Promise<ExtFileInstance | ExtFile> => {\r\n //console.log(\"prepToUpload One\", extFileInstance);\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n extFileInstance.uploadStatus = \"uploading\";\r\n resolve({\r\n ...extFileInstance,\r\n uploadStatus: \"uploading\",\r\n });\r\n }, 1500);\r\n\r\n });\r\n};\r\n\r\n/**\r\n * \r\n * @param extFileInstance \r\n * @returns \r\n */\r\nexport const uploadOneExtFile = (\r\n extFileInstance: ExtFileInstance\r\n): Promise<Object> => {\r\n //console.log(\"upload One\", extFileInstance);\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n extFileInstance.uploadStatus = \"success\";\r\n resolve({\r\n ...extFileInstance,\r\n uploadStatus: \"success\",\r\n });\r\n }, 2000);\r\n });\r\n};\r\n\r\n\r\n/**\r\n * \r\n * @param extFile the extFile to upload \r\n * @param DropzoneLocalizer the localization\r\n * @returns a duiUploadResponse object that describes the result\r\n */\r\nexport const fakeFuiUpload = (\r\n extFileInstance: ExtFileInstance,\r\n DropzoneLocalizer = DropzoneLocalizerSelector(\"EN-en\")\r\n): Promise<ExtFile> => {\r\n \r\n const extFile:ExtFile = extFileInstance.toExtFile();\r\n \r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n const randomNumber: number = Math.floor(Math.random() * 10);\r\n if (randomNumber % 2 === 0) {\r\n const success = true;\r\n const message = DropzoneLocalizer.fakeuploadsuccess as string;\r\n const payload = { url: \"\" };\r\n resolve({\r\n ...extFile,\r\n serverResponse: { success, message, payload },\r\n uploadStatus: \"success\",\r\n uploadMessage: message,\r\n\r\n });\r\n } else {\r\n const success = false;\r\n const message = DropzoneLocalizer.fakeUploadError as string;\r\n const payload = {};\r\n resolve({\r\n ...extFile,\r\n serverResponse: { success, message, payload },\r\n uploadStatus: \"error\",\r\n uploadMessage: message,\r\n });\r\n }\r\n }, 1700);\r\n });\r\n};\r\n\r\n\r\n/**\r\n * \r\n * @param extFile the extFile to upload \r\n * @param DropzoneLocalizer the localization\r\n * @returns a duiUploadResponse object that describes the result\r\n */\r\nexport const fakeFuiUploadExtFile = (\r\n extFileInstance: ExtFileInstance,\r\n DropzoneLocalizer = DropzoneLocalizerSelector(\"EN-en\")\r\n): Promise<UploadResponse> => {\r\n \r\n const extFile:ExtFile = extFileInstance.toExtFile();\r\n \r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n const randomNumber: number = 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\r\n resolve({\r\n id: extFile.id,\r\n serverResponse: { status, message, payload },\r\n uploadedFile: {\r\n ...extFile,\r\n uploadStatus: \"success\",\r\n uploadMessage: message,\r\n progress: 100\r\n }\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 id: extFile.id,\r\n serverResponse: { status, message, payload },\r\n uploadedFile: {\r\n ...extFile,\r\n uploadStatus: \"error\",\r\n uploadMessage: message,\r\n progress: 60\r\n },\r\n });\r\n }\r\n }, 1700);\r\n });\r\n};\r\n","/**\r\n * Random integer between min (included) and max (excluded)\r\n * @param min the min number\r\n * @param max the max number\r\n * @returns a random number between min (included) and max (excluded)\r\n */\r\nexport function getRandomInt(min: number = 0, max: number = 0): number {\r\n return Math.floor(Math.random() * (max - min)) + min;\r\n}\r\n","/**\r\n * Cleans the input.value attribute\r\n * @param inputElement \r\n */\r\nexport const cleanInput = (inputElement?: HTMLInputElement | null) => {\r\n if (!inputElement) return;\r\n inputElement.value = \"\";\r\n}","/**\r\n * If className is given, adds class name in string format to a base class name\r\n * @param baseClassName the base class name\r\n * @param className the class name to be added\r\n * @returns a new class name obtained by adding the second paramater\r\n */\r\nexport const addClassName = (\r\n baseClassName: string,\r\n className: string | undefined\r\n): string => {\r\n if (className)\r\n return `${baseClassName} ${className}`;\r\n return baseClassName;\r\n}","import { ExtFile } from \"../types\";\r\n\r\nexport const isUploadAbleExtFile = (extFile: ExtFile, validateFilesFlag: boolean) => {\r\n return (!validateFilesFlag || (validateFilesFlag && extFile.valid)) && extFile.uploadStatus !== \"success\";\r\n}","/**\r\n * \r\n * @param file \r\n * @param name \r\n * @param type \r\n * @param size \r\n * @returns the file name, type and size\r\n */\r\nexport const getLocalFileItemData = (\r\n file: File | undefined,\r\n name: string | undefined,\r\n type: string | undefined,\r\n size: number | undefined\r\n): [string, string | undefined, number | undefined] => {\r\n\r\n let localFileName: string = \"\";\r\n let localFileType: string | undefined = undefined;\r\n let localFileSize: number | undefined = undefined;\r\n\r\n // if file object is valid, obtain metadata from it\r\n // otherwise try to get file data from individual props in string format\r\n if (file && typeof file.name === \"string\") {\r\n localFileName = file.name;\r\n localFileType = file.type;\r\n localFileSize = file.size;\r\n } else if (name && typeof name === \"string\") {\r\n localFileName = name;\r\n localFileType = type;\r\n localFileSize = size;\r\n }\r\n return [localFileName, localFileType, localFileSize]\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}","import { getExt } from \"../utils/getExt\";\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\n export 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}","import { ValidateErrorLocalizerSelector } from \"../localization\";\r\nimport { ExtFile, FunctionLabel, Localization, LocalLabels } from \"../types\";\r\nimport { ValidateFileResponse, FileValidatorProps } from \"../types/validation\";\r\nimport { FileIdGenerator } from \"../utils/IdGenerator\";\r\nimport { separateAccept } from \"./separateAccept\";\r\nimport { validateAccept } from \"./validateAccept\";\r\n\r\n/**\r\n * \r\n * @param preValidatedFiles FileList \r\n * @param remainingValids The number of remaining valid files\r\n * @param localValidator \r\n * @param validator \r\n * @param maxFiles \r\n * @param localization \r\n * @returns \r\n */\r\nexport const fileListvalidator = (\r\n preValidatedFiles: FileList,\r\n remainingValids: number,\r\n localValidator: FileValidatorProps,\r\n validator: ((f: File) => ValidateFileResponse) | undefined,\r\n maxFiles?: number,\r\n localization?: Localization\r\n): ExtFile[] => {\r\n const output: ExtFile[] = [];\r\n //set a countdown when there is a limit on files\r\n let countdown: number = remainingValids;\r\n // get localized labels\r\n const ValidationErrorLocalizer: LocalLabels =\r\n ValidateErrorLocalizerSelector(localization);\r\n //Iterate the File list\r\n for (let i = 0, f: File; (f = preValidatedFiles[i]); i++) {\r\n // Validate the file list with\r\n let validatedFile: ExtFile = validateFile(f, validator, localValidator, ValidationErrorLocalizer);\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 = ValidationErrorLocalizer.maxFileCount as FunctionLabel;\r\n validatedFile.errors = validatedFile.errors\r\n ? [...validatedFile.errors, maxFileErrorMessenger(maxFiles || Infinity)]\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\r\n\r\n/**\r\n * For each ExtFile sets the valid prop of ExtFile to \"true\" or \"false\"\r\n * depending on the result of the individual validation. \r\n * It also add the list of errors.\r\n * @param extFileList \r\n * @param remainingValids \r\n * @param localValidatorProps \r\n * @param validator \r\n * @param maxFiles \r\n * @param localization \r\n * @returns a new ExtFile list with each item validated\r\n */\r\nexport const validateExtFileList = (\r\n extFileList: ExtFile[],\r\n remainingValids: number,\r\n localValidatorProps: FileValidatorProps,\r\n validator: ((f: File) => ValidateFileResponse) | undefined,\r\n maxFiles: number | undefined,\r\n localization?: Localization\r\n): ExtFile[] => {\r\n //console.log(\"remaning valids\", remainingValids);\r\n let fileListResult: ExtFile[] = [];\r\n if (!remainingValids) return fileListResult;\r\n let remaining: number = remainingValids;\r\n const ValidationErrorLocalizer: LocalLabels =\r\n ValidateErrorLocalizerSelector(localization);\r\n const maxFileErrorMessenger: FunctionLabel = ValidationErrorLocalizer.maxFileCount as FunctionLabel;\r\n for (let i = 0; i < extFileList.length; i++) {\r\n let currentExtFile: ExtFile = extFileList[i];\r\n\r\n currentExtFile = validateExtFile(currentExtFile, validator, localValidatorProps, ValidationErrorLocalizer);\r\n //console.log(\"validateExtFileList after validation\", currentExtFile);\r\n\r\n if (currentExtFile.valid) {\r\n //not valid due to file count limit\r\n const valid = remaining > 0;\r\n currentExtFile.valid = valid;\r\n //add error about amount\r\n if (!valid) {\r\n currentExtFile.errors = currentExtFile.errors\r\n ? [...currentExtFile.errors, maxFileErrorMessenger(maxFiles || Infinity)]\r\n : [maxFileErrorMessenger(maxFiles || Infinity)];\r\n }\r\n remaining--;\r\n }\r\n fileListResult.push(currentExtFile);\r\n\r\n }\r\n return fileListResult;\r\n}\r\n\r\n/**\r\n * \r\n * @param extFile \r\n * @param validator \r\n * @param validatorProps \r\n * @param localErrors \r\n * @returns \r\n */\r\nexport const validateExtFile = (\r\n extFile: ExtFile,\r\n validator: undefined | ((f: File) => ValidateFileResponse),\r\n validatorProps: FileValidatorProps,\r\n localErrors: LocalLabels\r\n): ExtFile => {\r\n let extFileResult: ExtFile = { ...extFile };\r\n let errors: string[] = [];\r\n //TO-DO: Add extra validation for individual props even if FIle object was not given\r\n if (!extFile.file) {\r\n return { ...extFileResult }\r\n }\r\n\r\n //TO-DO: add \"overrideValidation\" prop to ignore the rest of validators like accept and maxFileSize\r\n if (validator) {\r\n const resultCustomValidation: ValidateFileResponse = validator(extFileResult.file as File);\r\n const { errors: errorsResult } = resultCustomValidation;\r\n if (errorsResult)\r\n errors.push(...errorsResult)\r\n //return { ...extFileResult, ...validator(extFileResult.file as File) };\r\n }\r\n\r\n const { maxFileSize, accept } = validatorProps;\r\n //console.log(\"Validation\", maxFileSize, accept);\r\n //check file size\r\n const file: File = extFile.file;\r\n\r\n\r\n if (maxFileSize && file.size > maxFileSize) {\r\n const maxFileSizeErrorMessenger: FunctionLabel = localErrors.maxSizeError as FunctionLabel;\r\n\r\n //console.log(\"Size error\", maxFileSizeErrorMessenger(maxFileSize));\r\n\r\n errors.push(maxFileSizeErrorMessenger(maxFileSize));\r\n }\r\n //check file type\r\n if (accept && !validateAccept(separateAccept(accept), file)) {\r\n errors.push(localErrors.acceptError as string);\r\n }\r\n const isValid: boolean = errors.length === 0;\r\n extFileResult = { ...extFileResult, valid: isValid, errors: !isValid ? errors : undefined };\r\n //console.log(\"validation extFileResult\", extFileResult);\r\n return extFileResult;\r\n\r\n}\r\n\r\n\r\n\r\n/**\r\n * Function that validate whether a file is valid, or not\r\n * according to the Filevalidator properties\r\n * @param file a File object to be evaluated\r\n * @param validatorProps the validator object \r\n * @returns a FileValidated object\r\n */\r\nexport const validateFile = (\r\n file: File,\r\n validator: undefined | ((f: File) => ValidateFileResponse),\r\n validatorProps: FileValidatorProps,\r\n localErrors: LocalLabels\r\n): ExtFile => {\r\n\r\n const idGenerated = FileIdGenerator.getNextId();\r\n let errors: string[] = [];\r\n if (validator) {\r\n return { id: idGenerated, file, ...validator(file) };\r\n }\r\n\r\n const { maxFileSize, accept } = validatorProps;\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: ExtFile = {\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\n * list of dumy errors in english\r\n */\r\nexport const listOfErrors: string[] =\r\n [\r\n \"File is too big. Max file size allowed is 80mb.\",\r\n \"File's type is not allowed.\",\r\n \"Max amount of files (28) has been reached.\"\r\n ];","import { ExtFile, UPLOADSTATUS } from \"../types\";\r\nimport { FileIdGenerator, getRandomInt } from \"../utils\";\r\nimport { getRandomUploadStatus, listOfErrors } from \"../validation\";\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\n export const makeSyntheticExtFile = (\r\n file?: File ,\r\n valid = (Math.ceil(Math.random() * 28) % 2 === 0),\r\n uploadStatus?: UPLOADSTATUS,\r\n uploadMessage?: string\r\n): ExtFile => {\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 \"error\": customUploadMessage = \"Upload failed. There was an error\"; break;\r\n case \"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: ExtFile = {\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","import { UPLOADSTATUS } from \"../types\";\r\nimport { getRandomInt } from \"../utils/randomInt\";\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\n export const getRandomUploadStatus = (): UPLOADSTATUS | undefined => {\r\n const result: number = getRandomInt(0, 4);\r\n switch (result) {\r\n case 0: return \"error\";\r\n case 1: return \"uploading\";\r\n case 2: return \"success\";\r\n default:\r\n return undefined;\r\n }\r\n}","import { createSyntheticFile } from \"../synthetic-file\"\r\nimport { ExtFile } from \"../types\"\r\nimport { FileIdGenerator } from \"../utils\"\r\nimport { listOfErrors } from \"../validation\"\r\n\r\nexport const extFileMock = (id?: number): ExtFile => {\r\n return {\r\n id: id || FileIdGenerator.getNextId(),\r\n name: \"fileName.ext\",\r\n size: 28 * 1024 * 1024,\r\n type: \"files-ui/mock\",\r\n file: createSyntheticFile(\"fileName.ext\", 28 * 1024 * 1024, \"files-ui/mock\"),\r\n errors: listOfErrors,\r\n uploadMessage: \"uploaded\",\r\n uploadStatus: \"preparing\",\r\n valid: false,\r\n progress: 28,\r\n xhr: new XMLHttpRequest(),\r\n extraData: {\r\n extraData1: \"files-ui is the best\",\r\n extraData2: {\r\n id: 1,\r\n name: \"files-ui.mock\"\r\n },\r\n deleted: true\r\n },\r\n downloadUrl: \"https://www.files-ui.com/mock/file-download\"\r\n }\r\n}","export default function addExtraData(\r\n formData: FormData,\r\n extraData: Record<string, string> | undefined\r\n) {\r\n //headers\r\n const extraDataKeys: string[] = Object.keys(extraData || {});\r\n //const headerValues: string[] = Object.values(headers);\r\n for (let i = 0; i < extraDataKeys.length && extraData; i++) {\r\n //console.log(\"uploadFile extraData\", extraDataKeys[i], extraData[extraDataKeys[i]]);\r\n formData.append(extraDataKeys[i], extraData[extraDataKeys[i]]);\r\n }\r\n\r\n formData.append(\"otherValue\", \"HAAAAAAAAAAAAAAa\");\r\n\r\n}","export default function addHeaders(\r\n xhr: XMLHttpRequest,\r\n headers: Record<string, string> | undefined\r\n) {\r\n //headers\r\n const headerKeys: string[] = Object.keys(headers || {});\r\n //const headerValues: string[] = Object.values(headers);\r\n for (let i = 0; i < headerKeys.length && headers; i++) {\r\n //console.log(\"uploadFile headers\", headerKeys[i], headers[headerKeys[i]]);\r\n xhr.setRequestHeader(\r\n headerKeys[i],\r\n headers[headerKeys[i]]\r\n );\r\n }\r\n\r\n\r\n}","import { ExtFile, UploadResponse } from \"../types\";\r\n\r\nexport const TIMEOUT_ERROR_RESPONSE = {\r\n success: false,\r\n message: \"Timeout error\",\r\n payload: {}\r\n};\r\nexport const ABORTED_ERROR_RESPONSE = {\r\n success: false,\r\n message: \"Upload aborted\",\r\n payload: {}\r\n}\r\nexport const JSON_PARSE_ERROR_RESPONSE = {\r\n success: false,\r\n message: \"Error when parsing JSON response\",\r\n payload: {}\r\n}\r\n\r\nexport const UNEXPECTED_ERROR_RESPONSE = {\r\n success: false,\r\n message: \"Unexpected error\",\r\n payload: {}\r\n}\r\n\r\nexport const NO_XHR_PROVIDED_ERROR = (extFile: ExtFile): ExtFile => {\r\n return {\r\n\r\n ...extFile,\r\n uploadMessage: \"Unable to upload. xhr object was not provided\",\r\n uploadStatus: \"error\",\r\n\r\n serverResponse: { success: false, }\r\n }\r\n}","import { ExtFile, ServerResponse, UploadResponse } from \"../types\";\r\nimport { JSON_PARSE_ERROR_RESPONSE } from \"./errors.upload\";\r\n\r\nexport const makeServerResponse = (success: any, message: string, payload: any): ServerResponse => {\r\n const result: ServerResponse = { success: success, message: message, payload: payload } as ServerResponse;\r\n return result;\r\n}\r\nexport const JsonParseResponse = (xhr: XMLHttpRequest): ServerResponse => {\r\n try {\r\n const jsonResponse = JSON.parse(xhr.response);\r\n const success: any = jsonResponse.success;\r\n const message: string = jsonResponse.message;\r\n const payload: any = jsonResponse.payload;\r\n\r\n const fuiResponse: ServerResponse = {\r\n success: typeof success === \"boolean\" ? success : false,\r\n message: typeof message === \"string\" ? message : \"Error on message response\",\r\n payload: payload || {}\r\n }\r\n return fuiResponse\r\n } catch (error) {\r\n //console.log(\"FuiUpload ERROR\", error);\r\n return JSON_PARSE_ERROR_RESPONSE;\r\n }\r\n}\r\n\r\n\r\n\r\nexport const makeSuccessUploadResponse = (\r\n extFile: ExtFile,\r\n responseFui: ServerResponse\r\n): ExtFile => {\r\n return {\r\n ...extFile,\r\n serverResponse: responseFui,\r\n uploadMessage: responseFui.message,\r\n uploadStatus: \"success\"\r\n\r\n }\r\n}\r\n\r\n\r\nexport const makeErrorUploadResponse = (\r\n extFile: ExtFile,\r\n responseFui: ServerResponse\r\n): ExtFile => {\r\n //console.log(\"makeErrorUploadResponse\", extFile, responseFui);\r\n return {\r\n ...extFile,\r\n uploadMessage: responseFui.message,\r\n uploadStatus: \"error\", \r\n serverResponse: responseFui,\r\n }\r\n}\r\n\r\n","import { ExtFile, Method, UPLOADSTATUS } from \"../types\";\r\nimport { ServerResponse, UploadResponse } from \"../types/uploadTypes\";\r\nimport addExtraDataUpload from \"./addExtraData.upload\";\r\nimport addHeaders from \"./addheaders.upload\";\r\nimport { ABORTED_ERROR_RESPONSE, NO_XHR_PROVIDED_ERROR, TIMEOUT_ERROR_RESPONSE, UNEXPECTED_ERROR_RESPONSE } from \"./errors.upload\";\r\nimport { JsonParseResponse, makeErrorUploadResponse, makeSuccessUploadResponse } from \"./response.upload\";\r\nimport { completeUploadResult, unableToUploadResult } from \"./utils.upload\";\r\n\r\n\r\n/**\r\n * Uploads one formData object to a given endpoint in a promisified way\r\n * @param xhr XMLHTTPrequest object\r\n * @param method method for uploading\r\n * @param endpoint endpoint to upload the file\r\n * @param data FromData object to perform multipart form data upload\r\n * @param headers the set of headers\r\n * @returns a server response that consists on {status, payload, message}\r\n */\r\nexport const uploadFormData = (\r\n xhr: XMLHttpRequest,\r\n method: Method | undefined = \"POST\",\r\n endpoint: string,\r\n data: FormData,\r\n headers: Record<string, string> | undefined\r\n) => {\r\n return new Promise<ServerResponse>((resolve, reject) => {\r\n //console.log(\"Fui_uploadFormData uploadFile\", xhr, method, endpoint, data, headers);\r\n\r\n const finalMethod: Method = [\"POST\", \"PUT\", \"PATCH\"].includes(method.toUpperCase()) ? method : \"POST\";\r\n\r\n let lastLastState: number = -1;\r\n let lastState: number = 0;\r\n let jumped: boolean = false;\r\n\r\n xhr.upload.onload = () => {\r\n //console.log(\"Fui_uploadFormData uploadFile onLoad\", xhr.readyState, xhr.response);\r\n };\r\n xhr.upload.ontimeout = () => resolve(TIMEOUT_ERROR_RESPONSE);\r\n xhr.upload.onabort = () => {\r\n //console.log(\"Fui_uploadFormData ABORTEEEEDDDD\");\r\n resolve(ABORTED_ERROR_RESPONSE);\r\n };\r\n xhr.onloadend = async (e) => {\r\n //console.log(\"onloadend loaded\", e.loaded);\r\n //console.log(\"onloadend total\", e.total);\r\n //console.log(\"onloadend lengthComputable\", e.lengthComputable);\r\n\r\n }\r\n // listen for `progress` event\r\n //currently listening on FileItem component hook\r\n xhr.onreadystatechange = async (e) => {\r\n //console.log(\"Finished\", xhr);\r\n\r\n //console.log(\"Fui_uploadFormData uploadFile onreadystatechange e.type\", e.type);\r\n //console.log(\"Fui_uploadFormData uploadFile onreadystatechange\", xhr.readyState, xhr.response);\r\n\r\n lastLastState = lastState;\r\n lastState = xhr.readyState;\r\n\r\n if (xhr.readyState === 4) {\r\n if (xhr.response !== \"\") {\r\n //there is th answer\r\n resolve(JsonParseResponse(xhr));\r\n } else {\r\n //error unexpected\r\n // console.log(\"Fui_uploadFormData EMPTY status\", xhr.status);\r\n // console.log(\"Fui_uploadFormData EMPTY readyState\", xhr.readyState);\r\n // console.log(\"Fui_uploadFormData EMPTY upload\", xhr.upload);\r\n //console.log(\"Fui_uploadFormData EMPTY abort\", xhr.abort);\r\n //const jumped = lastLastState - lastLastState !== 1;\r\n resolve(ABORTED_ERROR_RESPONSE);\r\n\r\n }\r\n } else {\r\n //console.log(\"Fui_uploadFormData FuiUpload NOT YET\" + xhr.readyState);\r\n }\r\n };\r\n // open request\r\n xhr.open(finalMethod, endpoint, true);\r\n\r\n //add header to request\r\n addHeaders(xhr, headers);\r\n //start uploading\r\n xhr.send(data);\r\n });\r\n\r\n};\r\n\r\n/**\r\n * \r\n * @param file the extended file to be uploaded\r\n * @param url the endpoint\r\n * @param method the method for uploading\r\n * @param headers headers for request\r\n * @returns \r\n */\r\nexport const uploadExtFile = async (\r\n extFile: ExtFile,\r\n url: string,\r\n method?: Method,\r\n headers?: Record<string, string>,\r\n uploadLabel?: string,\r\n): Promise<ExtFile> => {\r\n return new Promise(async (resolve, reject) => {\r\n try {\r\n const uploader: XMLHttpRequest | undefined = extFile.xhr;\r\n\r\n if (!uploader) {\r\n resolve(NO_XHR_PROVIDED_ERROR(extFile));\r\n return;\r\n }\r\n\r\n const localMethod: Method = method || \"POST\";\r\n const fileToUpload: File = extFile.file as File;\r\n\r\n const formData = new FormData();\r\n\r\n formData.append(uploadLabel || \"file\", fileToUpload);\r\n\r\n // add extra data to upload\r\n const finalExtraData: Record<string, any> =\r\n { otherValue: \"other valueee haaaa\", param2: { tecnica: \"KIKOHUUUU\", friend: \"Chaos\", age: 25 }, ...extFile.extraUploadData };\r\n\r\n addExtraDataUpload(formData, finalExtraData);\r\n //console.log(\"FORMDATA\", formData);\r\n\r\n let responseFui: ServerResponse;\r\n responseFui = await uploadFormData(\r\n uploader,\r\n localMethod,\r\n url,\r\n formData,\r\n headers || {});\r\n\r\n if (responseFui.success) {\r\n // status is true\r\n resolve(makeSuccessUploadResponse(extFile, responseFui));\r\n } else {\r\n // status is false\r\n resolve(makeErrorUploadResponse(extFile, responseFui));\r\n }\r\n } catch (error) {\r\n // on error\r\n //console.log(\"uploadPromiseXHR uploadPromiseXHR ERROR\", error);\r\n resolve(\r\n makeErrorUploadResponse(extFile, UNEXPECTED_ERROR_RESPONSE)\r\n );\r\n }\r\n });\r\n};\r\n\r\n\r\n\r\n\r\nexport function uploadFile(\r\n file: File,\r\n url: string,\r\n method?: Method,\r\n label?: string,\r\n headers?: Record<string, string>\r\n): Promise<ServerResponse> {\r\n return new Promise(async (resolve, reject) => {\r\n\r\n\r\n //start uploading\r\n const formData = new FormData();\r\n\r\n formData.append(label || \"file\", file);\r\n\r\n try {\r\n const serverResponse: ServerResponse = await uploadFormData(new XMLHttpRequest(), method, url, formData, headers);\r\n resolve(serverResponse);\r\n } catch (error) {\r\n // on error\r\n //console.log(\"uploadPromiseXHR uploadPromiseXHR ERROR\", error);\r\n resolve(UNEXPECTED_ERROR_RESPONSE);\r\n }\r\n });\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * @deprecated\r\n * Uploads one formData object to a given endpoint in a promisified way\r\n * @param xhr XMLHTTPrequest object\r\n * @param method method for uploading\r\n * @param endpoint endpoint to upload the file\r\n * @param data FromData object to perform multipart form data\r\n * @param headers the set of headers\r\n * @returns a dui server response that consists on {success, payload, message}\r\n */\r\nexport const FuiUpload = (\r\n xhr: XMLHttpRequest,\r\n method: Method,\r\n endpoint: string,\r\n data: FormData,\r\n headers: Record<string, string>\r\n) => {\r\n return new Promise<ServerResponse>((resolve, reject) => {\r\n //console.log(\"FuiUpload params\", xhr, method, endpoint, data, headers);\r\n\r\n xhr.upload.onload = () => {\r\n //console.log(\"FuiUpload onLoad\", xhr.readyState, xhr.response);\r\n };\r\n\r\n xhr.upload.ontimeout = () => resolve(TIMEOUT_ERROR_RESPONSE);\r\n xhr.upload.onabort = () => resolve(ABORTED_ERROR_RESPONSE);\r\n\r\n // listen for `progress` event\r\n //currently listening on FileMosaic component hook\r\n\r\n xhr.onreadystatechange = async (e) => {\r\n //console.log(\"Finished\", xhr);\r\n //console.log(\"FuiUpload onreadystatechange\", xhr.readyState, xhr.response, xhr);\r\n\r\n if (xhr.readyState === 4) {\r\n if (xhr.response !== \"\") {\r\n //there is th answer\r\n resolve(JsonParseResponse(xhr));\r\n } else {\r\n //error unexpected\r\n resolve(UNEXPECTED_ERROR_RESPONSE);\r\n }\r\n } else {\r\n //console.log(\"FuiUpload NOT YET\" + xhr.readyState);\r\n }\r\n };\r\n // open request\r\n xhr.open(method, endpoint, true);\r\n const headerKeys: string[] = Object.keys(headers);\r\n //const headerValues: string[] = Object.values(headers);\r\n for (let i = 0; i < headerKeys.length; i++) {\r\n //console.log(\"FuiUpload headers\", headerKeys[i], headers[headerKeys[i]]);\r\n xhr.setRequestHeader(\r\n headerKeys[i],\r\n headers[headerKeys[i]]\r\n );\r\n }\r\n //start uploading\r\n xhr.send(data);\r\n });\r\n\r\n};\r\n\r\n\r\n","\r\nimport { ExtFile, ExtFileInstance, ServerResponse, UploadResponse, UPLOADSTATUS } from \"../types\"\r\n\r\nexport const unexpectedErrorUploadResult = (extFile: ExtFile): ExtFile => {\r\n return {\r\n ...extFile,\r\n uploadMessage: \"Unexpected error\",\r\n uploadStatus: \"error\",\r\n serverResponse: {\r\n success: false,\r\n message: \"Error on upload: unexpected error \",\r\n payload: {},\r\n }\r\n }\r\n}\r\nexport const unableToUploadResult = (\r\n extFile: ExtFile\r\n): UploadResponse => {\r\n return {\r\n id: extFile.id,\r\n uploadedFile: {\r\n ...extFile,\r\n uploadMessage: \"Unable to upload. XHR was not provided\",\r\n uploadStatus: \"error\"\r\n },\r\n serverResponse: {\r\n success: false,\r\n message: \"Error on upload: Unable to upload. XHR was not provided \",\r\n payload: {},\r\n }\r\n }\r\n}\r\nexport const completeUploadResult = (\r\n extFile: ExtFile,\r\n serverResponse: ServerResponse,\r\n uploadStatusresult: UPLOADSTATUS\r\n): UploadResponse => {\r\n return {\r\n id: extFile.id,\r\n uploadedFile: {\r\n ...extFile,\r\n uploadMessage: serverResponse.message,\r\n uploadStatus: uploadStatusresult\r\n },\r\n serverResponse: serverResponse\r\n }\r\n}\r\n\r\n/**\r\n * Initializes the xhr attribute for performing uploads\r\n * @param extFileList the list of extended files\r\n * @returns the array of extFiles with the xhr attribute initialized\r\n */\r\nexport const toUploadableExtFileList = (\r\n extFileList: ExtFile[] | ExtFileInstance[]\r\n): ExtFile[] => {\r\n if (!extFileList) return [];\r\n return extFileList.map(extFile => {\r\n return { ...extFile, xhr: new XMLHttpRequest() }\r\n });\r\n}\r\n\r\n/**\r\n * Updates the uploadStatus of the given extFile \r\n * from \"preparing\" to \"uploading\"\r\n * @param extFile the extended file\r\n * @returns the extended file with uploadStatus updated to \"uploading\"\r\n */\r\nexport const instantPreparingToUploadOne = (\r\n extFile: ExtFileInstance | ExtFile\r\n): ExtFileInstance | ExtFile => {\r\n if (extFile.uploadStatus === \"preparing\") {\r\n //for ExtFile instance\r\n extFile.uploadStatus = \"uploading\";\r\n //for ExtFile type\r\n return {\r\n ...extFile,\r\n uploadStatus: \"uploading\",\r\n };\r\n }\r\n return extFile;\r\n};\r\n\r\n/**\r\n * \r\n * @param extFile the extended file\r\n * @returns \r\n */\r\nexport const preparingToUploadOne = (\r\n extFile: ExtFileInstance | ExtFile\r\n): Promise<ExtFileInstance | ExtFile> => {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n if (extFile.uploadStatus === \"preparing\") {\r\n //for ExtFile instance\r\n extFile.uploadStatus = \"uploading\";\r\n //for ExtFile type\r\n resolve({\r\n ...extFile,\r\n uploadStatus: \"uploading\",\r\n });\r\n } else\r\n resolve(extFile);\r\n }, 1500);\r\n });\r\n};\r\n/**\r\n * Sleeps for 1200 miliseconds for showing a better transition\r\n * on uploading\r\n * @param time the time to sleep in miliseconds\r\n * @returns true is everything is ok\r\n */\r\nexport const sleepTransition = (time = 1500\r\n): Promise<boolean> => {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve(true);\r\n }, time);\r\n });\r\n}\r\n/**\r\n * Removes the deleted files and updates the aborted ones with a message\r\n * @param arrExtFile incomming arr of extFle instances\r\n * @returns an array of ExtFle objects\r\n */\r\nexport const sanitizeArrExtFile = (arrExtFile: ExtFileInstance[]): ExtFile[] => {\r\n \r\n return arrExtFile.filter((extFileInstance: ExtFileInstance) =>\r\n !extFileInstance.extraData?.deleted)\r\n\r\n .map((extFileInstance: ExtFileInstance) => {\r\n if (extFileInstance.uploadStatus === \"aborted\"\r\n && !extFileInstance.uploadMessage) {\r\n // TO-DO: ad localization for this message\r\n extFileInstance.uploadMessage = \"Upload aborted by user\";\r\n //extFileInstance.uploadStatus = \"error\";\r\n }\r\n return ExtFileInstance.toExtFile(extFileInstance) as ExtFile\r\n });\r\n}\r\n/**\r\n * \r\n * @param extFileInstance \r\n * @param extFileobj \r\n */\r\nexport const setNextUploadStatus = (\r\n extFileInstance: ExtFileInstance,\r\n extFileobj: ExtFile) => {\r\n\r\n const prevStatus: UPLOADSTATUS | undefined = extFileInstance.uploadStatus;\r\n const nextStstaus: UPLOADSTATUS | undefined = extFileobj.uploadStatus;\r\n\r\n //console.log(\"setNextUploadStatus\", prevStatus, nextStstaus);\r\n //console.log(\"setNextUploadStatus\", extFileInstance.uploadMessage, extFileobj.uploadMessage);\r\n if (\r\n prevStatus === \"preparing\" &&\r\n [\"aborted\", undefined].includes(nextStstaus)\r\n ) {\r\n extFileInstance.uploadStatus = undefined;\r\n extFileInstance.uploadMessage = extFileobj.uploadMessage;\r\n\r\n } else if (\r\n prevStatus === \"uploading\" &&\r\n [\"aborted\", undefined].includes(nextStstaus)\r\n ) {\r\n extFileInstance.uploadStatus = \"aborted\";\r\n extFileInstance.uploadMessage = extFileobj.uploadMessage;\r\n\r\n }\r\n\r\n}\r\n\r\n","import { NamedColor } from \"../types/NamedColor\";\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\nexport const NAMED_COLORS: NamedColor =\r\n{\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}","import { NAMED_COLORS } from \"./namedColors\";\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\nexport const darkerColor = (colorInput: string, percentage = 25): string => {\r\n let darkedColor = \"\";\r\n const reduce = (100 - percentage) / 100;\r\n let component1: number = 0;\r\n let component2: number = 0;\r\n let component3: number = 0;\r\n if (isHexColor(colourNameToHex(colorInput))) {\r\n\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\r\n darkedColor = `rgb(${component1 * reduce}, ${component2 * reduce},${component3 * reduce})`;\r\n } else {\r\n if (colorInput.includes(\"rgba\")) {\r\n let slicer = colorInput.replace(\"rgba(\", \"\");\r\n let components: string[] = 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 } else if (colorInput.includes(\"rgb\")) {\r\n\r\n let slicer = colorInput.replace(\"rgb(\", \"\");\r\n let components: string[] = 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\r\n return darkedColor;\r\n}\r\n/**\r\n * Make the color into a brighted color\r\n * @param colorInput \r\n * @returns the brighted color \r\n */\r\nexport const brighterColor = (colorInput: string, percentage = 25): string => {\r\n let brightedColor = \"\";\r\n const increase = (100 + percentage) / 100;\r\n let component1: number = 0;\r\n let component2: number = 0;\r\n let component3: number = 0;\r\n if (isHexColor(colourNameToHex(colorInput))) {\r\n\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\r\n brightedColor = `rgb(${component1 * increase}, ${component2 * increase},${component3 * increase})`;\r\n } else {\r\n if (colorInput.includes(\"rgba\")) {\r\n let slicer = colorInput.replace(\"rgba(\", \"\");\r\n let components: string[] = slicer.split(\",\");\r\n brightedColor = `rgb(${parseInt(components[0], 10) * increase}, ${parseInt(components[1], 10) * increase},${parseInt(components[2], 10) * increase})`;\r\n //return darkedColor;\r\n } else if (colorInput.includes(\"rgb\")) {\r\n\r\n let slicer = colorInput.replace(\"rgb(\", \"\");\r\n let components: string[] = slicer.split(\",\");\r\n brightedColor = `rgb(${parseInt(components[0], 10) * increase}, ${parseInt(components[1], 10) * increase},${parseInt(components[2], 10) * increase})`;\r\n // return darkedColor;\r\n }\r\n }\r\n\r\n return brightedColor;\r\n}\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\nexport const hexColorToRGB = (colorInput: string | undefined, perc = 0, defaultColor?: string): string => {\r\n let resultDefault: string = 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 const color: string = colorInput.toUpperCase();\r\n // is already a rgba color\r\n if (color.includes(\"RGBA\")) {\r\n return color;\r\n }\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\r\n // if is a hex color or named color\r\n if (!isHexColor(colourNameToHex(color))) {\r\n return resultDefault;\r\n }\r\n let resultOk: string = \"\";\r\n //let strVar: string = \"\";\r\n let component1: number = 0;\r\n let component2: number = 0;\r\n let component3: number = 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/**\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\nexport const isHexColor = (colorInput: string): boolean => {\r\n\r\n // if first element is no '#' return default background color\r\n if (colorInput.charAt(0) !== '#') {\r\n\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\r\n\r\n return false;\r\n }\r\n // if one of the letters is not included in hex array return default\r\n for (let i = 1; i < colorInput.length; i++) {\r\n if (!hexArray.includes(colorInput.charAt(i))) {\r\n\r\n\r\n return false;\r\n }\r\n }\r\n\r\n return true;\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\nexport function colourNameToHex(colour: string | undefined): string {\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 (NAMED_COLORS[colour.toLocaleLowerCase()] !== undefined) {\r\n return NAMED_COLORS[colour.toLocaleLowerCase()];\r\n }\r\n /**\r\n * When the named color was not found\r\n */\r\n\r\n return colour;\r\n}\r\n\r\n/**\r\n * hexArray & decArray\r\n * \r\n * arrays of numbers used to convert hexadecimal numbers into decimal and viceversa\r\n */\r\nconst hexArray = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];\r\nconst decArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];\r\n\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\nexport const hexTodec = (letter: string): number => {\r\n if (hexArray.includes(letter)) {\r\n return decArray[hexArray.indexOf(letter)];\r\n } else {\r\n return 0;\r\n }\r\n}\r\n\r\n\r\n/** \r\n * Asure a base color. 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\nexport const asureColor = (color?: string): string => {\r\n if (color !== undefined && color !== \"\") {\r\n return color;\r\n } else {\r\n return DEFAULT_FONT_COLOR;\r\n }\r\n}\r\n/** \r\n * Asure a base color. 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\nexport const completeAsureColor = (color?: string, perc = 1): string => {\r\n\r\n return hexColorToRGB(asureColor(colourNameToHex(color)), perc);\r\n\r\n}\r\n\r\n\r\n\r\nexport const DEFAULT_FONT_COLOR = \"#646c7f\";","import { ExtFile, ExtFileInstance, ExtFileManager } from \"../types\";\r\n\r\nexport const extFileReconcilation = (\r\n dropzoneId: number | string | undefined,\r\n extFileIncomming: ExtFile[]\r\n): ExtFile[] | undefined => {\r\n let result: ExtFile[] = [];\r\n\r\n let arrOfExtFiles: ExtFileInstance[] | undefined =\r\n ExtFileManager.getExtFileInstanceList(dropzoneId);\r\n\r\n // continue only if arrOfExtFiles exists\r\n if (arrOfExtFiles) {\r\n //different sizes means there was deleted files\r\n //also can be new files to be uploaded\r\n //needed an extra flag to allow add files in the middle of uploading process\r\n // if new files are added, they are added to the Manager\r\n // outside they were already added to the UI\r\n // inside Dropzone, will be needed a .next() method for manager\r\n\r\n // 1st allow deleted files and ignore new ones\r\n // reduce the arrOfExtFileInstances array\r\n // parecido a listas ligadas, iterar hasta encontrar null XD\r\n let incommingTemp: ExtFile[] = [...extFileIncomming];\r\n incommingTemp = incommingTemp.filter(\r\n (F) => arrOfExtFiles?.findIndex(I => I.id === F.id) === -1\r\n );\r\n\r\n //console.log(\"reconciliation incommingTemp\", incommingTemp);\r\n \r\n\r\n //different sizes not allowed\r\n if (arrOfExtFiles.length !== extFileIncomming.length || extFileIncomming.length === 0) {\r\n return undefined;\r\n }\r\n for (let i = 0; i < arrOfExtFiles.length; i++) {\r\n if (\r\n (extFileIncomming[i].uploadStatus === undefined)\r\n &&\r\n (arrOfExtFiles[i].uploadStatus === \"preparing\")\r\n ) {\r\n //console.log(\"useDropzoneFileListUpdater onCancel i\", i);\r\n arrOfExtFiles[i].uploadStatus = undefined;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n}"],"names":["fileSizeFormater","fileSize","toFixed","DropzoneItalian","defaultLabel","uploadingMessage","amountOfFiles","uploadFinished","uploaded","rejected","concat","noFilesMessage","footer","acceptAll","acceptCustom","accept","header","uploadFilesMessage","maxSizeMessage","maxFileSize","validFilesMessage","numberOfValidFiles","maxFiles","fakeuploadsuccess","fakeUploadError","FileItemItalian","fullInfoLayer","name","size","type","status","preparing","uploading","success","valid","denied","error","aborted","ValidateErrorItalian","maxSizeError","maxSize","acceptError","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","includes","readAsDataURL","file","onProgress","onError","Promise","resolve","reject","reader_1","FileReader","onprogress","onerror","onload","result","undefined","readAsText","encoding","reader_2","readAsBinaryString","reader_3","readAsArrayBuffer","reader_4","resizeImage","base64Str","maxWidth","maxHeight","img_1","Image","src","canvas","document","createElement","MAX_WIDTH","MAX_HEIGHT","width","height","ctx","getContext","drawImage","toDataURL","process","env","NODE_ENV","console","getImageOrientation","imageSource","length","ev","sevenzip","aac","abw","accdb","avi","azw","bmp","bz","bz2","cda","csh","css","csv","docx","drawio","eot","epub","freearc","gif","gzip","html","icalendar","java","jar","javascript","jpeg","json","jsonld","midi","mp3","mp4","mpeg","mpkg","octet","odp","ods","odt","oga","ogv","ogx","opus","otf","pdf","php","png","pptx","psd","python","tar","rar","react","rtf","sass","sh","swf","text","tiff","ttf","typescript","vsd","vue","wav","webm","weba","webp","wma","wmv","woff","xlsx","xml","xul","zip","getExt","fileName","exec","DEF_GEN_MIME","audioSelector","tailMime","textSelector","imageSelector","fontSelector","videoSelector","applicationSelector","mimeSelector","mimeType","headerMime","split","extensionSelector","extension","genericMime","checkIsCode","getURLFileIco","customIcons","fallBack","url","mimeResume","mimeUrlList","extention","customUrl","arc","mp2t","xhtml","ExtFileInstance","extFile","id","imageUrl","errors","uploadMessage","uploadStatus","progress","xhr","extraData","extraUploadData","serverResponse","downloadUrl","videoUrl","this","toExtFile","extFileInstance","extFileClone","extFileInstanceKeys","Object","keys","extFileInstanceValues","values","i","currentValue","currKey","prototype","ExtFileManager","getNextId","nextId","setFileList","extFilesInstances","fileLists","__spreadArray","createFileListMap","removeFileListMap","getExtFileInstanceList","setFileListMapPreparing","dropzoneId","localFiles","validateFiles","cleanOnUpload","resultExtList","temLocalFiles","filter","map","__assign","F","setFileListMapPreparing2","createUploadConfig","method","headers","uploadLabel","cleanonUpload","SyntheticFile","createFile","File","defineProperty","get","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_x_mid","create_midi","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_3gp","create_3gp2","create_3gp_a","create_3gp_v","create_7z","create_python","create_java","create_react","create_vue","createFileListMiscelanious","listFile","push","createListOfMultiTypeFile","createSyntheticFile","FileIdGenerator","fileListToExtFileArray","fileList","extFileArray","f","fileListToExtFileInstanceArray","isValidateActive","validator","shrinkWord","word","card","newWord","slice","setPrepToUploading","setTimeout","uploadOne","sleepPreparing","preparingTime","prepToUploadOne","uploadOneExtFile","fakeFuiUpload","Math","floor","random","message","payload","getRandomInt","min","max","cleanInput","inputElement","value","addClassName","baseClassName","className","isUploadAbleExtFile","validateFilesFlag","getLocalFileItemData","localFileName","localFileType","localFileSize","separateAccept","acceptItem","trim","validateAccept","charAt","headerMimeFile","tailMimeFile","fileListvalidator","preValidatedFiles","remainingValids","localValidator","localization","output","countdown","ValidationErrorLocalizer","validatedFile","validateFile","maxFileErrorMessenger","Infinity","validateExtFileList","extFileList","localValidatorProps","fileListResult","remaining","currentExtFile","validateExtFile","validatorProps","localErrors","extFileResult","errorsResult","apply","maxFileSizeErrorMessenger","isValid","idGenerated","listOfErrors","makeSyntheticExtFile","ceil","newUpoadStatus","getRandomUploadStatus","customUploadMessage","randInt","extFileMock","XMLHttpRequest","extraData1","extraData2","deleted","addExtraData","formData","extraDataKeys","append","addHeaders","headerKeys","setRequestHeader","TIMEOUT_ERROR_RESPONSE","ABORTED_ERROR_RESPONSE","JSON_PARSE_ERROR_RESPONSE","UNEXPECTED_ERROR_RESPONSE","NO_XHR_PROVIDED_ERROR","makeServerResponse","JsonParseResponse","jsonResponse","JSON","parse","response","makeSuccessUploadResponse","responseFui","makeErrorUploadResponse","uploadFormData","endpoint","data","finalMethod","toUpperCase","upload","ontimeout","onabort","onloadend","e","__awaiter","onreadystatechange","readyState","open","send","uploadExtFile","uploader","localMethod","fileToUpload","FormData","finalExtraData","otherValue","param2","tecnica","friend","age","addExtraDataUpload","_a","uploadFile","label","_this","sent","FuiUpload","unexpectedErrorUploadResult","unableToUploadResult","uploadedFile","completeUploadResult","uploadStatusresult","toUploadableExtFileList","instantPreparingToUploadOne","preparingToUploadOne","sleepTransition","time","sanitizeArrExtFile","arrExtFile","setNextUploadStatus","extFileobj","prevStatus","nextStstaus","NAMED_COLORS","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","darkerColor","colorInput","percentage","darkedColor","reduce","component1","component2","component3","isHexColor","colourNameToHex","hexTodec","components","replace","parseInt","brighterColor","brightedColor","increase","hexColorToRGB","perc","defaultColor","resultDefault","color","hexArray","colour","toLocaleLowerCase","decArray","letter","indexOf","asureColor","DEFAULT_FONT_COLOR","completeAsureColor","extFileReconcilation","extFileIncomming","arrOfExtFiles","incommingTemp","findIndex","I"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.es.js","sources":["../src/utils/fileSizeFormatter.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","../src/reader/readers.ts","../src/reader/resizeImage.ts","../src/reader/imageOrientation.ts","../src/mime/icons.ts","../src/utils/getExt.ts","../src/mime/mime.ts","../src/types/ExtFile.ts","../src/types/ExtFileManager.ts","../src/types/UploadConfig.ts","../src/synthetic-file/SyntheticFile.ts","../src/utils/IdGenerator.ts","../src/utils/fileListParser.ts","../src/utils/dropzone.utils.ts","../src/utils/shrinkWord.ts","../src/utils/fakeupload.utils.ts","../src/utils/randomInt.ts","../src/utils/input.utils.ts","../src/utils/addClassName.ts","../src/utils/isUploadAbleExtFile.ts","../src/utils/getLocalFileItemData.ts","../src/validation/separateAccept.ts","../src/validation/validateAccept.ts","../src/validation/fileValidator.ts","../src/validation/fakeerros.ts","../src/synthetic-file/syntheticfileGenerator.ts","../src/validation/randomStatus.ts","../src/mocks/extFileMock.ts","../src/upload/addExtraData.upload.ts","../src/upload/addheaders.upload.ts","../src/upload/errors.upload.ts","../src/upload/response.upload.ts","../src/upload/upload.ts","../src/upload/utils.upload.ts","../src/color/namedColors.ts","../src/color/colors.ts","../src/file-manager/reconcilation.ts"],"sourcesContent":["/**\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\n export const fileSizeFormater = (fileSize?: number | false): string| undefined => {\r\n let result = \"\";\r\n if (!fileSize) {\r\n return undefined;\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}","import { fileSizeFormater } from \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"preparazione\",\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 aborted:\"Interrotto\"\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 \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"préparer\",\r\n uploading: \"En cours\",\r\n success: \"Succès\",\r\n valid: \"Valide\",\r\n denied: \"Refusé\",\r\n error: \"Erreur\",\r\n aborted:\"Interrompu\"\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}","import { fileSizeFormater } from \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"Preparing\",\r\n uploading: \"Uploading\",\r\n success: \"Success\",\r\n valid: \"Valid\",\r\n denied: \"Not valid\",\r\n error: \"Error\",\r\n aborted:\"Aborted\"\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 \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"Preparando\",\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 aborted: \"Anulado\"\r\n },\r\n}\r\n/**\r\n * Spanish translation for Validation Errors\r\n */\r\nexport 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 \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"подготовка\",\r\n uploading: \"Загрузка\",\r\n success: \"успех\",\r\n valid: \"годный\",\r\n denied: \"выкинутый\",\r\n error: \"ошибка\",\r\n aborted:\"прерванный\"\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 \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"Preparando\",\r\n uploading: \"Enviando\",\r\n success: \"Êxito\",\r\n valid: \"válido\",\r\n denied: \"Negado\",\r\n error: \"Erro\",\r\n aborted:\"Abortado\"\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}","import { LocalLabels } from \"../../types\";\r\nimport { fileSizeFormater } from \"../../utils/fileSizeFormatter\";\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 * Chinnese 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 preparing:\"预加载\",\r\n uploading: \"上传\",\r\n success: \"成功\",\r\n valid: \"接受的文件\",\r\n denied: \"被拒绝的文件\",\r\n error: \"错误\",\r\n aborted:\"中止\"\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}","import { fileSizeFormater } from \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\r\n\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 * Chinese 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 preparing: \"預加載\",\r\n uploading: \"上傳\",\r\n success: \"成功\",\r\n valid: \"有效文件\",\r\n denied: \"無效文件\",\r\n error: \"錯誤\",\r\n aborted: \"中止\"\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 \"../types\";\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 { 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\nimport { ComponentLocalizer, Localization, LocalLabels } from \"../types\";\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 \"./../types\";\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 if (!local || ![\"ES-es\", \"EN-en\", \"FR-fr\", \"IT-it\", \"PT-pt\", \"RU-ru\", \"ZH-cn\", \"ZH-hk\"].includes(local)) {\r\n return ValidateErrorLocalizer[\"EN-en\"];\r\n }\r\n return ValidateErrorLocalizer[local];\r\n}","/**\r\n * Reads an image (or other type) file as data URL in a promise way, \r\n * so you can use await.\r\n * It will return a string that contains the URL representation\r\n * @param file File or Blob object\r\n * @returns data URL of the file\r\n */\r\nexport const readAsDataURL = (file: File | Blob, onProgress?: Function, onError?: Function): Promise<string | undefined> => {\r\n return new Promise<string | undefined>((resolve, reject) => {\r\n try {\r\n const reader = new FileReader();\r\n reader.onprogress = () => {\r\n onProgress?.();\r\n }\r\n reader.onerror = function () {\r\n onError?.();\r\n }\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\r\n\r\n/**\r\n * Reads a file as Text 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 or Blob object\r\n * @param encoding The type of encoding such as \"base64\"\r\n * @returns data text of the file\r\n */\r\nexport const readAsText = (file: File | Blob, encoding?: string, onProgress?: Function, onError?: Function): 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.onprogress = () => {\r\n onProgress?.();\r\n }\r\n reader.onerror = function () {\r\n onError?.();\r\n }\r\n reader.readAsText(file, encoding ? encoding : \"base64\");\r\n } catch (error) {\r\n reject(undefined);\r\n }\r\n });\r\n}\r\n\r\n\r\n\r\n/**\r\n * Reads a file and return the raw binary data from the file. \r\n * @param file File or Blob object\r\n * @param encoding The type of encoding such as \"base64\"\r\n * @returns raw binary data of the file\r\n */\r\nexport const readAsBinaryString = (file: File | Blob, onProgress?: Function, onError?: Function): 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.onprogress = () => {\r\n onProgress?.();\r\n }\r\n reader.onerror = function () {\r\n onError?.();\r\n }\r\n reader.readAsBinaryString(file);\r\n } catch (error) {\r\n reject(undefined);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Reads a file and returns an ArrayBuffer representing the file's data \r\n * @param file File or blob object\r\n * @param encoding The type of encoding such as \"base64\"\r\n * @returns ArrayBuffer representation of the file\r\n */\r\nexport const readAsArrayBuffer = (file: File | Blob, onProgress?: Function, onError?: Function): 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.onprogress = () => {\r\n onProgress?.();\r\n }\r\n reader.onerror = function () {\r\n onError?.();\r\n }\r\n reader.readAsArrayBuffer(file);\r\n } catch (error) {\r\n reject(undefined);\r\n }\r\n });\r\n}","/**\r\n * Resize an image resolution given maxWidth and maxHeight\r\n * \r\n * Should be called with await\r\n * @param base64Str a string representation of an imae file\r\n * @param maxWidth the max width of he image\r\n * @param maxHeight the max height of he image\r\n * @returns the resized image\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: HTMLCanvasElement = document.createElement('canvas');\r\n const MAX_WIDTH: number = maxWidth;\r\n const MAX_HEIGHT: number = maxHeight;\r\n let width: number = img.width;\r\n let height: number = 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: CanvasRenderingContext2D | null = 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 if (process.env.NODE_ENV === \"development\") {\r\n console.error(\"An error ocurred when trying to make a thumnail\");\r\n }\r\n reject(undefined);\r\n }\r\n }\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.error(\"An error ocurred when trying to make a thumnail\");\r\n }\r\n reject(undefined);\r\n }\r\n });\r\n}\r\n\r\n","/**\r\n * Resize an image resolution given maxWidth and maxHeight\r\n * \r\n * Should be called with await\r\n * @param base64Str a string representation of an imae file\r\n * @param maxWidth the max width of he image\r\n * @param maxHeight the max height of he image\r\n * @returns the resized image\r\n */\r\nexport function getImageOrientation(\r\n imageSource: string | undefined,\r\n): Promise<\"landscape\" | \"portrait\"> {\r\n return new Promise((resolve, reject) => {\r\n //console.log(\"getImageOrientation imageSource\", imageSource);\r\n if (!imageSource || imageSource.length === 0) {\r\n // console.log(\"getImageOrientation rejected\", imageSource);\r\n\r\n reject(\"landscape\");\r\n return;\r\n }\r\n try {\r\n //console.log(\"getImageOrientation try ini\", imageSource);\r\n\r\n let img: HTMLImageElement = new Image();\r\n img.src = imageSource;\r\n img.onerror = (ev: string | Event) => {\r\n //console.log(\"getImageOrientation There was a ne error reading\", ev);\r\n reject(\"landscape\");\r\n }\r\n img.onload = () => {\r\n let width: number = img.width;\r\n let height: number = img.height;\r\n if (width > height) {\r\n resolve(\"landscape\");\r\n } else {\r\n resolve(\"portrait\");\r\n }\r\n }\r\n } catch (error) {\r\n //console.error(\"An error ocurred when trying to get the image orientation\");\r\n\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.error(\"An error ocurred when trying to get the image orientation\");\r\n }\r\n reject(\"landscape\");\r\n }\r\n });\r\n}\r\n\r\n","export 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\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\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\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\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 * Looks for the first file extension\r\n * @param fileName file name\r\n * @returns the file name extension\r\n */\r\n export 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};","import {\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 \"./icons\";\r\nimport { getExt } from \"../utils/getExt\";\r\nimport { IconsMap } from \"../types\";\r\n\r\nconst DEF_GEN_MIME: keyof IconsMap = \"octet\";\r\n/**\r\n * \r\n * @param tailMime \r\n * @returns \r\n */\r\nexport const audioSelector = (tailMime: string): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\r\n let genericMime: keyof IconsMap = \"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 = \"typescript\";\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): keyof IconsMap => {\r\n let genericMime: keyof IconsMap = \"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 * If not found, returns octet-stream url\r\n * @param props mime and extension from file to search\r\n * @returns the result file ico\r\n */\r\nexport const getURLFileIco = (\r\n file: File | undefined,\r\n customIcons: IconsMap | undefined\r\n): ResultFileIco => {\r\n\r\n let result: keyof IconsMap = \"fallBack\";\r\n //if not file, return octet\r\n if (!file) {\r\n result = DEF_GEN_MIME;\r\n if (customIcons?.fallBack)\r\n return { url: customIcons?.fallBack, mimeResume: result };\r\n\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 const customUrl = customIcons?.[result];\r\n if (customUrl !== undefined)\r\n return { url: customUrl, mimeResume: result };\r\n\r\n\r\n return { url: mimeUrlList[result], mimeResume: result };\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 getURLFileIcoFromNameAndType = (\r\n name: string | undefined,\r\n type: string | undefined,\r\n customIcons: IconsMap | undefined\r\n): ResultFileIco => {\r\n\r\n let result: keyof IconsMap = \"octet\";\r\n //if not nam and type, return octet\r\n if (!name) {\r\n result = DEF_GEN_MIME;\r\n if (customIcons?.fallBack)\r\n return { url: customIcons?.fallBack, mimeResume: result };\r\n return { url: mimeUrlList[result], mimeResume: result };\r\n } else {\r\n result = mimeSelector(type);\r\n }\r\n //If plain text\r\n const extention: string = getExt(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 const customUrl = customIcons?.[result];\r\n if (customUrl !== undefined)\r\n return { url: customUrl, mimeResume: result };\r\n\r\n return { url: mimeUrlList[result], mimeResume: result };\r\n}\r\ninterface ResultFileIco {\r\n url: string;\r\n mimeResume: keyof IconsMap;\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 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 fallBack: octet,\r\n};","\r\nimport { UPLOADSTATUS, ServerResponse } from \"../types\";\r\n\r\n/**\r\n * ExtFile === \"Extended File\".\r\n * This object \"extends\" the File Object\r\n */\r\nexport declare type ExtFile = {\r\n /** \r\n * An identifier for the extFile\r\n */\r\n id?: number | string | undefined;\r\n /**\r\n * The file object. Used mostly when user selects or drops files in the client sid.\r\n */\r\n file?: File;\r\n /**\r\n * The name of the file. Used mostly for displaying file data from server.\r\n */\r\n name?: string;\r\n /**\r\n * The type of the file. Used mostly for displaying file data from server.\r\n */\r\n type?: string;\r\n /**\r\n * The size of the file. Used mostly for displaying file data from server.\r\n */\r\n size?: number;\r\n /**\r\n * a flag that determines whether the file is valid, not valid or it is not validated.\r\n */\r\n valid?: boolean;\r\n /**\r\n * The list of errors when the file was validated\r\n */\r\n errors?: string[];\r\n /**\r\n * The current upload status. (e.g. \"uploading\")\r\n */\r\n uploadStatus?: UPLOADSTATUS | undefined;\r\n /**\r\n * A message that shows the result of the upload process\r\n */\r\n uploadMessage?: string;\r\n /**\r\n * Link, URI or string representation of an image\r\n */\r\n imageUrl?: string;\r\n /**\r\n * The XMLHttpRequest object for performing uploads to a server\r\n */\r\n xhr?: XMLHttpRequest;\r\n /**\r\n * The current percentage of upload progress.\r\n * This value will have a higher priority over the upload progress value calculated inside the component.\r\n * @default undefined\r\n */\r\n progress?: number;\r\n /**\r\n * The additional data that will be sent to the server\r\n * when files are uploaded individually\r\n */\r\n extraUploadData?: Record<string, any>;\r\n /**\r\n * Any kind of extra data that could be needed.\r\n */\r\n extraData?: Object;\r\n /**\r\n * The upload response from server\r\n */\r\n serverResponse?: ServerResponse;\r\n /**\r\n * The url to be used to perform a GET request in order to download the\r\n file. If defined, the download icon will be shown.\r\n */\r\n downloadUrl?: string;\r\n /**\r\n * Link, URI, FIle object or string representation of a video\r\n */\r\n videoUrl?: string;\r\n}\r\n\r\n/**\r\n * A class definition for ExtFile.\r\n * This class has the purpose to allow the creation of instances\r\n * of an ExtFile for performing complex operations that cannot be\r\n * accomplished just by using the ExtFile type.\r\n * For instance, it can help in changing the value of some attributes\r\n * across different scopes thanks to memory reference.\r\n */\r\nexport class ExtFileInstance {\r\n /**\r\n * An identifier for the extFile\r\n */\r\n public id?: number | string;\r\n /**\r\n * The file object. Used mostly when user selects or drops files in the client sid.\r\n */\r\n public file?: File;\r\n /**\r\n * The name of the file. Used mostly for displaying file data from server.\r\n */\r\n public name?: string;\r\n /**\r\n * The type of the file. Used mostly for displaying file data from server.\r\n */\r\n public type?: string;\r\n /**\r\n * The size of the file. Used mostly for displaying file data from server.\r\n */\r\n public size?: number;\r\n\r\n public imageUrl?: string;\r\n /**\r\n * A flag that determines whether the file is valid, not valid or it is not validated.\r\n */\r\n public valid?: boolean;\r\n /**\r\n * The list of errors when the file was validated\r\n */\r\n public errors?: string[];\r\n /**\r\n * A message that shows the result of the upload process\r\n */\r\n public uploadMessage?: string;\r\n /**\r\n * The current upload status. (e.g. \"uploading\")\r\n */\r\n public uploadStatus?: UPLOADSTATUS | undefined;\r\n /**\r\n * The current upload progress\r\n */\r\n public progress?: number;\r\n /**\r\n * The XMLHttpRequest object for performing uploads to a server\r\n */\r\n public xhr?: XMLHttpRequest;\r\n /**\r\n * The additional data that will be sent to the server\r\n */\r\n public extraData?: Record<string, any>;\r\n /**\r\n * The additional data that will be sent to the server\r\n * when filesare uploaded individually\r\n */\r\n public extraUploadData?: Record<string, any>;\r\n /**\r\n * The upload response from server\r\n */\r\n public serverResponse?: ServerResponse;\r\n /**\r\n * Url to perform a GET request in order to download the file.\r\n * This action is triggered when download button is clicked or pressed.\r\n * In case onDownload prop is given\r\n */\r\n public downloadUrl?: string;\r\n /**\r\n * Link, URI, FIle object or string representation of a video\r\n */\r\n public videoUrl?: string;\r\n\r\n constructor(extFile: ExtFile) {\r\n const {\r\n id,\r\n file,\r\n name,\r\n size,\r\n type,\r\n imageUrl,\r\n valid,\r\n errors,\r\n uploadMessage,\r\n uploadStatus,\r\n progress,\r\n xhr,\r\n extraData,\r\n extraUploadData,\r\n serverResponse,\r\n downloadUrl, videoUrl\r\n } = extFile;\r\n\r\n this.id = id;\r\n this.file = file;\r\n this.name = name;\r\n this.size = size;\r\n this.type = type;\r\n this.imageUrl = imageUrl;\r\n\r\n this.valid = valid;\r\n this.errors = errors;\r\n this.uploadStatus = uploadStatus;\r\n this.uploadMessage = uploadMessage;\r\n this.progress = progress;\r\n this.xhr = xhr;\r\n\r\n this.extraData = extraData;\r\n this.extraUploadData = extraUploadData;\r\n this.serverResponse = serverResponse;\r\n\r\n this.downloadUrl = downloadUrl;\r\n this.videoUrl = videoUrl;\r\n }\r\n /**\r\n * method under construction\r\n */\r\n /* private static kamuiFile() {\r\n \r\n }\r\n */\r\n /**\r\n * Copies all non undefined attributes from ExtFileInstance to a new ExtFile object\r\n * @param extFileInstance the instance of ExtFile\r\n * @returns an ExtFile object\r\n */\r\n static toExtFile(extFileInstance: ExtFileInstance): ExtFile {\r\n //console.log(\"before toExtFile()\", extFileInstance);\r\n\r\n let extFileClone: ExtFile = {}; // the new empty object\r\n const extFileInstanceKeys = Object.keys(extFileInstance) as [keyof ExtFile];\r\n const extFileInstanceValues = Object.values(extFileInstance) as Array<ExtFile[keyof ExtFile]>;\r\n // let's copy all user properties into it\r\n for (let i = 0; i < extFileInstanceValues.length; i++) {\r\n const currentValue: ExtFile[keyof ExtFile] = extFileInstanceValues[i];\r\n\r\n\r\n const currKey = extFileInstanceKeys[i];\r\n if (currentValue !== undefined) {\r\n\r\n extFileClone[currKey] = currentValue as ExtFile[keyof ExtFile] as never;\r\n }\r\n }\r\n //console.log(\"after toExtFile()\", extFileClone);\r\n //console.log(\"current extFileClone keys\",Object.keys( extFileClone).length);\r\n return extFileClone;\r\n }\r\n /**\r\n * Copies all non undefined attributes from ExtFileInstance to a new ExtFile object.\r\n * @returns an ExtFile object\r\n */\r\n toExtFile(): ExtFile {\r\n return ExtFileInstance.toExtFile(this);\r\n }\r\n\r\n /* static mock = (id?: number): ExtFileInstance => {\r\n return new ExtFileInstance(\r\n extFileMock(id)\r\n );\r\n } */\r\n}\r\n\r\n\r\n","import { ExtFileInstance, ExtFile } from \"./ExtFile\";\r\n\r\nexport class ExtFileManager {\r\n private static nextId: number = 0;\r\n static fileLists: Record<number | string, ExtFileInstance[] | undefined> = {};\r\n /**\r\n * Increases the id counter and returns the next id available.\r\n * @returns the next integer id available\r\n */\r\n public static getNextId(): number {\r\n ExtFileManager.nextId++;\r\n return ExtFileManager.nextId;\r\n }\r\n /**\r\n * Updates a dui file list given an id\r\n * @param id id of the fileList\r\n * @param extFiles list of DuiFiles forinitializing the array\r\n * @returns the id of the fileList\r\n */\r\n public static setFileList(\r\n id: number | string | undefined,\r\n extFilesInstances: ExtFileInstance[]\r\n ): number | string {\r\n if (!id) {\r\n return 0;\r\n } else {\r\n ExtFileManager.fileLists[id] = [...extFilesInstances];\r\n\r\n return id;\r\n }\r\n\r\n }\r\n /**\r\n * Generates a new ID\r\n * @returns the next Id asociated with a DuiFIle list\r\n */\r\n public static createFileListMap(): number {\r\n const nextId: number = ExtFileManager.getNextId();\r\n ExtFileManager.fileLists[nextId] = [];\r\n\r\n return nextId;\r\n }\r\n\r\n /**\r\n * Deletes a list map\r\n * @returns the next Id asociated with a DuiFIle list\r\n */\r\n public static removeFileListMap(id?: number | string): number | string {\r\n if (!id) {\r\n return 0;\r\n } else {\r\n try {\r\n ExtFileManager.fileLists[id] = undefined;\r\n return id;\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"development\")\r\n console.error(\"Error on remove\", error);\r\n return 0;\r\n }\r\n }\r\n }\r\n /**\r\n * \r\n * @param id the id of the dropzone\r\n * @returns \r\n */\r\n public static getExtFileInstanceList(\r\n id?: number | string\r\n ): ExtFileInstance[] | undefined {\r\n try {\r\n if (!id) {\r\n return undefined;\r\n }\r\n return ExtFileManager.fileLists[id];\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"development\")\r\n console.error(\"Error on getExtFileInstanceList\", error);\r\n return undefined;\r\n }\r\n }\r\n /**\r\n * Updates(replaces) the extFile list on preparing stage and returns the new array.\r\n * Removes the non valid files if cleanOnUpload is true and validateFiles is also true\r\n * Then sets on preparing stage all files according to the following creiteria:\r\n * If theuploadStatus is diferent than \"sucess\" AND\r\n * then, update the files on preparing stage. Otherwise keep the extFile props.\r\n * Finally, updates the ExtFileInstance list on ExtFileManager.\r\n * @param dropzoneId the id to access the right list\r\n * @param localFiles the list of extFiles\r\n * @param validateFiles flag that indicates that validation is active or o¿not\r\n * @param cleanOnUpload flag to determine whther to clena the list oof non valid files or not\r\n * @returns a list of ExtFileInstance\r\n */\r\n public static setFileListMapPreparing(\r\n dropzoneId: number | string,\r\n localFiles: ExtFile[],\r\n validateFiles: boolean,\r\n cleanOnUpload: boolean\r\n ): ExtFileInstance[] | undefined {\r\n //console.log(\"setFileListMapPreparing before if\", dropzoneId, localFiles, cleanOnUpload);\r\n\r\n if (!(typeof dropzoneId === \"number\" || typeof dropzoneId === \"string\")) return undefined;\r\n\r\n //console.log(\"setFileListMapPreparing before try\", localFiles, cleanOnUpload);\r\n try {\r\n\r\n let resultExtList: ExtFileInstance[] = [];\r\n\r\n //initializes the extFileLInstance list\r\n let temLocalFiles: ExtFile[] = [...localFiles];\r\n\r\n //remove non valids if cleanOnUpload is true and validateFiles is also true\r\n if (cleanOnUpload && validateFiles) {\r\n // clean on Upload is true, so non valid files must be removed\r\n temLocalFiles = temLocalFiles.filter(extFile => extFile.valid)\r\n //console.log(\"temLocalFiles filter\", temLocalFiles);\r\n }\r\n\r\n //console.log(\"setFileListMapPreparing after remove non valids\", temLocalFiles);\r\n\r\n if (validateFiles) {\r\n // validation flag was set to true, so only valid=true files will be set to \"preparing\"\r\n\r\n //so, only valid files was kept in the temLocalfiles array\r\n //now set the preparing state only for files with uploadStatus !== \"success\"\r\n temLocalFiles =\r\n temLocalFiles\r\n .map(extFile => {\r\n if (extFile.uploadStatus !== \"success\" && extFile.valid) {\r\n return { ...extFile, uploadStatus: \"preparing\" }\r\n } else {\r\n return { ...extFile }\r\n }\r\n });\r\n } else {\r\n // all files will be set to \"preparing\" whether the valid value\r\n // except those files with uploadStatus ===\"success\"\r\n temLocalFiles =\r\n temLocalFiles\r\n .map(extFile => {\r\n if (extFile.uploadStatus !== \"success\") {\r\n return { ...extFile, uploadStatus: \"preparing\" }\r\n } else {\r\n return { ...extFile }\r\n }\r\n });\r\n }\r\n\r\n //console.log(\"setFileListMapPreparing result\", temLocalFiles);\r\n\r\n //converto to Object instances\r\n resultExtList = temLocalFiles.map(F => new ExtFileInstance(F));\r\n //console.log(\"setFileListMapPreparing RESULT resultExtList\", resultExtList);\r\n\r\n const resultSet = ExtFileManager.setFileList(dropzoneId, resultExtList);\r\n //console.log(\"setFileListMapPreparing RESULT resultSet\", resultSet);\r\n\r\n return resultExtList;\r\n // return ExtFileManager.fileLists[dropzoneId];\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"development\")\r\n console.error(\"setFileListMapPreparing Error on get List\", error);\r\n return undefined;\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n /**\r\n * Updates(replaces) the extFile list on preparing stage and returns the new array.\r\n * Removes the non valid files if cleanOnUpload is true and validateFiles is also true\r\n * Then sets on preparing stage all files according to the following creiteria:\r\n * If theuploadStatus is diferent than \"sucess\" AND\r\n * then, update the files on preparing stage. Otherwise keep the extFile props.\r\n * Finally, updates the ExtFileInstance list on ExtFileManager.\r\n * @param dropzoneId the id to access the right list\r\n * @param localFiles the list of extFiles\r\n * @param validateFiles flag that indicates that validation is active or o¿not\r\n * @param cleanOnUpload flag to determine whther to clena the list oof non valid files or not\r\n * @returns a list of ExtFileInstance\r\n */\r\n public static setFileListMapPreparing2(\r\n dropzoneId: number | string,\r\n localFiles: ExtFile[],\r\n validateFiles: boolean,\r\n cleanOnUpload: boolean\r\n ): ExtFileInstance[] | undefined {\r\n\r\n ExtFileManager.setFileList(dropzoneId, localFiles.map(F => new ExtFileInstance({ ...F, uploadStatus: \"preparing\" })));\r\n\r\n return ExtFileManager.getExtFileInstanceList(dropzoneId);\r\n }\r\n\r\n\r\n\r\n /**\r\n * \r\n * @param dropzoneId \r\n * @param index \r\n * @param incommingDuiFile \r\n * @returns \r\n */\r\n /* public static updateFileListMapPreparingById(\r\n dropzoneId: number,\r\n index: number,\r\n incommingDuiFile: ExtFileInstance\r\n ): ExtFileInstance[] | undefined {\r\n if (!(typeof dropzoneId === \"number\") || !(typeof index === \"number\") || index > 0) return undefined;\r\n const extFileList: ExtFileInstance[] | undefined = ExtFileManager.fileLists[dropzoneId];\r\n\r\n if (!(extFileList && extFileList.length > 0)) return undefined;\r\n extFileList[index]=\r\n try {\r\n ExtFileManager.setFileList(dropzoneId, [\r\n ...localFiles.map(\r\n (x) =>\r\n new ExtFileInstance({ ...x, uploadStatus: \"preparing\" })\r\n ),\r\n ]);\r\n return ExtFileManager.fileLists[dropzoneId];\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"development\")\r\n console.error(\"Error on get List\", error);\r\n return undefined;\r\n }\r\n\r\n } */\r\n}","import { Method } from \"./method\"\r\n\r\nexport type UploadConfig = {\r\n /**\r\n * The url endpoint to upload the file.\r\n * e.g. https://www.myasomwbackend/uploads/file\r\n */\r\n url?: string;\r\n /**\r\n * upload method, can be POST | PUT | PATCH\r\n * @default \"POST\"\r\n */\r\n method?: Method;\r\n /**\r\n * Request headers for http request.\r\n * e.g.\r\n * ```jsx\r\n * headers = { \r\n * \"content-type\": \"multipart/form-data\",\r\n * Authorization: \"Bearer YOUR_BEARER_TOKEN_GOES_HERE\",\r\n * } \r\n * ```\r\n */\r\n headers?: Record<string, string>;\r\n /**\r\n * the label to use in request\r\n * On server this must be the label to get the file.\r\n * @default \"file\"\r\n */\r\n uploadLabel?: string;\r\n /**\r\n * Flag for indicating whther to remove the non-valid files\r\n * before starting the upload process.\r\n * This flag is valid only if validation is enable\r\n */\r\n cleanOnUpload?: boolean;\r\n /**\r\n * If true, onDrop event or file selection not only will make Dropzone to return the list of files, but also\r\n * it will start the upload stage for the files if at least url was set\r\n * By default is false\r\n */\r\n autoUpload?: boolean;\r\n /**\r\n * The time that will last the \"preparing\" stage\r\n * By default is 1500 miliseconds = 1.5 seconds\r\n */\r\n preparingTime?: number;\r\n /**\r\n * A message to show in the footer when the uploading process takes place.\r\n */\r\n uploadingMessage?: string;\r\n}\r\n\r\nexport const createUploadConfig = (\r\n url?: string,\r\n method?: Method,\r\n headers?: Record<string, string>,\r\n uploadLabel?: string,\r\n cleanonUpload?: boolean\r\n) => {\r\n return {\r\n url,\r\n method,\r\n headers,\r\n uploadLabel,\r\n cleanonUpload\r\n }\r\n}","\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}\r\n///////////////////// SHORTCUTS\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/**\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 * An id generator for FileItems\r\n */\r\n export abstract class FileIdGenerator {\r\n static nextId = 0;\r\n /**\r\n * Increases the id counter 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}","import { ExtFile, ExtFileInstance } from \"../types\";\r\nimport { FileIdGenerator } from \"./IdGenerator\";\r\n\r\n\r\n/**\r\n * Converts the fileList into an array of separated ExtFile objects\r\n * @param fileList the FileList object given by input(event.target.files) or drop operation (event.dataTransfer)\r\n * @returns an array of ExtFile objects\r\n */\r\nexport const fileListToExtFileArray = (fileList: FileList): ExtFile[] => {\r\n let extFileArray: ExtFile[] = [];\r\n for (let i = 0, f: File; (f = fileList[i]); i++) {\r\n extFileArray.push({ id: FileIdGenerator.getNextId(), file: f, name: f.name, size: f.size, type: f.type });\r\n }\r\n return extFileArray;\r\n};\r\n\r\n/**\r\n * Converts the fileList into an array of separated ExtFile instances\r\n * @param fileList the FileList object given by input (event.target.files) or drop operation (event.dataTransfer)\r\n * @returns an array of ExtFile instances\r\n */\r\nexport const fileListToExtFileInstanceArray = (fileList: FileList): ExtFileInstance[] => {\r\n let extFileArray: ExtFileInstance[] = [];\r\n for (let i = 0, f: File; (f = fileList[i]); i++) {\r\n extFileArray.push(new ExtFileInstance({ id: FileIdGenerator.getNextId(), file: f, name: f.name, size: f.size, type: f.type }));\r\n }\r\n return extFileArray;\r\n};","export const isValidateActive = (\r\n accept: string | undefined,\r\n maxFileSize: number | undefined,\r\n maxFiles: number | undefined,\r\n validator: Function | undefined\r\n ): boolean => {\r\n return (\r\n (accept !== undefined && accept !== null) ||\r\n (maxFileSize !== undefined && maxFileSize !== null) ||\r\n (maxFiles !== undefined && maxFiles !== null) ||\r\n (validator !== undefined && validator !== null)\r\n );\r\n };\r\n ","/**\r\n * The max size of the word in characters\r\n */\r\nexport const DEFAULT_MAX_SIZE_WORD = 30;\r\n/**\r\n * \r\n * @param word the word to be shrinked\r\n * @returns the shrinked word\r\n */\r\nexport const shrinkWord = (word = \"\", card = false): string => {\r\n let newWord = word;\r\n if (card) {\r\n if (word.length >= 20) {\r\n newWord = word.slice(0, 10) + \"...\" + word.slice(-7);\r\n }\r\n } else if (word.length >= DEFAULT_MAX_SIZE_WORD) {\r\n newWord = word.slice(0, 13) + \"...\" + word.slice(-8);\r\n }\r\n return newWord;\r\n};","\r\nimport { DropzoneLocalizerSelector } from \"../localization\";\r\nimport { ExtFile, ExtFileInstance, UploadResponse } from \"../types\";\r\n\r\n/**\r\n * Updates a extFile and sets its uploadStatus to \"uploading\"\r\n * @param extFile the extended file object\r\n * @returns the extended file with the uploadStatus attribute modified\r\n */\r\nexport const setPrepToUploading = (\r\n extFile: ExtFile\r\n): Promise<ExtFile> => {\r\n //console.log(\"prepToUpload One\", extFile);\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve({\r\n ...extFile,\r\n uploadStatus: \"uploading\",\r\n });\r\n }, 1500);\r\n\r\n });\r\n};\r\n/**\r\n * Updates a extFile and sets its uploadStatus to \"success\"\r\n * @param extFile the extended file object\r\n * @returns the extended file with the uploadStatus attribute modified\r\n */\r\nexport const uploadOne = (\r\n extFile: ExtFile\r\n): Promise<ExtFile> => {\r\n //console.log(\"upload One\", extFile);\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve({\r\n ...extFile,\r\n uploadStatus: \"success\",\r\n });\r\n }, 2000);\r\n });\r\n};\r\n/**\r\n * Awaits the given time before start uploading\r\n * @param preparingTime the time in miliseconds, by default it will wait 1.5 secs\r\n * @returns an empty object\r\n */\r\nexport const sleepPreparing = (\r\n preparingTime: number = 5000\r\n): Promise<void> => {\r\n //console.log(\"uploadfiles preparingTime One\", preparingTime);\r\n return new Promise((resolve, reject) => {\r\n\r\n setTimeout(() => {\r\n resolve();\r\n }, preparingTime);\r\n\r\n });\r\n}\r\n\r\n/**\r\n * \r\n * @param extFileInstance \r\n * @returns \r\n */\r\nexport const prepToUploadOne = (\r\n extFileInstance: ExtFileInstance | ExtFile\r\n): Promise<ExtFileInstance | ExtFile> => {\r\n //console.log(\"prepToUpload One\", extFileInstance);\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n extFileInstance.uploadStatus = \"uploading\";\r\n resolve({\r\n ...extFileInstance,\r\n uploadStatus: \"uploading\",\r\n });\r\n }, 1500);\r\n\r\n });\r\n};\r\n\r\n/**\r\n * \r\n * @param extFileInstance \r\n * @returns \r\n */\r\nexport const uploadOneExtFile = (\r\n extFileInstance: ExtFileInstance\r\n): Promise<Object> => {\r\n //console.log(\"upload One\", extFileInstance);\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n extFileInstance.uploadStatus = \"success\";\r\n resolve({\r\n ...extFileInstance,\r\n uploadStatus: \"success\",\r\n });\r\n }, 2000);\r\n });\r\n};\r\n\r\n\r\n/**\r\n * \r\n * @param extFile the extFile to upload \r\n * @param DropzoneLocalizer the localization\r\n * @returns a duiUploadResponse object that describes the result\r\n */\r\nexport const fakeFuiUpload = (\r\n extFileInstance: ExtFileInstance,\r\n DropzoneLocalizer = DropzoneLocalizerSelector(\"EN-en\")\r\n): Promise<ExtFile> => {\r\n \r\n const extFile:ExtFile = extFileInstance.toExtFile();\r\n \r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n const randomNumber: number = Math.floor(Math.random() * 10);\r\n if (randomNumber % 2 === 0) {\r\n const success = true;\r\n const message = DropzoneLocalizer.fakeuploadsuccess as string;\r\n const payload = { url: \"\" };\r\n resolve({\r\n ...extFile,\r\n serverResponse: { success, message, payload },\r\n uploadStatus: \"success\",\r\n uploadMessage: message,\r\n\r\n });\r\n } else {\r\n const success = false;\r\n const message = DropzoneLocalizer.fakeUploadError as string;\r\n const payload = {};\r\n resolve({\r\n ...extFile,\r\n serverResponse: { success, message, payload },\r\n uploadStatus: \"error\",\r\n uploadMessage: message,\r\n });\r\n }\r\n }, 1700);\r\n });\r\n};\r\n\r\n\r\n/**\r\n * \r\n * @param extFile the extFile to upload \r\n * @param DropzoneLocalizer the localization\r\n * @returns a duiUploadResponse object that describes the result\r\n */\r\nexport const fakeFuiUploadExtFile = (\r\n extFileInstance: ExtFileInstance,\r\n DropzoneLocalizer = DropzoneLocalizerSelector(\"EN-en\")\r\n): Promise<UploadResponse> => {\r\n \r\n const extFile:ExtFile = extFileInstance.toExtFile();\r\n \r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n const randomNumber: number = 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\r\n resolve({\r\n id: extFile.id,\r\n serverResponse: { status, message, payload },\r\n uploadedFile: {\r\n ...extFile,\r\n uploadStatus: \"success\",\r\n uploadMessage: message,\r\n progress: 100\r\n }\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 id: extFile.id,\r\n serverResponse: { status, message, payload },\r\n uploadedFile: {\r\n ...extFile,\r\n uploadStatus: \"error\",\r\n uploadMessage: message,\r\n progress: 60\r\n },\r\n });\r\n }\r\n }, 1700);\r\n });\r\n};\r\n","/**\r\n * Random integer between min (included) and max (excluded)\r\n * @param min the min number\r\n * @param max the max number\r\n * @returns a random number between min (included) and max (excluded)\r\n */\r\nexport function getRandomInt(min: number = 0, max: number = 0): number {\r\n return Math.floor(Math.random() * (max - min)) + min;\r\n}\r\n","/**\r\n * Cleans the input.value attribute\r\n * @param inputElement \r\n */\r\nexport const cleanInput = (inputElement?: HTMLInputElement | null) => {\r\n if (!inputElement) return;\r\n inputElement.value = \"\";\r\n}","/**\r\n * If className is given, adds class name in string format to a base class name\r\n * @param baseClassName the base class name\r\n * @param className the class name to be added\r\n * @returns a new class name obtained by adding the second paramater\r\n */\r\nexport const addClassName = (\r\n baseClassName: string,\r\n className: string | undefined\r\n): string => {\r\n if (className)\r\n return `${baseClassName} ${className}`;\r\n return baseClassName;\r\n}","import { ExtFile } from \"../types\";\r\n\r\nexport const isUploadAbleExtFile = (extFile: ExtFile, validateFilesFlag: boolean) => {\r\n return (!validateFilesFlag || (validateFilesFlag && extFile.valid)) && extFile.uploadStatus !== \"success\";\r\n}","/**\r\n * \r\n * @param file \r\n * @param name \r\n * @param type \r\n * @param size \r\n * @returns the file name, type and size\r\n */\r\nexport const getLocalFileItemData = (\r\n file: File | undefined,\r\n name: string | undefined,\r\n type: string | undefined,\r\n size: number | undefined\r\n): [string, string | undefined, number | undefined] => {\r\n\r\n let localFileName: string = \"\";\r\n let localFileType: string | undefined = undefined;\r\n let localFileSize: number | undefined = undefined;\r\n\r\n // if file object is valid, obtain metadata from it\r\n // otherwise try to get file data from individual props in string format\r\n if (file && typeof file.name === \"string\") {\r\n localFileName = file.name;\r\n localFileType = file.type;\r\n localFileSize = file.size;\r\n } else if (name && typeof name === \"string\") {\r\n localFileName = name;\r\n localFileType = type;\r\n localFileSize = size;\r\n }\r\n return [localFileName, localFileType, localFileSize]\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}","import { getExt } from \"../utils/getExt\";\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\n export 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}","import { ValidateErrorLocalizerSelector } from \"../localization\";\r\nimport { ExtFile, FunctionLabel, Localization, LocalLabels } from \"../types\";\r\nimport { ValidateFileResponse, FileValidatorProps } from \"../types/validation\";\r\nimport { FileIdGenerator } from \"../utils/IdGenerator\";\r\nimport { separateAccept } from \"./separateAccept\";\r\nimport { validateAccept } from \"./validateAccept\";\r\n\r\n/**\r\n * \r\n * @param preValidatedFiles FileList \r\n * @param remainingValids The number of remaining valid files\r\n * @param localValidator \r\n * @param validator \r\n * @param maxFiles \r\n * @param localization \r\n * @returns \r\n */\r\nexport const fileListvalidator = (\r\n preValidatedFiles: FileList,\r\n remainingValids: number,\r\n localValidator: FileValidatorProps,\r\n validator?: ((f: File) => ValidateFileResponse) ,\r\n maxFiles?: number,\r\n localization?: Localization\r\n): ExtFile[] => {\r\n const output: ExtFile[] = [];\r\n //set a countdown when there is a limit on files\r\n let countdown: number = remainingValids;\r\n // get localized labels\r\n const ValidationErrorLocalizer: LocalLabels =\r\n ValidateErrorLocalizerSelector(localization);\r\n //Iterate the File list\r\n for (let i = 0, f: File; (f = preValidatedFiles[i]); i++) {\r\n // Validate the file list with\r\n let validatedFile: ExtFile = validateFile(f, validator, localValidator, ValidationErrorLocalizer);\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 = ValidationErrorLocalizer.maxFileCount as FunctionLabel;\r\n validatedFile.errors = validatedFile.errors\r\n ? [...validatedFile.errors, maxFileErrorMessenger(maxFiles || Infinity)]\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\r\n\r\n/**\r\n * For each ExtFile sets the valid prop of ExtFile to \"true\" or \"false\"\r\n * depending on the result of the individual validation. \r\n * It also add the list of errors.\r\n * @param extFileList \r\n * @param remainingValids \r\n * @param localValidatorProps \r\n * @param validator \r\n * @param maxFiles \r\n * @param localization \r\n * @returns a new ExtFile list with each item validated\r\n */\r\nexport const validateExtFileList = (\r\n extFileList: ExtFile[],\r\n remainingValids: number,\r\n localValidatorProps: FileValidatorProps,\r\n validator?: ((f: File) => ValidateFileResponse) ,\r\n maxFiles?: number,\r\n localization?: Localization\r\n): ExtFile[] => {\r\n //console.log(\"remaning valids\", remainingValids);\r\n let fileListResult: ExtFile[] = [];\r\n if (!remainingValids) return fileListResult;\r\n let remaining: number = remainingValids;\r\n const ValidationErrorLocalizer: LocalLabels =\r\n ValidateErrorLocalizerSelector(localization);\r\n const maxFileErrorMessenger: FunctionLabel = ValidationErrorLocalizer.maxFileCount as FunctionLabel;\r\n for (let i = 0; i < extFileList.length; i++) {\r\n let currentExtFile: ExtFile = extFileList[i];\r\n\r\n currentExtFile = validateExtFile(currentExtFile, validator, localValidatorProps, ValidationErrorLocalizer);\r\n //console.log(\"validateExtFileList after validation\", currentExtFile);\r\n\r\n if (currentExtFile.valid) {\r\n //not valid due to file count limit\r\n const valid = remaining > 0;\r\n currentExtFile.valid = valid;\r\n //add error about amount\r\n if (!valid) {\r\n currentExtFile.errors = currentExtFile.errors\r\n ? [...currentExtFile.errors, maxFileErrorMessenger(maxFiles || Infinity)]\r\n : [maxFileErrorMessenger(maxFiles || Infinity)];\r\n }\r\n remaining--;\r\n }\r\n fileListResult.push(currentExtFile);\r\n\r\n }\r\n return fileListResult;\r\n}\r\n\r\n/**\r\n * \r\n * @param extFile \r\n * @param validator \r\n * @param validatorProps \r\n * @param localErrors \r\n * @returns \r\n */\r\nexport const validateExtFile = (\r\n extFile: ExtFile,\r\n validator: ((f: File) => ValidateFileResponse) | undefined,\r\n validatorProps: FileValidatorProps,\r\n localErrors: LocalLabels\r\n): ExtFile => {\r\n let extFileResult: ExtFile = { ...extFile };\r\n let errors: string[] = [];\r\n //TO-DO: Add extra validation for individual props even if FIle object was not given\r\n if (!extFile.file) {\r\n return { ...extFileResult }\r\n }\r\n\r\n //TO-DO: add \"overrideValidation\" prop to ignore the rest of validators like accept and maxFileSize\r\n if (validator) {\r\n const resultCustomValidation: ValidateFileResponse = validator(extFileResult.file as File);\r\n const { errors: errorsResult } = resultCustomValidation;\r\n if (errorsResult)\r\n errors.push(...errorsResult)\r\n //return { ...extFileResult, ...validator(extFileResult.file as File) };\r\n }\r\n\r\n const { maxFileSize, accept } = validatorProps;\r\n //console.log(\"Validation\", maxFileSize, accept);\r\n //check file size\r\n const file: File = extFile.file;\r\n\r\n\r\n if (maxFileSize && file.size > maxFileSize) {\r\n const maxFileSizeErrorMessenger: FunctionLabel = localErrors.maxSizeError as FunctionLabel;\r\n\r\n //console.log(\"Size error\", maxFileSizeErrorMessenger(maxFileSize));\r\n\r\n errors.push(maxFileSizeErrorMessenger(maxFileSize));\r\n }\r\n //check file type\r\n if (accept && !validateAccept(separateAccept(accept), file)) {\r\n errors.push(localErrors.acceptError as string);\r\n }\r\n const isValid: boolean = errors.length === 0;\r\n extFileResult = { ...extFileResult, valid: isValid, errors: !isValid ? errors : undefined };\r\n //console.log(\"validation extFileResult\", extFileResult);\r\n return extFileResult;\r\n\r\n}\r\n\r\n\r\n\r\n/**\r\n * Function that validate whether a file is valid, or not\r\n * according to the Filevalidator properties\r\n * @param file a File object to be evaluated\r\n * @param validatorProps the validator object \r\n * @returns a FileValidated object\r\n */\r\nexport const validateFile = (\r\n file: File,\r\n validator: undefined | ((f: File) => ValidateFileResponse),\r\n validatorProps: FileValidatorProps,\r\n localErrors: LocalLabels\r\n): ExtFile => {\r\n\r\n const idGenerated = FileIdGenerator.getNextId();\r\n let errors: string[] = [];\r\n if (validator) {\r\n return { id: idGenerated, file, ...validator(file) };\r\n }\r\n\r\n const { maxFileSize, accept } = validatorProps;\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: ExtFile = {\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\n * list of dumy errors in english\r\n */\r\nexport const listOfErrors: string[] =\r\n [\r\n \"File is too big. Max file size allowed is 80mb.\",\r\n \"File's type is not allowed.\",\r\n \"Max amount of files (28) has been reached.\"\r\n ];","import { ExtFile, UPLOADSTATUS } from \"../types\";\r\nimport { FileIdGenerator, getRandomInt } from \"../utils\";\r\nimport { getRandomUploadStatus, listOfErrors } from \"../validation\";\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\n export const makeSyntheticExtFile = (\r\n file?: File ,\r\n valid = (Math.ceil(Math.random() * 28) % 2 === 0),\r\n uploadStatus?: UPLOADSTATUS,\r\n uploadMessage?: string\r\n): ExtFile => {\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 \"error\": customUploadMessage = \"Upload failed. There was an error\"; break;\r\n case \"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: ExtFile = {\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","import { UPLOADSTATUS } from \"../types\";\r\nimport { getRandomInt } from \"../utils/randomInt\";\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\n export const getRandomUploadStatus = (): UPLOADSTATUS | undefined => {\r\n const result: number = getRandomInt(0, 4);\r\n switch (result) {\r\n case 0: return \"error\";\r\n case 1: return \"uploading\";\r\n case 2: return \"success\";\r\n default:\r\n return undefined;\r\n }\r\n}","import { createSyntheticFile } from \"../synthetic-file\"\r\nimport { ExtFile } from \"../types\"\r\nimport { FileIdGenerator } from \"../utils\"\r\nimport { listOfErrors } from \"../validation\"\r\n\r\nexport const extFileMock = (id?: number): ExtFile => {\r\n return {\r\n id: id || FileIdGenerator.getNextId(),\r\n name: \"fileName.ext\",\r\n size: 28 * 1024 * 1024,\r\n type: \"files-ui/mock\",\r\n file: createSyntheticFile(\"fileName.ext\", 28 * 1024 * 1024, \"files-ui/mock\"),\r\n errors: listOfErrors,\r\n uploadMessage: \"uploaded\",\r\n uploadStatus: \"preparing\",\r\n valid: false,\r\n progress: 28,\r\n xhr: new XMLHttpRequest(),\r\n extraData: {\r\n extraData1: \"files-ui is the best\",\r\n extraData2: {\r\n id: 1,\r\n name: \"files-ui.mock\"\r\n },\r\n deleted: true\r\n },\r\n downloadUrl: \"https://www.files-ui.com/mock/file-download\"\r\n }\r\n}","export default function addExtraData(\r\n formData: FormData,\r\n extraData: Record<string, string> | undefined\r\n) {\r\n //headers\r\n const extraDataKeys: string[] = Object.keys(extraData || {});\r\n //const headerValues: string[] = Object.values(headers);\r\n for (let i = 0; i < extraDataKeys.length && extraData; i++) {\r\n //console.log(\"uploadFile extraData\", extraDataKeys[i], extraData[extraDataKeys[i]]);\r\n formData.append(extraDataKeys[i], extraData[extraDataKeys[i]]);\r\n }\r\n\r\n formData.append(\"otherValue\", \"HAAAAAAAAAAAAAAa\");\r\n\r\n}","export default function addHeaders(\r\n xhr: XMLHttpRequest,\r\n headers: Record<string, string> | undefined\r\n) {\r\n //headers\r\n const headerKeys: string[] = Object.keys(headers || {});\r\n //const headerValues: string[] = Object.values(headers);\r\n for (let i = 0; i < headerKeys.length && headers; i++) {\r\n //console.log(\"uploadFile headers\", headerKeys[i], headers[headerKeys[i]]);\r\n xhr.setRequestHeader(\r\n headerKeys[i],\r\n headers[headerKeys[i]]\r\n );\r\n }\r\n\r\n\r\n}","import { ExtFile, UploadResponse } from \"../types\";\r\n\r\nexport const TIMEOUT_ERROR_RESPONSE = {\r\n success: false,\r\n message: \"Timeout error\",\r\n payload: {}\r\n};\r\nexport const ABORTED_ERROR_RESPONSE = {\r\n success: false,\r\n message: \"Upload aborted\",\r\n payload: {}\r\n}\r\nexport const JSON_PARSE_ERROR_RESPONSE = {\r\n success: false,\r\n message: \"Error when parsing JSON response\",\r\n payload: {}\r\n}\r\n\r\nexport const UNEXPECTED_ERROR_RESPONSE = {\r\n success: false,\r\n message: \"Unexpected error\",\r\n payload: {}\r\n}\r\n\r\nexport const NO_XHR_PROVIDED_ERROR = (extFile: ExtFile): ExtFile => {\r\n return {\r\n\r\n ...extFile,\r\n uploadMessage: \"Unable to upload. xhr object was not provided\",\r\n uploadStatus: \"error\",\r\n\r\n serverResponse: { success: false, }\r\n }\r\n}","import { ExtFile, ServerResponse, UploadResponse } from \"../types\";\r\nimport { JSON_PARSE_ERROR_RESPONSE } from \"./errors.upload\";\r\n\r\nexport const makeServerResponse = (success: any, message: string, payload: any): ServerResponse => {\r\n const result: ServerResponse = { success: success, message: message, payload: payload } as ServerResponse;\r\n return result;\r\n}\r\nexport const JsonParseResponse = (xhr: XMLHttpRequest): ServerResponse => {\r\n try {\r\n const jsonResponse = JSON.parse(xhr.response);\r\n const success: any = jsonResponse.success;\r\n const message: string = jsonResponse.message;\r\n const payload: any = jsonResponse.payload;\r\n\r\n const fuiResponse: ServerResponse = {\r\n success: typeof success === \"boolean\" ? success : false,\r\n message: typeof message === \"string\" ? message : \"Error on message response\",\r\n payload: payload || {}\r\n }\r\n return fuiResponse\r\n } catch (error) {\r\n //console.log(\"FuiUpload ERROR\", error);\r\n return JSON_PARSE_ERROR_RESPONSE;\r\n }\r\n}\r\n\r\n\r\n\r\nexport const makeSuccessUploadResponse = (\r\n extFile: ExtFile,\r\n responseFui: ServerResponse\r\n): ExtFile => {\r\n return {\r\n ...extFile,\r\n serverResponse: responseFui,\r\n uploadMessage: responseFui.message,\r\n uploadStatus: \"success\"\r\n\r\n }\r\n}\r\n\r\n\r\nexport const makeErrorUploadResponse = (\r\n extFile: ExtFile,\r\n responseFui: ServerResponse\r\n): ExtFile => {\r\n //console.log(\"makeErrorUploadResponse\", extFile, responseFui);\r\n return {\r\n ...extFile,\r\n uploadMessage: responseFui.message,\r\n uploadStatus: \"error\", \r\n serverResponse: responseFui,\r\n }\r\n}\r\n\r\n","import { ExtFile, Method, UPLOADSTATUS } from \"../types\";\r\nimport { ServerResponse, UploadResponse } from \"../types/uploadTypes\";\r\nimport addExtraDataUpload from \"./addExtraData.upload\";\r\nimport addHeaders from \"./addheaders.upload\";\r\nimport { ABORTED_ERROR_RESPONSE, NO_XHR_PROVIDED_ERROR, TIMEOUT_ERROR_RESPONSE, UNEXPECTED_ERROR_RESPONSE } from \"./errors.upload\";\r\nimport { JsonParseResponse, makeErrorUploadResponse, makeSuccessUploadResponse } from \"./response.upload\";\r\nimport { completeUploadResult, unableToUploadResult } from \"./utils.upload\";\r\n\r\n\r\n/**\r\n * Uploads one formData object to a given endpoint in a promisified way\r\n * @param xhr XMLHTTPrequest object\r\n * @param method method for uploading\r\n * @param endpoint endpoint to upload the file\r\n * @param data FromData object to perform multipart form data upload\r\n * @param headers the set of headers\r\n * @returns a server response that consists on {status, payload, message}\r\n */\r\nexport const uploadFormData = (\r\n xhr: XMLHttpRequest,\r\n method: Method | undefined = \"POST\",\r\n endpoint: string,\r\n data: FormData,\r\n headers: Record<string, string> | undefined\r\n) => {\r\n return new Promise<ServerResponse>((resolve, reject) => {\r\n //console.log(\"Fui_uploadFormData uploadFile\", xhr, method, endpoint, data, headers);\r\n\r\n const finalMethod: Method = [\"POST\", \"PUT\", \"PATCH\"].includes(method.toUpperCase()) ? method : \"POST\";\r\n\r\n let lastLastState: number = -1;\r\n let lastState: number = 0;\r\n let jumped: boolean = false;\r\n\r\n xhr.upload.onload = () => {\r\n //console.log(\"Fui_uploadFormData uploadFile onLoad\", xhr.readyState, xhr.response);\r\n };\r\n xhr.upload.ontimeout = () => resolve(TIMEOUT_ERROR_RESPONSE);\r\n xhr.upload.onabort = () => {\r\n //console.log(\"Fui_uploadFormData ABORTEEEEDDDD\");\r\n resolve(ABORTED_ERROR_RESPONSE);\r\n };\r\n xhr.onloadend = async (e) => {\r\n //console.log(\"onloadend loaded\", e.loaded);\r\n //console.log(\"onloadend total\", e.total);\r\n //console.log(\"onloadend lengthComputable\", e.lengthComputable);\r\n\r\n }\r\n // listen for `progress` event\r\n //currently listening on FileItem component hook\r\n xhr.onreadystatechange = async (e) => {\r\n //console.log(\"Finished\", xhr);\r\n\r\n //console.log(\"Fui_uploadFormData uploadFile onreadystatechange e.type\", e.type);\r\n //console.log(\"Fui_uploadFormData uploadFile onreadystatechange\", xhr.readyState, xhr.response);\r\n\r\n lastLastState = lastState;\r\n lastState = xhr.readyState;\r\n\r\n if (xhr.readyState === 4) {\r\n if (xhr.response !== \"\") {\r\n //there is th answer\r\n resolve(JsonParseResponse(xhr));\r\n } else {\r\n //error unexpected\r\n // console.log(\"Fui_uploadFormData EMPTY status\", xhr.status);\r\n // console.log(\"Fui_uploadFormData EMPTY readyState\", xhr.readyState);\r\n // console.log(\"Fui_uploadFormData EMPTY upload\", xhr.upload);\r\n //console.log(\"Fui_uploadFormData EMPTY abort\", xhr.abort);\r\n //const jumped = lastLastState - lastLastState !== 1;\r\n resolve(ABORTED_ERROR_RESPONSE);\r\n\r\n }\r\n } else {\r\n //console.log(\"Fui_uploadFormData FuiUpload NOT YET\" + xhr.readyState);\r\n }\r\n };\r\n // open request\r\n xhr.open(finalMethod, endpoint, true);\r\n\r\n //add header to request\r\n addHeaders(xhr, headers);\r\n //start uploading\r\n xhr.send(data);\r\n });\r\n\r\n};\r\n\r\n/**\r\n * \r\n * @param file the extended file to be uploaded\r\n * @param url the endpoint\r\n * @param method the method for uploading\r\n * @param headers headers for request\r\n * @returns \r\n */\r\nexport const uploadExtFile = async (\r\n extFile: ExtFile,\r\n url: string,\r\n method?: Method,\r\n headers?: Record<string, string>,\r\n uploadLabel?: string,\r\n): Promise<ExtFile> => {\r\n return new Promise(async (resolve, reject) => {\r\n try {\r\n const uploader: XMLHttpRequest | undefined = extFile.xhr;\r\n\r\n if (!uploader) {\r\n resolve(NO_XHR_PROVIDED_ERROR(extFile));\r\n return;\r\n }\r\n\r\n const localMethod: Method = method || \"POST\";\r\n const fileToUpload: File = extFile.file as File;\r\n\r\n const formData = new FormData();\r\n\r\n formData.append(uploadLabel || \"file\", fileToUpload);\r\n\r\n // add extra data to upload\r\n const finalExtraData: Record<string, any> =\r\n { otherValue: \"other valueee haaaa\", param2: { tecnica: \"KIKOHUUUU\", friend: \"Chaos\", age: 25 }, ...extFile.extraUploadData };\r\n\r\n addExtraDataUpload(formData, finalExtraData);\r\n //console.log(\"FORMDATA\", formData);\r\n\r\n let responseFui: ServerResponse;\r\n responseFui = await uploadFormData(\r\n uploader,\r\n localMethod,\r\n url,\r\n formData,\r\n headers || {});\r\n\r\n if (responseFui.success) {\r\n // status is true\r\n resolve(makeSuccessUploadResponse(extFile, responseFui));\r\n } else {\r\n // status is false\r\n resolve(makeErrorUploadResponse(extFile, responseFui));\r\n }\r\n } catch (error) {\r\n // on error\r\n //console.log(\"uploadPromiseXHR uploadPromiseXHR ERROR\", error);\r\n resolve(\r\n makeErrorUploadResponse(extFile, UNEXPECTED_ERROR_RESPONSE)\r\n );\r\n }\r\n });\r\n};\r\n\r\n\r\n\r\n\r\nexport function uploadFile(\r\n file: File,\r\n url: string,\r\n method?: Method,\r\n label?: string,\r\n headers?: Record<string, string>\r\n): Promise<ServerResponse> {\r\n return new Promise(async (resolve, reject) => {\r\n\r\n\r\n //start uploading\r\n const formData = new FormData();\r\n\r\n formData.append(label || \"file\", file);\r\n\r\n try {\r\n const serverResponse: ServerResponse = await uploadFormData(new XMLHttpRequest(), method, url, formData, headers);\r\n resolve(serverResponse);\r\n } catch (error) {\r\n // on error\r\n //console.log(\"uploadPromiseXHR uploadPromiseXHR ERROR\", error);\r\n resolve(UNEXPECTED_ERROR_RESPONSE);\r\n }\r\n });\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * @deprecated\r\n * Uploads one formData object to a given endpoint in a promisified way\r\n * @param xhr XMLHTTPrequest object\r\n * @param method method for uploading\r\n * @param endpoint endpoint to upload the file\r\n * @param data FromData object to perform multipart form data\r\n * @param headers the set of headers\r\n * @returns a dui server response that consists on {success, payload, message}\r\n */\r\nexport const FuiUpload = (\r\n xhr: XMLHttpRequest,\r\n method: Method,\r\n endpoint: string,\r\n data: FormData,\r\n headers: Record<string, string>\r\n) => {\r\n return new Promise<ServerResponse>((resolve, reject) => {\r\n //console.log(\"FuiUpload params\", xhr, method, endpoint, data, headers);\r\n\r\n xhr.upload.onload = () => {\r\n //console.log(\"FuiUpload onLoad\", xhr.readyState, xhr.response);\r\n };\r\n\r\n xhr.upload.ontimeout = () => resolve(TIMEOUT_ERROR_RESPONSE);\r\n xhr.upload.onabort = () => resolve(ABORTED_ERROR_RESPONSE);\r\n\r\n // listen for `progress` event\r\n //currently listening on FileMosaic component hook\r\n\r\n xhr.onreadystatechange = async (e) => {\r\n //console.log(\"Finished\", xhr);\r\n //console.log(\"FuiUpload onreadystatechange\", xhr.readyState, xhr.response, xhr);\r\n\r\n if (xhr.readyState === 4) {\r\n if (xhr.response !== \"\") {\r\n //there is th answer\r\n resolve(JsonParseResponse(xhr));\r\n } else {\r\n //error unexpected\r\n resolve(UNEXPECTED_ERROR_RESPONSE);\r\n }\r\n } else {\r\n //console.log(\"FuiUpload NOT YET\" + xhr.readyState);\r\n }\r\n };\r\n // open request\r\n xhr.open(method, endpoint, true);\r\n const headerKeys: string[] = Object.keys(headers);\r\n //const headerValues: string[] = Object.values(headers);\r\n for (let i = 0; i < headerKeys.length; i++) {\r\n //console.log(\"FuiUpload headers\", headerKeys[i], headers[headerKeys[i]]);\r\n xhr.setRequestHeader(\r\n headerKeys[i],\r\n headers[headerKeys[i]]\r\n );\r\n }\r\n //start uploading\r\n xhr.send(data);\r\n });\r\n\r\n};\r\n\r\n\r\n","\r\nimport { ExtFile, ExtFileInstance, ServerResponse, UploadResponse, UPLOADSTATUS } from \"../types\"\r\n\r\nexport const unexpectedErrorUploadResult = (extFile: ExtFile): ExtFile => {\r\n return {\r\n ...extFile,\r\n uploadMessage: \"Unexpected error\",\r\n uploadStatus: \"error\",\r\n serverResponse: {\r\n success: false,\r\n message: \"Error on upload: unexpected error \",\r\n payload: {},\r\n }\r\n }\r\n}\r\nexport const unableToUploadResult = (\r\n extFile: ExtFile\r\n): UploadResponse => {\r\n return {\r\n id: extFile.id,\r\n uploadedFile: {\r\n ...extFile,\r\n uploadMessage: \"Unable to upload. XHR was not provided\",\r\n uploadStatus: \"error\"\r\n },\r\n serverResponse: {\r\n success: false,\r\n message: \"Error on upload: Unable to upload. XHR was not provided \",\r\n payload: {},\r\n }\r\n }\r\n}\r\nexport const completeUploadResult = (\r\n extFile: ExtFile,\r\n serverResponse: ServerResponse,\r\n uploadStatusresult: UPLOADSTATUS\r\n): UploadResponse => {\r\n return {\r\n id: extFile.id,\r\n uploadedFile: {\r\n ...extFile,\r\n uploadMessage: serverResponse.message,\r\n uploadStatus: uploadStatusresult\r\n },\r\n serverResponse: serverResponse\r\n }\r\n}\r\n\r\n/**\r\n * Initializes the xhr attribute for performing uploads\r\n * @param extFileList the list of extended files\r\n * @returns the array of extFiles with the xhr attribute initialized\r\n */\r\nexport const toUploadableExtFileList = (\r\n extFileList: ExtFile[] | ExtFileInstance[]\r\n): ExtFile[] => {\r\n if (!extFileList) return [];\r\n return extFileList.map(extFile => {\r\n return { ...extFile, xhr: new XMLHttpRequest() }\r\n });\r\n}\r\n\r\n/**\r\n * Updates the uploadStatus of the given extFile \r\n * from \"preparing\" to \"uploading\"\r\n * @param extFile the extended file\r\n * @returns the extended file with uploadStatus updated to \"uploading\"\r\n */\r\nexport const instantPreparingToUploadOne = (\r\n extFile: ExtFileInstance | ExtFile\r\n): ExtFileInstance | ExtFile => {\r\n if (extFile.uploadStatus === \"preparing\") {\r\n //for ExtFile instance\r\n extFile.uploadStatus = \"uploading\";\r\n //for ExtFile type\r\n return {\r\n ...extFile,\r\n uploadStatus: \"uploading\",\r\n };\r\n }\r\n return extFile;\r\n};\r\n\r\n/**\r\n * \r\n * @param extFile the extended file\r\n * @returns \r\n */\r\nexport const preparingToUploadOne = (\r\n extFile: ExtFileInstance | ExtFile\r\n): Promise<ExtFileInstance | ExtFile> => {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n if (extFile.uploadStatus === \"preparing\") {\r\n //for ExtFile instance\r\n extFile.uploadStatus = \"uploading\";\r\n //for ExtFile type\r\n resolve({\r\n ...extFile,\r\n uploadStatus: \"uploading\",\r\n });\r\n } else\r\n resolve(extFile);\r\n }, 1500);\r\n });\r\n};\r\n/**\r\n * Sleeps for 1200 miliseconds for showing a better transition\r\n * on uploading\r\n * @param time the time to sleep in miliseconds\r\n * @returns true is everything is ok\r\n */\r\nexport const sleepTransition = (time = 1500\r\n): Promise<boolean> => {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve(true);\r\n }, time);\r\n });\r\n}\r\n/**\r\n * Removes the deleted files and updates the aborted ones with a message\r\n * @param arrExtFile incomming arr of extFle instances\r\n * @returns an array of ExtFle objects\r\n */\r\nexport const sanitizeArrExtFile = (arrExtFile: ExtFileInstance[]): ExtFile[] => {\r\n \r\n return arrExtFile.filter((extFileInstance: ExtFileInstance) =>\r\n !extFileInstance.extraData?.deleted)\r\n\r\n .map((extFileInstance: ExtFileInstance) => {\r\n if (extFileInstance.uploadStatus === \"aborted\"\r\n && !extFileInstance.uploadMessage) {\r\n // TO-DO: ad localization for this message\r\n extFileInstance.uploadMessage = \"Upload aborted by user\";\r\n //extFileInstance.uploadStatus = \"error\";\r\n }\r\n return ExtFileInstance.toExtFile(extFileInstance) as ExtFile\r\n });\r\n}\r\n/**\r\n * \r\n * @param extFileInstance \r\n * @param extFileobj \r\n */\r\nexport const setNextUploadStatus = (\r\n extFileInstance: ExtFileInstance,\r\n extFileobj: ExtFile) => {\r\n\r\n const prevStatus: UPLOADSTATUS | undefined = extFileInstance.uploadStatus;\r\n const nextStstaus: UPLOADSTATUS | undefined = extFileobj.uploadStatus;\r\n\r\n //console.log(\"setNextUploadStatus\", prevStatus, nextStstaus);\r\n //console.log(\"setNextUploadStatus\", extFileInstance.uploadMessage, extFileobj.uploadMessage);\r\n if (\r\n prevStatus === \"preparing\" &&\r\n [\"aborted\", undefined].includes(nextStstaus)\r\n ) {\r\n extFileInstance.uploadStatus = undefined;\r\n extFileInstance.uploadMessage = extFileobj.uploadMessage;\r\n\r\n } else if (\r\n prevStatus === \"uploading\" &&\r\n [\"aborted\", undefined].includes(nextStstaus)\r\n ) {\r\n extFileInstance.uploadStatus = \"aborted\";\r\n extFileInstance.uploadMessage = extFileobj.uploadMessage;\r\n\r\n }\r\n\r\n}\r\n\r\n","import { NamedColor } from \"../types/NamedColor\";\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\nexport const NAMED_COLORS: NamedColor =\r\n{\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}","import { NAMED_COLORS } from \"./namedColors\";\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\nexport const darkerColor = (colorInput: string, percentage = 25): string => {\r\n let darkedColor = \"\";\r\n const reduce = (100 - percentage) / 100;\r\n let component1: number = 0;\r\n let component2: number = 0;\r\n let component3: number = 0;\r\n if (isHexColor(colourNameToHex(colorInput))) {\r\n\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\r\n darkedColor = `rgb(${component1 * reduce}, ${component2 * reduce},${component3 * reduce})`;\r\n } else {\r\n if (colorInput.includes(\"rgba\")) {\r\n let slicer = colorInput.replace(\"rgba(\", \"\");\r\n let components: string[] = 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 } else if (colorInput.includes(\"rgb\")) {\r\n\r\n let slicer = colorInput.replace(\"rgb(\", \"\");\r\n let components: string[] = 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\r\n return darkedColor;\r\n}\r\n/**\r\n * Make the color into a brighted color\r\n * @param colorInput \r\n * @returns the brighted color \r\n */\r\nexport const brighterColor = (colorInput: string, percentage = 25): string => {\r\n let brightedColor = \"\";\r\n const increase = (100 + percentage) / 100;\r\n let component1: number = 0;\r\n let component2: number = 0;\r\n let component3: number = 0;\r\n if (isHexColor(colourNameToHex(colorInput))) {\r\n\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\r\n brightedColor = `rgb(${component1 * increase}, ${component2 * increase},${component3 * increase})`;\r\n } else {\r\n if (colorInput.includes(\"rgba\")) {\r\n let slicer = colorInput.replace(\"rgba(\", \"\");\r\n let components: string[] = slicer.split(\",\");\r\n brightedColor = `rgb(${parseInt(components[0], 10) * increase}, ${parseInt(components[1], 10) * increase},${parseInt(components[2], 10) * increase})`;\r\n //return darkedColor;\r\n } else if (colorInput.includes(\"rgb\")) {\r\n\r\n let slicer = colorInput.replace(\"rgb(\", \"\");\r\n let components: string[] = slicer.split(\",\");\r\n brightedColor = `rgb(${parseInt(components[0], 10) * increase}, ${parseInt(components[1], 10) * increase},${parseInt(components[2], 10) * increase})`;\r\n // return darkedColor;\r\n }\r\n }\r\n\r\n return brightedColor;\r\n}\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\nexport const hexColorToRGB = (colorInput: string | undefined, perc = 0, defaultColor?: string): string => {\r\n let resultDefault: string = 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 const color: string = colorInput.toUpperCase();\r\n // is already a rgba color\r\n if (color.includes(\"RGBA\")) {\r\n return color;\r\n }\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\r\n // if is a hex color or named color\r\n if (!isHexColor(colourNameToHex(color))) {\r\n return resultDefault;\r\n }\r\n let resultOk: string = \"\";\r\n //let strVar: string = \"\";\r\n let component1: number = 0;\r\n let component2: number = 0;\r\n let component3: number = 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/**\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\nexport const isHexColor = (colorInput: string): boolean => {\r\n\r\n // if first element is no '#' return default background color\r\n if (colorInput.charAt(0) !== '#') {\r\n\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\r\n\r\n return false;\r\n }\r\n // if one of the letters is not included in hex array return default\r\n for (let i = 1; i < colorInput.length; i++) {\r\n if (!hexArray.includes(colorInput.charAt(i))) {\r\n\r\n\r\n return false;\r\n }\r\n }\r\n\r\n return true;\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\nexport function colourNameToHex(colour: string | undefined): string {\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 (NAMED_COLORS[colour.toLocaleLowerCase()] !== undefined) {\r\n return NAMED_COLORS[colour.toLocaleLowerCase()];\r\n }\r\n /**\r\n * When the named color was not found\r\n */\r\n\r\n return colour;\r\n}\r\n\r\n/**\r\n * hexArray & decArray\r\n * \r\n * arrays of numbers used to convert hexadecimal numbers into decimal and viceversa\r\n */\r\nconst hexArray = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];\r\nconst decArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];\r\n\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\nexport const hexTodec = (letter: string): number => {\r\n if (hexArray.includes(letter)) {\r\n return decArray[hexArray.indexOf(letter)];\r\n } else {\r\n return 0;\r\n }\r\n}\r\n\r\n\r\n/** \r\n * Asure a base color. 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\nexport const asureColor = (color?: string): string => {\r\n if (color !== undefined && color !== \"\") {\r\n return color;\r\n } else {\r\n return DEFAULT_FONT_COLOR;\r\n }\r\n}\r\n/** \r\n * Asure a base color. 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\nexport const completeAsureColor = (color?: string, perc = 1): string => {\r\n\r\n return hexColorToRGB(asureColor(colourNameToHex(color)), perc);\r\n\r\n}\r\n\r\n\r\n\r\nexport const DEFAULT_FONT_COLOR = \"#646c7f\";","import { ExtFile, ExtFileInstance, ExtFileManager } from \"../types\";\r\n\r\nexport const extFileReconcilation = (\r\n dropzoneId: number | string | undefined,\r\n extFileIncomming: ExtFile[]\r\n): ExtFile[] | undefined => {\r\n let result: ExtFile[] = [];\r\n\r\n let arrOfExtFiles: ExtFileInstance[] | undefined =\r\n ExtFileManager.getExtFileInstanceList(dropzoneId);\r\n\r\n // continue only if arrOfExtFiles exists\r\n if (arrOfExtFiles) {\r\n //different sizes means there was deleted files\r\n //also can be new files to be uploaded\r\n //needed an extra flag to allow add files in the middle of uploading process\r\n // if new files are added, they are added to the Manager\r\n // outside they were already added to the UI\r\n // inside Dropzone, will be needed a .next() method for manager\r\n\r\n // 1st allow deleted files and ignore new ones\r\n // reduce the arrOfExtFileInstances array\r\n // parecido a listas ligadas, iterar hasta encontrar null XD\r\n let incommingTemp: ExtFile[] = [...extFileIncomming];\r\n incommingTemp = incommingTemp.filter(\r\n (F) => arrOfExtFiles?.findIndex(I => I.id === F.id) === -1\r\n );\r\n\r\n //console.log(\"reconciliation incommingTemp\", incommingTemp);\r\n \r\n\r\n //different sizes not allowed\r\n if (arrOfExtFiles.length !== extFileIncomming.length || extFileIncomming.length === 0) {\r\n return undefined;\r\n }\r\n for (let i = 0; i < arrOfExtFiles.length; i++) {\r\n if (\r\n (extFileIncomming[i].uploadStatus === undefined)\r\n &&\r\n (arrOfExtFiles[i].uploadStatus === \"preparing\")\r\n ) {\r\n //console.log(\"useDropzoneFileListUpdater onCancel i\", i);\r\n arrOfExtFiles[i].uploadStatus = undefined;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n}"],"names":["fileSizeFormater","fileSize","toFixed","DropzoneItalian","defaultLabel","uploadingMessage","amountOfFiles","uploadFinished","uploaded","rejected","concat","noFilesMessage","footer","acceptAll","acceptCustom","accept","header","uploadFilesMessage","maxSizeMessage","maxFileSize","validFilesMessage","numberOfValidFiles","maxFiles","fakeuploadsuccess","fakeUploadError","FileItemItalian","fullInfoLayer","name","size","type","status","preparing","uploading","success","valid","denied","error","aborted","ValidateErrorItalian","maxSizeError","maxSize","acceptError","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","includes","readAsDataURL","file","onProgress","onError","Promise","resolve","reject","reader_1","FileReader","onprogress","onerror","onload","result","undefined","readAsText","encoding","reader_2","readAsBinaryString","reader_3","readAsArrayBuffer","reader_4","resizeImage","base64Str","maxWidth","maxHeight","img_1","Image","src","canvas","document","createElement","MAX_WIDTH","MAX_HEIGHT","width","height","ctx","getContext","drawImage","toDataURL","process","env","NODE_ENV","console","getImageOrientation","imageSource","length","ev","sevenzip","aac","abw","accdb","avi","azw","bmp","bz","bz2","cda","csh","css","csv","docx","drawio","eot","epub","freearc","gif","gzip","html","icalendar","java","jar","javascript","jpeg","json","jsonld","midi","mp3","mp4","mpeg","mpkg","octet","odp","ods","odt","oga","ogv","ogx","opus","otf","pdf","php","png","pptx","psd","python","tar","rar","react","rtf","sass","sh","swf","text","tiff","ttf","typescript","vsd","vue","wav","webm","weba","webp","wma","wmv","woff","xlsx","xml","xul","zip","getExt","fileName","exec","DEF_GEN_MIME","audioSelector","tailMime","textSelector","imageSelector","fontSelector","videoSelector","applicationSelector","mimeSelector","mimeType","headerMime","split","extensionSelector","extension","genericMime","checkIsCode","getURLFileIco","customIcons","fallBack","url","mimeResume","mimeUrlList","extention","customUrl","getURLFileIcoFromNameAndType","arc","mp2t","xhtml","ExtFileInstance","extFile","id","imageUrl","errors","uploadMessage","uploadStatus","progress","xhr","extraData","extraUploadData","serverResponse","downloadUrl","videoUrl","this","toExtFile","extFileInstance","extFileClone","extFileInstanceKeys","Object","keys","extFileInstanceValues","values","i","currentValue","currKey","prototype","ExtFileManager","getNextId","nextId","setFileList","extFilesInstances","fileLists","__spreadArray","createFileListMap","removeFileListMap","getExtFileInstanceList","setFileListMapPreparing","dropzoneId","localFiles","validateFiles","cleanOnUpload","resultExtList","temLocalFiles","filter","map","__assign","F","setFileListMapPreparing2","createUploadConfig","method","headers","uploadLabel","cleanonUpload","SyntheticFile","createFile","File","defineProperty","get","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_x_mid","create_midi","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_3gp","create_3gp2","create_3gp_a","create_3gp_v","create_7z","create_python","create_java","create_react","create_vue","createFileListMiscelanious","listFile","push","createListOfMultiTypeFile","createSyntheticFile","FileIdGenerator","fileListToExtFileArray","fileList","extFileArray","f","fileListToExtFileInstanceArray","isValidateActive","validator","shrinkWord","word","card","newWord","slice","setPrepToUploading","setTimeout","uploadOne","sleepPreparing","preparingTime","prepToUploadOne","uploadOneExtFile","fakeFuiUpload","Math","floor","random","message","payload","getRandomInt","min","max","cleanInput","inputElement","value","addClassName","baseClassName","className","isUploadAbleExtFile","validateFilesFlag","getLocalFileItemData","localFileName","localFileType","localFileSize","separateAccept","acceptItem","trim","validateAccept","charAt","headerMimeFile","tailMimeFile","fileListvalidator","preValidatedFiles","remainingValids","localValidator","localization","output","countdown","ValidationErrorLocalizer","validatedFile","validateFile","maxFileErrorMessenger","Infinity","validateExtFileList","extFileList","localValidatorProps","fileListResult","remaining","currentExtFile","validateExtFile","validatorProps","localErrors","extFileResult","errorsResult","apply","maxFileSizeErrorMessenger","isValid","idGenerated","listOfErrors","makeSyntheticExtFile","ceil","newUpoadStatus","getRandomUploadStatus","customUploadMessage","randInt","extFileMock","XMLHttpRequest","extraData1","extraData2","deleted","addExtraData","formData","extraDataKeys","append","addHeaders","headerKeys","setRequestHeader","TIMEOUT_ERROR_RESPONSE","ABORTED_ERROR_RESPONSE","JSON_PARSE_ERROR_RESPONSE","UNEXPECTED_ERROR_RESPONSE","NO_XHR_PROVIDED_ERROR","makeServerResponse","JsonParseResponse","jsonResponse","JSON","parse","response","makeSuccessUploadResponse","responseFui","makeErrorUploadResponse","uploadFormData","endpoint","data","finalMethod","toUpperCase","upload","ontimeout","onabort","onloadend","e","__awaiter","onreadystatechange","readyState","open","send","uploadExtFile","uploader","localMethod","fileToUpload","FormData","finalExtraData","otherValue","param2","tecnica","friend","age","addExtraDataUpload","_a","uploadFile","label","_this","sent","FuiUpload","unexpectedErrorUploadResult","unableToUploadResult","uploadedFile","completeUploadResult","uploadStatusresult","toUploadableExtFileList","instantPreparingToUploadOne","preparingToUploadOne","sleepTransition","time","sanitizeArrExtFile","arrExtFile","setNextUploadStatus","extFileobj","prevStatus","nextStstaus","NAMED_COLORS","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","darkerColor","colorInput","percentage","darkedColor","reduce","component1","component2","component3","isHexColor","colourNameToHex","hexTodec","components","replace","parseInt","brighterColor","brightedColor","increase","hexColorToRGB","perc","defaultColor","resultDefault","color","hexArray","colour","toLocaleLowerCase","decArray","letter","indexOf","asureColor","DEFAULT_FONT_COLOR","completeAsureColor","extFileReconcilation","extFileIncomming","arrOfExtFiles","incommingTemp","findIndex","I"],"mappings":"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"} \ No newline at end of file diff --git a/src/files-ui/core/index.js b/src/files-ui/core/index.js index 62503b7a6166a64202dad6b4f3356f21f079fbd6..73109351a6991b2093e65cc3cc6c84d258038c69 100644 --- a/src/files-ui/core/index.js +++ b/src/files-ui/core/index.js @@ -1,2 +1,2 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=function(e){if(e)return e<1024?e+" Bytes":e<1048576?(e/1024).toFixed(2)+" KB":e<1073741824?(e/1024/1024).toFixed(2)+" MB":e<1099511627776?(e/1024/1024/1024).toFixed(2)+" GB":(e/1024/1024/1024/1024).toFixed(2)+" TB"},t={defaultLabel:"Trascina qui i tuoi file",uploadingMessage:function(e){return"Caricamento di ".concat(e," file")},uploadFinished:function(e,t){return"File caricati: ".concat(e,", File rifiutati: ").concat(t)},noFilesMessage:"Nessun file valido in attesa di essere caricato",footer:{acceptAll:"Tutti i tipi di file sono accettati",acceptCustom:function(e){return"Tipi di file consentiti: ".concat(e)}},header:{uploadFilesMessage:"Caricamento",maxSizeMessage:function(e){return"Dimensione massima ".concat(e)},validFilesMessage:function(e,t){return"File ".concat(e,"/").concat(t)}},fakeuploadsuccess:"Il file è stato caricato con successo ",fakeUploadError:"Errore di caricamento del file"},r={fullInfoLayer:{name:"Nome: ",size:"Dimensione: ",type:"Tipo: "},status:{preparing:"preparazione",uploading:"In corso",success:"Successo",valid:"Valido",denied:"Non válido",error:"Errore",aborted:"Interrotto"}},a={maxSizeError:function(t){return"Il file è molto grande. Il tam. il massimo è ".concat(e(t))},acceptError:"Tipo di file illegale",maxFileCount:function(e){return"Numero massimo di file (".concat(e,") raggiunto")}},n={defaultLabel:"Déposez vos fichiers ici",uploadingMessage:function(e){return"Envoi de ".concat(e," fichiers")},uploadFinished:function(e,t){return"Fichiers téléchargés : ".concat(e,", Fichiers rejetés: ").concat(t)},noFilesMessage:"Aucun fichier valide ne manque",footer:{acceptAll:"Tous types de fichiers acceptés ",acceptCustom:function(e){return"Types de fichier: ".concat(e)}},header:{uploadFilesMessage:"Envoyer",maxSizeMessage:function(e){return"Taille maximale ".concat(e)},validFilesMessage:function(e,t){return"Fichiers ".concat(e,"/").concat(t)}},fakeuploadsuccess:"Le fichier a été téléchargé avec succès",fakeUploadError:"Erreur lors du téléchargement "},o={fullInfoLayer:{name:"Le nom: ",size:"Le taille: ",type:"Le type: "},status:{preparing:"préparer",uploading:"En cours",success:"Succès",valid:"Valide",denied:"Refusé",error:"Erreur",aborted:"Interrompu"}},i={maxSizeError:function(t){return"Le fichier est très volumineux. Le tam. le maximum est de ".concat(e(t))},acceptError:"Type de fichier illégal ",maxFileCount:function(e){return"Limite de fichiers atteinte (".concat(e,")")}},s={defaultLabel:"Drop your files here",uploadingMessage:function(e){return"Uploading ".concat(e," files")},uploadFinished:function(e,t){return"Uploaded files: ".concat(e,", Rejected files: ").concat(t)},noFilesMessage:"There is no missing valid file to upload",footer:{acceptAll:"All file types accepted",acceptCustom:function(e){return"Allowed types: ".concat(e)}},header:{uploadFilesMessage:"Upload files",maxSizeMessage:function(e){return"Max file size: ".concat(e)},validFilesMessage:function(e,t){return"Files ".concat(e,"/").concat(t)}},fakeuploadsuccess:"File was successfuly uploaded",fakeUploadError:"Error on uploading. Please try again later."},c={fullInfoLayer:{name:"Name: ",size:"Size: ",type:"Type: "},status:{preparing:"Preparing",uploading:"Uploading",success:"Success",valid:"Valid",denied:"Not valid",error:"Error",aborted:"Aborted"}},u={maxSizeError:function(t){return"File is too big. Max file size allowed is ".concat(e(t))},acceptError:"File type is not allowed",maxFileCount:function(e){return"Max amount of files (".concat(e,") has been reached")}},l={defaultLabel:"Suelta tus archivos aquí",uploadingMessage:function(e){return"Subiendo ".concat(e," archivos")},uploadFinished:function(e,t){return"Archivos subidos: ".concat(e,", Archivos rechazados: ").concat(t)},noFilesMessage:"No hay archivos válidos pendientes por subir",footer:{acceptAll:"Todos los tipos de archivo aceptados",acceptCustom:function(e){return"Tipo(s) de archivo permitidos: ".concat(e)}},header:{uploadFilesMessage:"Subir",maxSizeMessage:function(e){return"Tam. máximo ".concat(e)},validFilesMessage:function(e,t){return"Archivos ".concat(e,"/").concat(t)}},fakeuploadsuccess:"El archivo se subió correctamente",fakeUploadError:"Error al subir el archivo"},p={fullInfoLayer:{name:"Nombre: ",size:"Tamaño: ",type:"Tipo: "},status:{preparing:"Preparando",uploading:"Subiendo",success:"Éxito",valid:"Válido",denied:"No válido",error:"Error",aborted:"Anulado"}},d={maxSizeError:function(t){return"El archivo es muy grande. El tam. máximo es ".concat(e(t))},acceptError:"Tipo de archivo no permitido",maxFileCount:function(e){return"Cantidad máxima de archivos (".concat(e,") alcanzada")}},f={defaultLabel:"Перетащите сюда свои файлы.",uploadingMessage:function(e){return"Выгрузка ".concat(e," файлов")},uploadFinished:function(e,t){return"Загружено файлов: ".concat(e,", отклоненных файлов: ").concat(t)},noFilesMessage:"Действительный файл не отсутствует для загрузки",footer:{acceptAll:"Принимаются все типы файлов ",acceptCustom:function(e){return"Допустимые типы: ".concat(e)}},header:{uploadFilesMessage:"Отправить",maxSizeMessage:function(e){return"макс размер: ".concat(e)},validFilesMessage:function(e,t){return"Файлы ".concat(e,"/").concat(t)}},fakeuploadsuccess:"Файл был успешно загружен",fakeUploadError:"Ошибка при загрузке"},g={fullInfoLayer:{name:"Имя: ",size:"Размер: ",type:"Tип: "},status:{preparing:"подготовка",uploading:"Загрузка",success:"успех",valid:"годный",denied:"выкинутый",error:"ошибка",aborted:"прерванный"}},m={maxSizeError:function(t){return"Файл слишком большой. Максимально допустимый размер файла - ".concat(e(t))},acceptError:"Тип файла не разрешен",maxFileCount:function(e){return"Достигнуто максимальное количество файлов (".concat(e,")")}},h={defaultLabel:"Solte seus arquivos aqui ",uploadingMessage:function(e){return"Enviando ".concat(e," arquivos")},uploadFinished:function(e,t){return"Arquivos enviados: ".concat(e,", Arquivos rejeitados: ").concat(t)},noFilesMessage:"Nenhum arquivo válido está faltando para enviar",footer:{acceptAll:"Todos os tipos de arquivo são aceitos",acceptCustom:function(e){return"Tipos permitidos: ".concat(e)}},header:{uploadFilesMessage:"Enviar",maxSizeMessage:function(e){return"Tamanho máximo: ".concat(e)},validFilesMessage:function(e,t){return"Arquivos ".concat(e,"/").concat(t)}},fakeuploadsuccess:"O arquivo foi enviado com sucesso",fakeUploadError:"Erro ao enviar"},x={fullInfoLayer:{name:"Nome: ",size:"Tamanho: ",type:"Tipo: "},status:{preparing:"Preparando",uploading:"Enviando",success:"Êxito",valid:"válido",denied:"Negado",error:"Erro",aborted:"Abortado"}},b={maxSizeError:function(t){return"O arquivo é muito grande. O tamanho máximo de arquivo permitido é ".concat(e(t))},acceptError:"O tipo de arquivo não é permitido ",maxFileCount:function(e){return"Quantidade máxima de arquivos (".concat(e,") alcançada")}},v={defaultLabel:"将您的文件放在这里",uploadingMessage:function(e){return"上传 ".concat(e," 个文件")},uploadFinished:function(e,t){return"上传文件:".concat(e,",拒绝文件:").concat(t)},noFilesMessage:"没有缺少要加载的有效文件",footer:{acceptAll:"接受所有文件类型",acceptCustom:function(e){return"允许的类型: ".concat(e)}},header:{uploadFilesMessage:"上传文件",maxSizeMessage:function(e){return"最大文件大小:".concat(e)},validFilesMessage:function(e,t){return"文档 ".concat(e,"/").concat(t)}},fakeuploadsuccess:"文件已成功上传",fakeUploadError:"上传时出错"},F={fullInfoLayer:{name:"文档名称: ",size:"尺寸: ",type:"文件类型: "},status:{preparing:"预加载",uploading:"上传",success:"成功",valid:"接受的文件",denied:"被拒绝的文件",error:"错误",aborted:"中止"}},w={maxSizeError:function(t){return"文件太大。 允许的最大文件大小为 ".concat(e(t))},acceptError:"文件类型不允许",maxFileCount:function(e){return"已达到最大文件数 (".concat(e,")")}},_={defaultLabel:"把你的文件放在這裡 ",uploadingMessage:function(e){return"上傳".concat(e,"個文件")},uploadFinished:function(e,t){return"上傳文件: ".concat(e,", 拒絕的文件:").concat(t)},noFilesMessage:"沒有缺少要上傳的有效文件",footer:{acceptAll:"接受所有文件類型",acceptCustom:function(e){return"允許的類型:".concat(e)}},header:{uploadFilesMessage:"上傳文件",maxSizeMessage:function(e){return"最大文件大小:".concat(e)},validFilesMessage:function(e,t){return" 文件 ".concat(e,"/").concat(t)}},fakeuploadsuccess:"文件已成功上傳",fakeUploadError:"上傳時出錯"},E={fullInfoLayer:{name:"文檔名稱: ",size:"文件大小: ",type:"文件類型: "},status:{preparing:"預加載",uploading:"上傳",success:"成功",valid:"有效文件",denied:"無效文件",error:"錯誤",aborted:"中止"}},y={maxSizeError:function(t){return"文件太大。 允許的最大文件大小為 ".concat(e(t))},acceptError:"文件類型不允許",maxFileCount:function(e){return"已達到最大文件數 (".concat(e,")")}},A={"ES-es":p,"EN-en":c,"FR-fr":o,"IT-it":r,"PT-pt":x,"RU-ru":g,"ZH-cn":F,"ZH-hk":E},z={"ES-es":l,"EN-en":s,"FR-fr":n,"IT-it":t,"PT-pt":h,"RU-ru":f,"ZH-cn":v,"ZH-hk":_},S=function(e){switch(e){case"ES-es":return z["ES-es"];case"EN-en":default:return z["EN-en"];case"FR-fr":return z["FR-fr"];case"IT-it":return z["IT-it"];case"PT-pt":return z["PT-pt"];case"RU-ru":return z["RU-ru"];case"ZH-cn":return z["ZH-cn"];case"ZH-hk":return z["ZH-hk"]}},k={"ES-es":d,"EN-en":u,"FR-fr":i,"IT-it":a,"PT-pt":b,"RU-ru":m,"ZH-cn":w,"ZH-hk":y},D=function(e){return e&&["ES-es","EN-en","FR-fr","IT-it","PT-pt","RU-ru","ZH-cn","ZH-hk"].includes(e)?k[e]:k["EN-en"]};var C="https://user-images.githubusercontent.com/43678736/132086517-72a51a12-e403-4675-bfd7-22c23affa730.png",R="https://user-images.githubusercontent.com/43678736/132086518-7026d4f1-ea16-4ed0-89fd-37c1aa8ac3ed.png",M="https://user-images.githubusercontent.com/43678736/132086519-863c63b4-917e-4471-94ff-7e15651cc14b.png",j="https://user-images.githubusercontent.com/43678736/132086520-9bc6aa3b-51c9-4da2-9ef7-349162b86d0b.png",I="https://user-images.githubusercontent.com/43678736/132086521-dbd6cf0d-d4d7-4b92-bb26-17e8a51a9383.png",T="https://user-images.githubusercontent.com/43678736/132086522-070f48e8-78a8-4294-8dbb-aab81525e164.png",L="https://user-images.githubusercontent.com/43678736/132086595-90ab7f90-f87e-4900-94d9-d0b26745df48.png",U="https://user-images.githubusercontent.com/43678736/132086597-e285ad5c-613a-4679-a270-493e5be4ffd9.png",B="https://user-images.githubusercontent.com/43678736/132086598-623c410a-084a-4395-a448-211b2ff61cfe.png",N="https://user-images.githubusercontent.com/43678736/132086600-8b70a007-512d-4252-9c66-eabd3ddd6573.png",P="https://user-images.githubusercontent.com/43678736/132086601-e62e5d1a-d8a2-4475-a14f-85922cec9272.png",O="https://user-images.githubusercontent.com/43678736/132086602-4c772934-f608-4f01-8459-c4622cee8ad5.png",q="https://user-images.githubusercontent.com/43678736/132086604-b5b019fe-572e-477e-92c2-3769a48a1304.png",H="https://user-images.githubusercontent.com/43678736/132086606-715ccb66-4702-4f7d-9b09-ac93ba17b643.png",V="https://user-images.githubusercontent.com/43678736/132086608-bcae9d57-8e54-488c-90c4-4952ae530b5e.png",Z="https://user-images.githubusercontent.com/43678736/132086618-397d6bd2-9fda-43ed-a135-cb40388c35af.png",G="https://user-images.githubusercontent.com/43678736/132086620-2586ba40-c583-4589-b1a4-8bb5b258b44d.png",X="https://user-images.githubusercontent.com/43678736/132086621-3b95fb64-2533-4ccc-abcd-bd2beba572e9.png",J="https://user-images.githubusercontent.com/43678736/132086622-af705a0c-2b25-4ba7-8ab6-bd69ec97f7e2.png",K="https://user-images.githubusercontent.com/43678736/132086624-89141a46-64e4-4fa0-bf69-54a0eb4d48c9.png",Q="https://user-images.githubusercontent.com/43678736/132086625-1b8f2652-1de0-4475-8c12-7da4a9973ffb.png",W="https://user-images.githubusercontent.com/43678736/132086626-38699705-1e6f-4bca-984b-03167b236faa.png",$="https://user-images.githubusercontent.com/43678736/132086650-f1166246-b361-4c30-a04e-9781c555d14a.png",Y="https://user-images.githubusercontent.com/43678736/132086650-f1166246-b361-4c30-a04e-9781c555d14a.png",ee="https://user-images.githubusercontent.com/43678736/132086652-4562942e-aaea-466c-968f-380fffabf3f9.png",te="https://user-images.githubusercontent.com/43678736/132086653-0487e7e2-1ee3-49e2-8cfe-3e20f1f7490a.png",re="https://user-images.githubusercontent.com/43678736/132086656-6e96c815-e4e2-4ffd-9d71-57e9cc2450bc.png",ae="https://user-images.githubusercontent.com/43678736/132086658-5d27d3c2-394f-43fb-b512-9b414a257875.png",ne="https://user-images.githubusercontent.com/43678736/132086659-98f3ef6e-b9f3-4b6d-b18f-469b5334ba27.png",oe="https://user-images.githubusercontent.com/43678736/132086661-a5484553-06c7-4ffa-a8f9-96b57b1b0344.png",ie="https://user-images.githubusercontent.com/43678736/132086662-05ad1597-d5e5-4efa-833e-2876e966a745.png",se="https://user-images.githubusercontent.com/43678736/132086663-90c58955-f7fb-4bdb-ac53-92667d16d4a3.png",ce="https://user-images.githubusercontent.com/43678736/132086664-9a7530e7-6d78-4ef3-a176-20cf7f57b555.png",ue="https://user-images.githubusercontent.com/43678736/132086666-ab3c505d-b2c0-4177-9a06-aed5d9c39ee4.png",le="https://user-images.githubusercontent.com/43678736/132086667-6c7dcbcc-8d83-41a2-8e0a-85b09e2791ae.png",pe="https://user-images.githubusercontent.com/43678736/132086668-9f246e91-cf2e-49cf-9617-e1fbb71abbbb.png",de="https://user-images.githubusercontent.com/43678736/132086669-46113762-84d1-4b32-9441-b0138ce17a5d.png",fe="https://user-images.githubusercontent.com/43678736/145835364-2054509d-3448-4d34-921f-73dd6e297fc7.png",ge="https://user-images.githubusercontent.com/43678736/145835367-19172bf8-cd5a-4cbe-b512-d0de1d91f269.png",me="https://user-images.githubusercontent.com/43678736/145835373-a57ef0f5-3968-483b-9f55-6d67e7f1dcea.png",he="https://user-images.githubusercontent.com/43678736/132086670-0f96e770-cedc-4635-a5f9-cf97894c1d7a.png",xe="https://user-images.githubusercontent.com/43678736/132086671-02ad35ef-ec3a-4a65-abd5-5bf794dfcf7b.png",be="https://user-images.githubusercontent.com/43678736/132086672-3a856fda-823d-4997-b802-c7c640e6ef44.png",ve="https://user-images.githubusercontent.com/43678736/132086673-0c4409ab-754e-4619-8cfa-179d0ccf1bd9.png",Fe="https://user-images.githubusercontent.com/43678736/132086674-fdb56d02-5845-49b7-8462-6357bc963464.png",we="https://user-images.githubusercontent.com/43678736/132086675-c879645d-acb4-41a6-ab3c-4e6c2048badb.png",_e="https://user-images.githubusercontent.com/43678736/132086685-4e327c4c-a409-4b83-b36a-8d88936b314b.png",Ee="https://user-images.githubusercontent.com/43678736/132086688-8e82fae4-3a9b-49c0-bf99-77189525514c.png",ye="https://user-images.githubusercontent.com/43678736/132086689-fe1fef9f-d2db-455b-8f4b-09acd095f571.png",Ae="https://user-images.githubusercontent.com/43678736/132086689-fe1fef9f-d2db-455b-8f4b-09acd095f571.png",ze="https://user-images.githubusercontent.com/43678736/132086691-d472576b-ec6a-4332-acd2-dd6a00b72952.png",Se="https://user-images.githubusercontent.com/43678736/132086693-9d43571e-0c86-438f-b247-e2cb42e19e06.png",ke="https://user-images.githubusercontent.com/43678736/132086694-4e661d6a-1118-441e-8bc3-c52fcb2133b6.png",De="https://user-images.githubusercontent.com/43678736/132086697-1d82d724-35b6-4f06-847a-3c59a5deda6e.png",Ce="https://user-images.githubusercontent.com/43678736/132086698-19384230-dbd7-4e05-bc69-ef4537b6aae3.png",Re="https://user-images.githubusercontent.com/43678736/132086699-5993a482-04f4-4915-b105-9037f527cf61.png",Me="https://user-images.githubusercontent.com/43678736/132086700-c23461c8-6819-46e1-aecd-0a1f8d3507bb.png",je="https://user-images.githubusercontent.com/43678736/132086701-c8044c09-8d95-4af1-9410-66761001d7da.png",Ie="https://user-images.githubusercontent.com/43678736/132086702-59294337-ed99-4302-badd-316b2c1ff62f.png",Te="https://user-images.githubusercontent.com/43678736/132086704-8fd51e7c-afa2-47a3-ab2f-d0bcd0ecae9f.png",Le="https://user-images.githubusercontent.com/43678736/132086705-33294da1-5c0f-49f7-b890-e4857cec0a6d.png",Ue="https://user-images.githubusercontent.com/43678736/132086706-22f805d0-39d4-494b-824e-47dc75d05eb7.png",Be="https://user-images.githubusercontent.com/43678736/132086707-e61a84de-d396-4dbf-8d1b-1d6ee19e1ac8.png",Ne="https://user-images.githubusercontent.com/43678736/132086707-e61a84de-d396-4dbf-8d1b-1d6ee19e1ac8.png",Pe="https://user-images.githubusercontent.com/43678736/132086708-21d096dd-7148-40aa-97f1-cbb099339740.png",Oe="https://user-images.githubusercontent.com/43678736/132086709-811d4e90-3cfa-4044-a956-aeda9c67fc92.png",qe="https://user-images.githubusercontent.com/43678736/132086710-c5479c6c-0249-4542-adad-48b0ef40b775.png",He="https://user-images.githubusercontent.com/43678736/132086711-1524a3e7-3e33-4822-a34f-ff3235404045.png",Ve="https://user-images.githubusercontent.com/43678736/132086712-17e2c491-f6e4-4586-aef6-06bcc5f4b0e5.png",Ze="https://user-images.githubusercontent.com/43678736/132086715-204b5a8b-9c5a-4bac-8294-9237ebc16089.png",Ge="https://user-images.githubusercontent.com/43678736/132086716-64511d20-58cb-45a8-85df-f4d9408b469d.png",Xe="https://user-images.githubusercontent.com/43678736/132086718-a8499333-6282-4820-aa1f-4d133eb54648.png",Je=function(e){var t=/(?:\.([^.]+))?$/.exec(e);return t?t[1]:""},Ke="octet",Qe=function(e){switch(e){case"aac":return"aac";case"midi":case"x-midi":return"midi";case"mpeg":return"mpeg";case"ogg":return"oga";case"opus":return"opus";case"wav":return"wav";case"webm":return"webm";case"wma":return"wma";default:return Ke}},We=function(e){switch(e){case"css":return"css";case"csv":return"csv";case"html":return"html";case"calendar":return"icalendar";case"javascript":case"x-javascript":return"javascript";case"plain":return"text";case"xml":return"xml";default:return Ke}},$e=function(e){switch(e){case"bmp":return"bmp";case"gif":return"gif";case"jpg":case"jpeg":return"jpeg";case"png":return"png";case"tiff":return"tiff";case"webp":return"webp";default:return Ke}},Ye=function(e){switch(e){case"otf":return"otf";case"ttf":return"ttf";case"woff":case"woff2":return"woff";default:return Ke}},et=function(e){switch(e){case"x-msvideo":case"msvideo":case"avi":return"avi";case"mp4":return"mp4";case"mpeg":return"mpeg";case"ogg":return"ogv";case"mp2t":return"mp2t";case"wmv":return"wmv";case"webm":return"webm";default:return Ke}},tt=function(e){switch(e){case"x-abiword":case"abiword":return"abw";case"x-freearc":case"freearc":return"arc";case"vnd.amazon.ebook":return"azw";case"octet-stream":return"octet";case"x-bzip":case"bzip":return"bz";case"x-bzip2":case"bzip2":return"bz2";case"x-cdf":return"cda";case"msaccess":return"accdb";case"csh":case"x-csh":return"csh";case"vnd.ms-fontobject":return"eot";case"epub+zip":return"epub";case"gzip":return"gzip";case"java-archive":return"jar";case"x-javascript":return"javascript";case"json":return"json";case"ld+json":return"jsonld";case"vnd.apple.installer+xml":return"mpkg";case"ogg":return"ogx";case"vnd.rar":return"rar";case"rtf":return"rtf";case"x-sh":case"sh":return"sh";case"x-shockwave-flash":return"swf";case"x-tar":return"tar";case"x-httpd-php":return"php";case"vnd.visio":return"vsd";case"xhtml+xml":return"xhtml";case"xml":return"xml";case"vnd.mozilla.xul+xml":return"xul";case"vnd.openxmlformats-officedocument.wordprocessingml.document":case"msword":return"docx";case"vnd.openxmlformats-officedocument.spreadsheetml.sheet":return"xlsx";case"vnd.openxmlformats-officedocument.presentationml.presentation":case"vnd.ms-powerpoint":return"pptx";case"vnd.oasis.opendocument.presentation":return"odp";case"vnd.oasis.opendocument.text":return"odt";case"vnd.oasis.opendocument.spreadsheet":return"ods";case"zip":case"x-zip-compressed":return"zip";case"pdf":return"pdf";default:return Ke}},rt=function(e){if(!e||!e.includes("/"))return Ke;var t=e.split("/")[0],r=e.split("/")[1];switch(t){case"application":return tt(r);case"audio":return Qe(r);case"video":return et(r);case"text":return We(r);case"image":return $e(r);case"font":return Ye(r);default:return Ke}},at=function(e){var t="octet";return e&&""!==e&&(e.includes("zip")||e.includes("rar")?t="zip":e.includes("doc")?t="docx":e.includes("xls")?t="xlsx":e.includes("drawio")?t="drawio":e.includes("psd")?t="psd":e.includes("csv")?t="csv":"jsx"===e?t="react":"py"===e?t="python":"vue"===e?t="vue":"java"===e?t="java":"ts"===e?t="typescript":"sass"!==e&&"scss"!==e||(t="sass")),t},nt=function(e){var t="text";return e&&""!==e&&("jsx"===e?t="react":"py"===e?t="python":"vue"===e?t="vue":"java"===e?t="java":"ts"===e||"tsx"===e?t="typescript":"js"===e?t="javascript":"xml"===e?t="xml":"php"===e&&(t="php")),t},ot={aac:R,accdb:j,abw:M,arc:X,avi:I,azw:T,octet:ue,bmp:L,bz:U,bz2:B,cda:N,csh:P,css:O,csv:q,docx:H,drawio:V,eot:Z,epub:G,gzip:K,gif:J,html:Q,icalendar:W,jar:Y,jpeg:te,javascript:ee,json:re,jsonld:ae,midi:ne,mp3:oe,mp4:ie,mpeg:se,mpkg:ce,mp2t:ue,odp:le,ods:pe,odt:de,oga:fe,ogv:ge,ogx:me,opus:he,otf:xe,png:Fe,pdf:be,php:ve,pptx:we,psd:_e,rar:Ae,rtf:Se,sass:ke,sh:De,swf:Ce,tar:ye,tiff:Me,ttf:je,typescript:Ie,text:Re,vsd:Te,wav:Ue,weba:Ne,webm:Be,webp:Pe,woff:He,wma:Oe,wmv:qe,xhtml:Q,xlsx:Ve,xml:Ze,xul:Ge,zip:Xe,sevenzip:C,python:Ee,java:$,react:ze,vue:Le,fallBack:ue},it=function(){function e(e){var t=e.id,r=e.file,a=e.name,n=e.size,o=e.type,i=e.imageUrl,s=e.valid,c=e.errors,u=e.uploadMessage,l=e.uploadStatus,p=e.progress,d=e.xhr,f=e.extraData,g=e.extraUploadData,m=e.serverResponse,h=e.downloadUrl,x=e.videoUrl;this.id=t,this.file=r,this.name=a,this.size=n,this.type=o,this.imageUrl=i,this.valid=s,this.errors=c,this.uploadStatus=l,this.uploadMessage=u,this.progress=p,this.xhr=d,this.extraData=f,this.extraUploadData=g,this.serverResponse=m,this.downloadUrl=h,this.videoUrl=x}return e.toExtFile=function(e){for(var t={},r=Object.keys(e),a=Object.values(e),n=0;n<a.length;n++){var o=a[n],i=r[n];void 0!==o&&(t[i]=o)}return t},e.prototype.toExtFile=function(){return e.toExtFile(this)},e}(),st=function(){return st=Object.assign||function(e){for(var t,r=1,a=arguments.length;r<a;r++)for(var n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},st.apply(this,arguments)};function ct(e,t,r,a){return new(r||(r=Promise))((function(n,o){function i(e){try{c(a.next(e))}catch(e){o(e)}}function s(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,s)}c((a=a.apply(e,t||[])).next())}))}function ut(e,t){var r,a,n,o,i={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(s){return function(c){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;o&&(o=0,s[0]&&(i=0)),i;)try{if(r=1,a&&(n=2&s[0]?a.return:s[0]?a.throw||((n=a.return)&&n.call(a),0):a.next)&&!(n=n.call(a,s[1])).done)return n;switch(a=0,n&&(s=[2&s[0],n.value]),s[0]){case 0:case 1:n=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,a=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(n=i.trys,(n=n.length>0&&n[n.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!n||s[1]>n[0]&&s[1]<n[3])){i.label=s[1];break}if(6===s[0]&&i.label<n[1]){i.label=n[1],n=s;break}if(n&&i.label<n[2]){i.label=n[2],i.ops.push(s);break}n[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],a=0}finally{r=n=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,c])}}}function lt(e,t,r){if(r||2===arguments.length)for(var a,n=0,o=t.length;n<o;n++)!a&&n in t||(a||(a=Array.prototype.slice.call(t,0,n)),a[n]=t[n]);return e.concat(a||Array.prototype.slice.call(t))}var pt=function(){function e(){}return e.getNextId=function(){return e.nextId++,e.nextId},e.setFileList=function(t,r){return t?(e.fileLists[t]=lt([],r,!0),t):0},e.createFileListMap=function(){var t=e.getNextId();return e.fileLists[t]=[],t},e.removeFileListMap=function(t){if(!t)return 0;try{return e.fileLists[t]=void 0,t}catch(e){return"development"===process.env.NODE_ENV&&console.error("Error on remove",e),0}},e.getExtFileInstanceList=function(t){try{if(!t)return;return e.fileLists[t]}catch(e){return void("development"===process.env.NODE_ENV&&console.error("Error on getExtFileInstanceList",e))}},e.setFileListMapPreparing=function(t,r,a,n){if("number"==typeof t||"string"==typeof t)try{var o,i=lt([],r,!0);n&&a&&(i=i.filter((function(e){return e.valid}))),o=(i=a?i.map((function(e){return"success"!==e.uploadStatus&&e.valid?st(st({},e),{uploadStatus:"preparing"}):st({},e)})):i.map((function(e){return"success"!==e.uploadStatus?st(st({},e),{uploadStatus:"preparing"}):st({},e)}))).map((function(e){return new it(e)}));e.setFileList(t,o);return o}catch(e){return void("development"===process.env.NODE_ENV&&console.error("setFileListMapPreparing Error on get List",e))}},e.setFileListMapPreparing2=function(t,r,a,n){return e.setFileList(t,r.map((function(e){return new it(st(st({},e),{uploadStatus:"preparing"}))}))),e.getExtFileInstanceList(t)},e.nextId=0,e.fileLists={},e}(),dt=function(){function e(){}return e.createFile=function(e,t,r){var a=new File([],e,{type:r});return Object.defineProperty(a,"size",{get:function(){return t}}),a},e.create_aac=function(t){return e.createFile("acc_audio-file-with-large-name.aac",t||3516516,"audio/aac")},e.create_abw=function(t){return e.createFile("abiword-file-with-large-name.abw",t||3516516,"application/x-abiword")},e.create_freearc=function(t){return e.createFile("freearc-file-with-large-name.arc",t||3516516,"application/x-freearc")},e.create_avi=function(t){return e.createFile("avi-file-with-large-name.avi",t||3516516,"video/x-msvideo")},e.create_azw=function(t){return e.createFile("amazon_kindle_ebook-file-with-large-name.azw",t||3516516,"application/vnd.amazon.ebook")},e.create_octet=function(t){return e.createFile("binary_octet_stream-file-with-large-name.bin",t||3516516,"application/octet-stream")},e.create_bmp=function(t){return e.createFile("bit_map-file-with-large-name.bmp",t||3516516,"image/bmp")},e.create_bz=function(t){return e.createFile("x_bzip-file-with-large-name.bz",t||3516516,"application/x-bzip")},e.create_bz2=function(t){return e.createFile("x_bzip_2-file-with-large-name.bz2",t||3516516,"application/x-bzip2")},e.create_cda=function(t){return e.createFile("cd_audio-file-with-large-name.cda",t||3516516,"application/x-cdf")},e.create_csh=function(t){return e.createFile("test-file-with-large-name.csh",t||3516516,"application/x-csh")},e.create_css=function(t){return e.createFile("test-file-with-large-name.css",t||3516516,"text/css")},e.create_csv=function(t){return e.createFile("test-file-with-large-name.csv",t||3516516,"text/csv")},e.create_doc=function(t){return e.createFile("test-file-with-large-name.doc",t||3516516,"application/msword")},e.create_docx=function(t){return e.createFile("test-file-with-large-name.docx",t||3516516,"application/vnd.openxmlformats-officedocument.wordprocessingml.document")},e.create_eot=function(t){return e.createFile("test-file-with-large-name.eot",t||3516516,"application/vnd.ms-fontobject")},e.create_epub=function(t){return e.createFile("test-file-with-large-name.epub",t||3516516,"application/epub+zip")},e.create_gzip=function(t){return e.createFile("test-file-with-large-name.gz",t||3516516,"application/gzip")},e.create_gif=function(t){return e.createFile("test-file-with-large-name.gif",t||3516516,"image/gif")},e.create_htm=function(t){return e.createFile("test-file-with-large-name.htm",t||3516516,"text/html")},e.create_html=function(t){return e.createFile("test-file-with-large-name.html",t||3516516,"text/html")},e.create_ico=function(t){return e.createFile("test-file-with-large-name.ico",t||3516516,"image/vnd.microsoft.icon")},e.create_icalendar=function(t){return e.createFile("test-file-with-large-name.ics",t||3516516,"text/calendar")},e.create_jar=function(t){return e.createFile("test-file-with-large-name.jar",t||3516516,"application/java-archive")},e.create_jpeg=function(t){return e.createFile("test-file-with-large-name.jpeg",t||3516516,"image/jpeg")},e.create_jpg=function(t){return e.createFile("test-file-with-large-name.jpg",t||3516516,"image/jpeg")},e.create_js=function(t){return e.createFile("test-file-with-large-name.js",t||3516516,"text/javascript")},e.create_json=function(t){return e.createFile("test-file-with-large-name.json",t||3516516,"application/json")},e.create_jsonld=function(t){return e.createFile("test-file-with-large-name.jsonld",t||3516516,"application/ld+json")},e.create_mid=function(t){return e.createFile("test-file-with-large-name.mid",t||3516516,"audio/midi")},e.create_x_mid=function(t){return e.createFile("test-file-with-large-name.mid",t||3516516,"audio/x-midi")},e.create_midi=function(t){return e.createFile("test-file-with-large-name.midi",t||3516516,"audio/x-midi")},e.create_x_midi=function(t){return e.createFile("test-file-with-large-name.midi",t||3516516,"audio/x-midi")},e.create_mjs=function(t){return e.createFile("test-file-with-large-name.mjs",t||3516516,"text/javascript")},e.create_mp3=function(t){return e.createFile("test-file-with-large-name.mp3",t||3516516,"audio/mpeg")},e.create_mp4=function(t){return e.createFile("test-file-with-large-name.mp4",t||3516516,"video/mp4")},e.create_mpeg=function(t){return e.createFile("test-file-with-large-name.mpeg",t||3516516,"video/mpeg")},e.create_mpkg=function(t){return e.createFile("test-file-with-large-name.mpkg",t||3516516,"application/vnd.apple.installer+xml")},e.create_odp=function(t){return e.createFile("test-file-with-large-name.odp",t||3516516,"application/vnd.oasis.opendocument.presentation")},e.create_ods=function(t){return e.createFile("test-file-with-large-name.ods",t||3516516,"application/vnd.oasis.opendocument.spreadsheet")},e.create_odt=function(t){return e.createFile("test-file-with-large-name.odt",t||3516516,"application/vnd.oasis.opendocument.text")},e.create_oga=function(t){return e.createFile("test-file-with-large-name.oga",t||3516516,"audio/ogg")},e.create_ogv=function(t){return e.createFile("test-file-with-large-name.ogv",t||3516516,"video/ogg")},e.create_ogx=function(t){return e.createFile("test-file-with-large-name.ogx",t||3516516,"application/ogg")},e.create_opus=function(t){return e.createFile("test-file-with-large-name.opus",t||3516516,"audio/opus")},e.create_otf=function(t){return e.createFile("test-file-with-large-name.otf",t||3516516,"font/otf")},e.create_png=function(t){return e.createFile("test-file-with-large-name.png",t||3516516,"image/png")},e.create_pdf=function(t){return e.createFile("test-file-with-large-name.pdf",t||3516516,"application/pdf")},e.create_php=function(t){return e.createFile("test-file-with-large-name.php",t||3516516,"application/x-httpd-php")},e.create_ppt=function(t){return e.createFile("test-file-with-large-name.ppt",t||3516516,"application/vnd.ms-powerpoint")},e.create_pptx=function(t){return e.createFile("test-file-with-large-name.pptx",t||3516516,"application/vnd.openxmlformats-officedocument.presentationml.presentation")},e.create_rar=function(t){return e.createFile("test-file-with-large-name.rar",t||3516516,"application/vnd.rar")},e.create_rtf=function(t){return e.createFile("test-file-with-large-name.rtf",t||3516516,"application/rtf")},e.create_sh=function(t){return e.createFile("test-file-with-large-name.sh",t||3516516,"application/x-sh")},e.create_svg=function(t){return e.createFile("test-file-with-large-name.svg",t||3516516,"image/svg+xml")},e.create_swf=function(t){return e.createFile("test-file-with-large-name.swf",t||3516516,"application/x-shockwave-flash")},e.create_tar=function(t){return e.createFile("test-file-with-large-name.tar",t||3516516,"application/x-tar")},e.create_tif=function(t){return e.createFile("test-file-with-large-name.tif",t||3516516,"image/tiff")},e.create_tiff=function(t){return e.createFile("test-file-with-large-name.tiff",t||3516516,"image/tiff")},e.create_ts=function(t){return e.createFile("mp2t_video-file-with-large-name.ts",t||3516516,"video/mp2t")},e.create_ttf=function(t){return e.createFile("test-file-with-large-name.ttf",t||3516516,"font/ttf")},e.create_text=function(t){return e.createFile("test-file-with-large-name.txt",t||3516516,"text/plain")},e.create_typescript=function(t){return e.createFile("typescript-file-with-large-name.ts",t||3516516,"text/plain")},e.create_vsd=function(t){return e.createFile("ms_visio-file-with-large-name.vsd",t||3516516,"application/vnd.visio")},e.create_wav=function(t){return e.createFile("wav_audio-file-with-large-name.wav",t||3516516,"audio/wav")},e.create_weba=function(t){return e.createFile("web_audio-file-with-large-name.weba",t||3516516,"audio/webm")},e.create_webm=function(t){return e.createFile("web_video-file-with-large-name.webm",t||3516516,"video/webm")},e.create_webp=function(t){return e.createFile("web_image-file-with-large-name.webp",t||3516516,"image/webp")},e.create_woff=function(t){return e.createFile("test-file-with-large-name.woff",t||3516516,"font/woff")},e.create_woff2=function(t){return e.createFile("test-file-with-large-name.woff2",t||3516516,"font/woff2")},e.create_xhtml=function(t){return e.createFile("test-file-with-large-name.xhtml",t||3516516,"application/xhtml+xml")},e.create_xlsx=function(t){return e.createFile("test-file-with-large-name.xls",t||3516516,"application/vnd.ms-excel")},e.create_xls=function(t){return e.createFile("test-file-with-large-name.xlsx",t||3516516,"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")},e.create_xml=function(t){return e.createFile("xml-file-with-large-name.xml",t||3516516,"application/xml")},e.create_xml_txt=function(t){return e.createFile("xml_plain_text-file-with-large-name.xml",t||3516516,"application/xml")},e.create_xul=function(t){return e.createFile("test-file-with-large-name.xul",t||3516516,"application/vnd.mozilla.xul+xml")},e.create_zip=function(t){return e.createFile("zip-file-with-large-name.zip",t||3516516,"application/zip")},e.create_3gp=function(t){return e.createFile("3gp_video-file-with-large-name.3gp",t||3516516,"video/3gpp")},e.create_3gp2=function(t){return e.createFile("3gp2_video-file-with-large-name.3g2",t||3516516,"video/3gpp2")},e.create_3gp_a=function(t){return e.createFile("3gp_audio-file-with-large-name.3gp",t||3516516,"audio/3gpp")},e.create_3gp_v=function(t){return e.createFile("3gp_audio-file-with-large-name.3gp2",t||3516516,"audio/3gpp2")},e.create_7z=function(t){return e.createFile("seven_zip-file-with-large-name.7z",t||3516516,"application/x-7z-compressed")},e.create_python=function(t){return e.createFile("python-file-with-large-name.py",t||3516516,"text/plain")},e.create_java=function(t){return e.createFile("java-file-with-large-name.java",t||3516516,"text/plain")},e.create_react=function(t){return e.createFile("react_jsx-file-with-large-name.jsx",t||3516516,"text/plain")},e.create_vue=function(t){return e.createFile("vue-file-with-large-name.vue",t||3516516,"text/plain")},e.createFileListMiscelanious=function(t){var r=[];return r.push(e.create_aac(t)),r.push(e.create_abw(t)),r.push(e.create_freearc(t)),r.push(e.create_avi(t)),r.push(e.create_azw(t)),r.push(e.create_octet(t)),r.push(e.create_bmp(t)),r.push(e.create_bz(t)),r.push(e.create_bz2(t)),r.push(e.create_cda(t)),r.push(e.create_csh(t)),r.push(e.create_css(t)),r.push(e.create_csv(t)),r.push(e.create_doc(t)),r.push(e.create_docx(t)),r.push(e.create_eot(t)),r.push(e.create_epub(t)),r.push(e.create_gzip(t)),r.push(e.create_gif(t)),r.push(e.create_htm(t)),r.push(e.create_html(t)),r.push(e.create_ico(t)),r.push(e.create_icalendar(t)),r.push(e.create_jar(t)),r.push(e.create_jpeg(t)),r.push(e.create_jpg(t)),r.push(e.create_js(t)),r.push(e.create_json(t)),r.push(e.create_jsonld(t)),r.push(e.create_mid(t)),r.push(e.create_midi(t)),r.push(e.create_x_mid(t)),r.push(e.create_x_midi(t)),r.push(e.create_mjs(t)),r.push(e.create_mp3(t)),r.push(e.create_mp4(t)),r.push(e.create_mpeg(t)),r.push(e.create_mpkg(t)),r.push(e.create_odp(t)),r.push(e.create_ods(t)),r.push(e.create_odt(t)),r.push(e.create_oga(t)),r.push(e.create_ogv(t)),r.push(e.create_ogx(t)),r.push(e.create_opus(t)),r.push(e.create_otf(t)),r.push(e.create_png(t)),r.push(e.create_pdf(t)),r.push(e.create_php(t)),r.push(e.create_ppt(t)),r.push(e.create_pptx(t)),r.push(e.create_rar(t)),r.push(e.create_rtf(t)),r.push(e.create_sh(t)),r.push(e.create_svg(t)),r.push(e.create_swf(t)),r.push(e.create_tar(t)),r.push(e.create_tif(t)),r.push(e.create_tiff(t)),r.push(e.create_ts(t)),r.push(e.create_ttf(t)),r.push(e.create_text(t)),r.push(e.create_typescript(t)),r.push(e.create_vsd(t)),r.push(e.create_wav(t)),r.push(e.create_weba(t)),r.push(e.create_webm(t)),r.push(e.create_webp(t)),r.push(e.create_woff(t)),r.push(e.create_woff2(t)),r.push(e.create_xhtml(t)),r.push(e.create_xlsx(t)),r.push(e.create_xls(t)),r.push(e.create_xml(t)),r.push(e.create_xml_txt(t)),r.push(e.create_xul(t)),r.push(e.create_zip(t)),r.push(e.create_python(t)),r.push(e.create_java(t)),r.push(e.create_react(t)),r.push(e.create_vue(t)),r},e}(),ft=function(e,t,r){return void 0===e&&(e="png-image-file-with-large-name.png"),void 0===t&&(t=455555),void 0===r&&(r="image/png"),dt.createFile(e,t,r)},gt=function(){function e(){}return e.getNextId=function(){return e.nextId++,e.nextId},e.nextId=0,e}();function mt(e,t){return void 0===e&&(e=0),void 0===t&&(t=0),Math.floor(Math.random()*(t-e))+e}var ht=function(e){return e&&0!==e.length?e.split(",").map((function(e){return e.trim()})):[]},xt=function(e,t){for(var r=t.name,a=t.type,n=0;n<e.length;n++){var o=e[n];if(0!==o.length){if("."===o.charAt(0)&&o.includes(Je(r)))return!0;if(a&&a.length>0&&o.includes("/")&&a.includes("/")){var i=o.split("/")[0],s=o.split("/")[1],c=a.split("/")[0],u=a.split("/")[1];if(i===c){if("*"===s)return!0;if(s===u)return!0}}}}return!1},bt=function(e,t,r,a){var n=st({},e),o=[];if(!e.file)return st({},n);if(t){var i=t(n.file).errors;i&&o.push.apply(o,i)}var s=r.maxFileSize,c=r.accept,u=e.file;if(s&&u.size>s){var l=a.maxSizeError;o.push(l(s))}c&&!xt(ht(c),u)&&o.push(a.acceptError);var p=0===o.length;return n=st(st({},n),{valid:p,errors:p?void 0:o})},vt=function(e,t,r,a){var n=gt.getNextId(),o=[];if(t)return st({id:n,file:e},t(e));var i=r.maxFileSize,s=r.accept;if(i&&e.size>i){var c=a.maxSizeError;o.push(c(i))}return s&&!xt(ht(s),e)&&o.push(a.acceptError),{id:n,file:e,valid:0===o.length,errors:o}},Ft=["File is too big. Max file size allowed is 80mb.","File's type is not allowed.","Max amount of files (28) has been reached."];function wt(e,t){for(var r=Object.keys(t||{}),a=0;a<r.length&&t;a++)e.append(r[a],t[r[a]]);e.append("otherValue","HAAAAAAAAAAAAAAa")}function _t(e,t){for(var r=Object.keys(t||{}),a=0;a<r.length&&t;a++)e.setRequestHeader(r[a],t[r[a]])}var Et={success:!1,message:"Timeout error",payload:{}},yt={success:!1,message:"Upload aborted",payload:{}},At={success:!1,message:"Error when parsing JSON response",payload:{}},zt={success:!1,message:"Unexpected error",payload:{}},St=function(e){return st(st({},e),{uploadMessage:"Unable to upload. xhr object was not provided",uploadStatus:"error",serverResponse:{success:!1}})},kt=function(e){try{var t=JSON.parse(e.response),r=t.success,a=t.message;return{success:"boolean"==typeof r&&r,message:"string"==typeof a?a:"Error on message response",payload:t.payload||{}}}catch(e){return At}},Dt=function(e,t){return st(st({},e),{serverResponse:t,uploadMessage:t.message,uploadStatus:"success"})},Ct=function(e,t){return st(st({},e),{uploadMessage:t.message,uploadStatus:"error",serverResponse:t})},Rt=function(e,t,r,a,n){return void 0===t&&(t="POST"),new Promise((function(o,i){var s=["POST","PUT","PATCH"].includes(t.toUpperCase())?t:"POST";e.upload.onload=function(){},e.upload.ontimeout=function(){return o(Et)},e.upload.onabort=function(){o(yt)},e.onloadend=function(e){return ct(void 0,void 0,void 0,(function(){return ut(this,(function(e){return[2]}))}))},e.onreadystatechange=function(t){return ct(void 0,void 0,void 0,(function(){return ut(this,(function(t){return e.readyState,4===e.readyState&&(""!==e.response?o(kt(e)):o(yt)),[2]}))}))},e.open(s,r,!0),_t(e,n),e.send(a)}))};var Mt={indianred:"#CD5C5C",lightcoral:"#F08080",salmon:"#FA8072",darksalmon:"#E9967A",lightsalmon:"#FFA07A",crimson:"#DC143C",red:"#FF0000",firebrick:"#B22222",darkred:"#8B0000",pink:"#FFC0CB",lightpink:"#FFB6C1",hotpink:"#FF69B4",deeppink:"#FF1493",mediumvioletred:"#C71585",palevioletred:"#DB7093",coral:"#FF7F50",tomato:"#FF6347",orangered:"#FF4500",darkorange:"#FF8C00",orange:"#FFA500",gold:"#FFD700",yellow:"#FFFF00",lightyellow:"#FFFFE0",lemonchiffon:"#FFFACD",lightgoldenrodyellow:"#FAFAD2",papayawhip:"#FFEFD5",moccasin:"#FFE4B5",peachpuff:"#FFDAB9",palegoldenrod:"#EEE8AA",khaki:"#F0E68C",darkkhaki:"#BDB76B",lavender:"#E6E6FA",thistle:"#D8BFD8",plum:"#DDA0DD",violet:"#EE82EE",orchid:"#DA70D6",fuchsia:"#FF00FF",magenta:"#FF00FF",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",rebeccapurple:"#663399",blueviolet:"#8A2BE2",darkviolet:"#9400D3",darkorchid:"#9932CC",darkmagenta:"#8B008B",purple:"#800080",indigo:"#4B0082",slateblue:"#6A5ACD",darkslateblue:"#483D8B",mediumslateblue:"#7B68EE",greenyellow:"#ADFF2F",chartreuse:"#7FFF00",lawngreen:"#7CFC00",lime:"#00FF00",limegreen:"#32CD32",palegreen:"#98FB98",lightgreen:"#90EE90",mediumspringgreen:"#00FA9A",springgreen:"#00FF7F",mediumseagreen:"#3CB371",seagreen:"#2E8B57",forestgreen:"#228B22",green:"#008000",darkgreen:"#006400",yellowgreen:"#9ACD32",olivedrab:"#6B8E23",olive:"#808000",darkolivegreen:"#556B2F",mediumaquamarine:"#66CDAA",darkseagreen:"#8FBC8B",lightseagreen:"#20B2AA",darkcyan:"#008B8B",teal:"#008080",aqua:"#00FFFF",cyan:"#00FFFF",lightcyan:"#E0FFFF",paleturquoise:"#AFEEEE",aquamarine:"#7FFFD4",turquoise:"#40E0D0",mediumturquoise:"#48D1CC",darkturquoise:"#00CED1",cadetblue:"#5F9EA0",steelblue:"#4682B4",lightsteelblue:"#B0C4DE",powderblue:"#B0E0E6",lightblue:"#ADD8E6",skyblue:"#87CEEB",lightskyblue:"#87CEFA",deepskyblue:"#00BFFF",dodgerblue:"#1E90FF",cornflowerblue:"#6495ED",royalblue:"#4169E1",blue:"#0000FF",mediumblue:"#0000CD",darkblue:"#00008B",navy:"#000080",midnightblue:"#191970",cornsilk:"#FFF8DC",blanchedalmond:"#FFEBCD",bisque:"#FFE4C4",navajowhite:"#FFDEAD",wheat:"#F5DEB3",burlywood:"#DEB887",tan:"#D2B48C",rosybrown:"#BC8F8F",sandybrown:"#F4A460",goldenrod:"#DAA520",darkgoldenrod:"#B8860B",peru:"#CD853F",chocolate:"#D2691E",saddlebrown:"#8B4513",sienna:"#A0522D",brown:"#A52A2A",maroon:"#800000",white:"#FFFFFF",snow:"#FFFAFA",honeydew:"#F0FFF0",mintcream:"#F5FFFA",azure:"#F0FFFF",aliceblue:"#F0F8FF",ghostwhite:"#F8F8FF",whitesmoke:"#F5F5F5",seashell:"#FFF5EE",beige:"#F5F5DC",oldlace:"#FDF5E6",floralwhite:"#FFFAF0",ivory:"#FFFFF0",antiquewhite:"#FAEBD7",linen:"#FAF0E6",lavenderblush:"#FFF0F5",mistyrose:"#FFE4E1",gainsboro:"#DCDCDC",lightgray:"#D3D3D3",silver:"#C0C0C0",darkgray:"#A9A9A9",gray:"#808080",dimgray:"#696969",lightslategray:"#778899",slategray:"#708090",darkslategray:"#2F4F4F",black:"#000000"},jt=function(e,t,r){void 0===t&&(t=0);var a=r||"rgba(255, 255, 255, 0.6)";if(!e)return a;var n=e.toUpperCase();if(n.includes("RGBA"))return n;if(n.includes("RGB"))return n.replace("RGB","rgba").replace(")",", ".concat(t,")"));if(!It(Tt(n)))return a;var o,i,s;return o=16*Bt(n.charAt(1))+Bt(n.charAt(2)),i=16*Bt(n.charAt(3))+Bt(n.charAt(4)),s=16*Bt(n.charAt(5))+Bt(n.charAt(6)),"rgba(".concat(o,", ").concat(i,",").concat(s," , ").concat(t,")")},It=function(e){if("#"!==e.charAt(0))return!1;if(7!==e.length)return!1;for(var t=1;t<e.length;t++)if(!Lt.includes(e.charAt(t)))return!1;return!0};function Tt(e){return e?void 0!==Mt[e.toLocaleLowerCase()]?Mt[e.toLocaleLowerCase()]:e:""}var Lt=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"],Ut=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],Bt=function(e){return Lt.includes(e)?Ut[Lt.indexOf(e)]:0},Nt=function(e){return void 0!==e&&""!==e?e:Pt},Pt="#646c7f";exports.ABORTED_ERROR_RESPONSE=yt,exports.DropzoneEnglish=s,exports.DropzoneFrench=n,exports.DropzoneItalian=t,exports.DropzoneLocalizer=z,exports.DropzoneLocalizerSelector=S,exports.DropzonePortuguese=h,exports.DropzoneRussian=f,exports.DropzoneSimplifiedChinese=v,exports.DropzoneSpanish=l,exports.DropzoneTraditionalChinese=_,exports.ExtFileInstance=it,exports.ExtFileManager=pt,exports.FileIdGenerator=gt,exports.FileItemEnglish=c,exports.FileItemFrench=o,exports.FileItemItalian=r,exports.FileItemLocalizer=A,exports.FileItemLocalizerSelector=function(e){switch(e){case"ES-es":return A["ES-es"];case"EN-en":default:return A["EN-en"];case"FR-fr":return A["FR-fr"];case"IT-it":return A["IT-it"];case"PT-pt":return A["PT-pt"];case"RU-ru":return A["RU-ru"];case"ZH-cn":return A["ZH-cn"];case"ZH-hk":return A["ZH-hk"]}},exports.FileItemPortuguese=x,exports.FileItemRussian=g,exports.FileItemSimplifiedChinese=F,exports.FileItemSpanish=p,exports.FileItemTraditionalChinese=E,exports.FuiUpload=function(e,t,r,a,n){return new Promise((function(o,i){e.upload.onload=function(){},e.upload.ontimeout=function(){return o(Et)},e.upload.onabort=function(){return o(yt)},e.onreadystatechange=function(t){return ct(void 0,void 0,void 0,(function(){return ut(this,(function(t){return 4===e.readyState&&(""!==e.response?o(kt(e)):o(zt)),[2]}))}))},e.open(t,r,!0);for(var s=Object.keys(n),c=0;c<s.length;c++)e.setRequestHeader(s[c],n[s[c]]);e.send(a)}))},exports.JSON_PARSE_ERROR_RESPONSE=At,exports.JsonParseResponse=kt,exports.NAMED_COLORS=Mt,exports.NO_XHR_PROVIDED_ERROR=St,exports.SyntheticFile=dt,exports.TIMEOUT_ERROR_RESPONSE=Et,exports.UNEXPECTED_ERROR_RESPONSE=zt,exports.ValidateErrorEnglish=u,exports.ValidateErrorFrench=i,exports.ValidateErrorItalian=a,exports.ValidateErrorLocalizer=k,exports.ValidateErrorLocalizerSelector=D,exports.ValidateErrorPortuguese=b,exports.ValidateErrorRussian=m,exports.ValidateErrorSimplifiedChinese=w,exports.ValidateErrorSpanish=d,exports.ValidateErrorTraditionalChinese=y,exports.aac=R,exports.abw=M,exports.accdb=j,exports.addClassName=function(e,t){return t?"".concat(e," ").concat(t):e},exports.addExtraData=wt,exports.addHeaders=_t,exports.applicationSelector=tt,exports.asureColor=Nt,exports.audioSelector=Qe,exports.avi=I,exports.azw=T,exports.bmp=L,exports.brighterColor=function(e,t){void 0===t&&(t=25);var r="",a=(100+t)/100,n=0,o=0,i=0;if(It(Tt(e)))n=16*Bt(e.charAt(1))+Bt(e.charAt(2)),o=16*Bt(e.charAt(3))+Bt(e.charAt(4)),i=16*Bt(e.charAt(5))+Bt(e.charAt(6)),r="rgb(".concat(n*a,", ").concat(o*a,",").concat(i*a,")");else if(e.includes("rgba")){var s=e.replace("rgba(","").split(",");r="rgb(".concat(parseInt(s[0],10)*a,", ").concat(parseInt(s[1],10)*a,",").concat(parseInt(s[2],10)*a,")")}else if(e.includes("rgb")){s=e.replace("rgb(","").split(",");r="rgb(".concat(parseInt(s[0],10)*a,", ").concat(parseInt(s[1],10)*a,",").concat(parseInt(s[2],10)*a,")")}return r},exports.bz=U,exports.bz2=B,exports.cda=N,exports.checkIsCode=nt,exports.cleanInput=function(e){e&&(e.value="")},exports.colourNameToHex=Tt,exports.completeAsureColor=function(e,t){return void 0===t&&(t=1),jt(Nt(Tt(e)),t)},exports.completeUploadResult=function(e,t,r){return{id:e.id,uploadedFile:st(st({},e),{uploadMessage:t.message,uploadStatus:r}),serverResponse:t}},exports.createListOfMultiTypeFile=function(e){return dt.createFileListMiscelanious(e)},exports.createSyntheticFile=ft,exports.createUploadConfig=function(e,t,r,a,n){return{url:e,method:t,headers:r,uploadLabel:a,cleanonUpload:n}},exports.csh=P,exports.css=O,exports.csv=q,exports.darkerColor=function(e,t){void 0===t&&(t=25);var r="",a=(100-t)/100,n=0,o=0,i=0;if(It(Tt(e)))n=16*Bt(e.charAt(1))+Bt(e.charAt(2)),o=16*Bt(e.charAt(3))+Bt(e.charAt(4)),i=16*Bt(e.charAt(5))+Bt(e.charAt(6)),r="rgb(".concat(n*a,", ").concat(o*a,",").concat(i*a,")");else if(e.includes("rgba")){var s=e.replace("rgba(","").split(",");r="rgb(".concat(parseInt(s[0],10)*a,", ").concat(parseInt(s[1],10)*a,",").concat(parseInt(s[2],10)*a,")")}else if(e.includes("rgb")){s=e.replace("rgb(","").split(",");r="rgb(".concat(parseInt(s[0],10)*a,", ").concat(parseInt(s[1],10)*a,",").concat(parseInt(s[2],10)*a,")")}return r},exports.docx=H,exports.drawio=V,exports.eot=Z,exports.epub=G,exports.extFileMock=function(e){return{id:e||gt.getNextId(),name:"fileName.ext",size:29360128,type:"files-ui/mock",file:ft("fileName.ext",29360128,"files-ui/mock"),errors:Ft,uploadMessage:"uploaded",uploadStatus:"preparing",valid:!1,progress:28,xhr:new XMLHttpRequest,extraData:{extraData1:"files-ui is the best",extraData2:{id:1,name:"files-ui.mock"},deleted:!0},downloadUrl:"https://www.files-ui.com/mock/file-download"}},exports.extFileReconcilation=function(e,t){var r=pt.getExtFileInstanceList(e);if(r){var a=lt([],t,!0);if(a=a.filter((function(e){return-1===(null==r?void 0:r.findIndex((function(t){return t.id===e.id})))})),r.length!==t.length||0===t.length)return;for(var n=0;n<r.length;n++)void 0===t[n].uploadStatus&&"preparing"===r[n].uploadStatus&&(r[n].uploadStatus=void 0)}return[]},exports.extensionSelector=at,exports.fakeFuiUpload=function(e,t){void 0===t&&(t=S("EN-en"));var r=e.toExtFile();return new Promise((function(e,a){setTimeout((function(){if(Math.floor(10*Math.random())%2==0){var a=!0,n=t.fakeuploadsuccess,o={url:""};e(st(st({},r),{serverResponse:{success:a,message:n,payload:o},uploadStatus:"success",uploadMessage:n}))}else{a=!1,n=t.fakeUploadError,o={};e(st(st({},r),{serverResponse:{success:a,message:n,payload:o},uploadStatus:"error",uploadMessage:n}))}}),1700)}))},exports.fileListToExtFileArray=function(e){for(var t=[],r=0,a=void 0;a=e[r];r++)t.push({id:gt.getNextId(),file:a,name:a.name,size:a.size,type:a.type});return t},exports.fileListToExtFileInstanceArray=function(e){for(var t=[],r=0,a=void 0;a=e[r];r++)t.push(new it({id:gt.getNextId(),file:a,name:a.name,size:a.size,type:a.type}));return t},exports.fileListvalidator=function(e,t,r,a,n,o){for(var i=[],s=t,c=D(o),u=0,l=void 0;l=e[u];u++){var p=vt(l,a,r,c);if(p.valid){var d=s>0;if(p.valid=d,!d){var f=c.maxFileCount;p.errors=p.errors?lt(lt([],p.errors,!0),[f(n||1/0)],!1):[f(n||1/0)]}s--}i.push(p)}return i},exports.fileSizeFormater=e,exports.fontSelector=Ye,exports.freearc=X,exports.getExt=Je,exports.getImageOrientation=function(e){return new Promise((function(t,r){if(e&&0!==e.length)try{var a=new Image;a.src=e,a.onerror=function(e){r("landscape")},a.onload=function(){var e=a.width,r=a.height;t(e>r?"landscape":"portrait")}}catch(e){"development"===process.env.NODE_ENV&&console.error("An error ocurred when trying to get the image orientation"),r("landscape")}else r("landscape")}))},exports.getLocalFileItemData=function(e,t,r,a){var n="",o=void 0,i=void 0;return e&&"string"==typeof e.name?(n=e.name,o=e.type,i=e.size):t&&"string"==typeof t&&(n=t,o=r,i=a),[n,o,i]},exports.getRandomInt=mt,exports.getURLFileIco=function(e,t){var r="fallBack";if(!e)return r=Ke,(null==t?void 0:t.fallBack)?{url:null==t?void 0:t.fallBack,mimeResume:r}:{url:ot[r],mimeResume:r};r=rt(e.type);var a=Je(e.name);"text"===r&&(r=nt(a)),r===Ke&&(r=at(a));var n=null==t?void 0:t[r];return void 0!==n?{url:n,mimeResume:r}:{url:ot[r],mimeResume:r}},exports.gif=J,exports.gzip=K,exports.hexColorToRGB=jt,exports.hexTodec=Bt,exports.html=Q,exports.icalendar=W,exports.imageSelector=$e,exports.instantPreparingToUploadOne=function(e){return"preparing"===e.uploadStatus?(e.uploadStatus="uploading",st(st({},e),{uploadStatus:"uploading"})):e},exports.isHexColor=It,exports.isUploadAbleExtFile=function(e,t){return(!t||t&&e.valid)&&"success"!==e.uploadStatus},exports.isValidateActive=function(e,t,r,a){return null!=e||null!=t||null!=r||null!=a},exports.jar=Y,exports.java=$,exports.javascript=ee,exports.jpeg=te,exports.json=re,exports.jsonld=ae,exports.makeErrorUploadResponse=Ct,exports.makeServerResponse=function(e,t,r){return{success:e,message:t,payload:r}},exports.makeSuccessUploadResponse=Dt,exports.makeSyntheticExtFile=function(e,t,r,a){void 0===t&&(t=Math.ceil(28*Math.random())%2==0);var n=[],o=r||function(){switch(mt(0,4)){case 0:return"error";case 1:return"uploading";case 2:return"success";default:return}}(),i=a||"";if(t){if(!a)switch(o){case"error":i="Upload failed. There was an error";break;case"success":i="File was successfully upload";break;default:a=void 0}n=void 0}else{var s=mt(0,3);n.push(Ft[s]),o=void 0,i=void 0}return{id:gt.getNextId(),valid:t,file:e,uploadStatus:o,uploadMessage:i,errors:n}},exports.midi=ne,exports.mimeSelector=rt,exports.mp3=oe,exports.mp4=ie,exports.mpeg=se,exports.mpkg=ce,exports.octet=ue,exports.odp=le,exports.ods=pe,exports.odt=de,exports.oga=fe,exports.ogv=ge,exports.ogx=me,exports.opus=he,exports.otf=xe,exports.pdf=be,exports.php=ve,exports.png=Fe,exports.pptx=we,exports.prepToUploadOne=function(e){return new Promise((function(t,r){setTimeout((function(){e.uploadStatus="uploading",t(st(st({},e),{uploadStatus:"uploading"}))}),1500)}))},exports.preparingToUploadOne=function(e){return new Promise((function(t,r){setTimeout((function(){"preparing"===e.uploadStatus?(e.uploadStatus="uploading",t(st(st({},e),{uploadStatus:"uploading"}))):t(e)}),1500)}))},exports.psd=_e,exports.python=Ee,exports.rar=Ae,exports.react=ze,exports.readAsArrayBuffer=function(e,t,r){return new Promise((function(a,n){try{var o=new FileReader;o.onload=function(){a(o.result)},o.onprogress=function(){null==t||t()},o.onerror=function(){null==r||r()},o.readAsArrayBuffer(e)}catch(e){n(void 0)}}))},exports.readAsBinaryString=function(e,t,r){return new Promise((function(a,n){try{var o=new FileReader;o.onload=function(){a(o.result)},o.onprogress=function(){null==t||t()},o.onerror=function(){null==r||r()},o.readAsBinaryString(e)}catch(e){n(void 0)}}))},exports.readAsDataURL=function(e,t,r){return new Promise((function(a,n){try{var o=new FileReader;o.onprogress=function(){null==t||t()},o.onerror=function(){null==r||r()},o.onload=function(){a(o.result)},o.readAsDataURL(e)}catch(e){n(void 0)}}))},exports.readAsText=function(e,t,r,a){return new Promise((function(n,o){try{var i=new FileReader;i.onload=function(){n(i.result)},i.onprogress=function(){null==r||r()},i.onerror=function(){null==a||a()},i.readAsText(e,t||"base64")}catch(e){o(void 0)}}))},exports.resizeImage=function(e,t,r){return void 0===t&&(t=135),void 0===r&&(r=120),new Promise((function(a,n){try{var o=new Image;o.src=e,o.onload=function(){var i=document.createElement("canvas"),s=t,c=r,u=o.width,l=o.height;t>u&&r>l?a(e):u>l?u>s&&(l*=s/u,u=s):l>c&&(u*=c/l,l=c),i.width=u,i.height=l;var p=i.getContext("2d");p?(p.drawImage(o,0,0,u,l),a(i.toDataURL())):("development"===process.env.NODE_ENV&&console.error("An error ocurred when trying to make a thumnail"),n(void 0))}}catch(e){"development"===process.env.NODE_ENV&&console.error("An error ocurred when trying to make a thumnail"),n(void 0)}}))},exports.rtf=Se,exports.sanitizeArrExtFile=function(e){return e.filter((function(e){var t;return!(null===(t=e.extraData)||void 0===t?void 0:t.deleted)})).map((function(e){return"aborted"!==e.uploadStatus||e.uploadMessage||(e.uploadMessage="Upload aborted by user"),it.toExtFile(e)}))},exports.sass=ke,exports.separateAccept=ht,exports.setNextUploadStatus=function(e,t){var r=e.uploadStatus,a=t.uploadStatus;"preparing"===r&&["aborted",void 0].includes(a)?(e.uploadStatus=void 0,e.uploadMessage=t.uploadMessage):"uploading"===r&&["aborted",void 0].includes(a)&&(e.uploadStatus="aborted",e.uploadMessage=t.uploadMessage)},exports.setPrepToUploading=function(e){return new Promise((function(t,r){setTimeout((function(){t(st(st({},e),{uploadStatus:"uploading"}))}),1500)}))},exports.sevenzip=C,exports.sh=De,exports.shrinkWord=function(e,t){void 0===e&&(e=""),void 0===t&&(t=!1);var r=e;return t?e.length>=20&&(r=e.slice(0,10)+"..."+e.slice(-7)):e.length>=30&&(r=e.slice(0,13)+"..."+e.slice(-8)),r},exports.sleepPreparing=function(e){return void 0===e&&(e=5e3),new Promise((function(t,r){setTimeout((function(){t()}),e)}))},exports.sleepTransition=function(e){return void 0===e&&(e=1500),new Promise((function(t,r){setTimeout((function(){t(!0)}),e)}))},exports.swf=Ce,exports.tar=ye,exports.text=Re,exports.textSelector=We,exports.tiff=Me,exports.toUploadableExtFileList=function(e){return e?e.map((function(e){return st(st({},e),{xhr:new XMLHttpRequest})})):[]},exports.ttf=je,exports.typescript=Ie,exports.unableToUploadResult=function(e){return{id:e.id,uploadedFile:st(st({},e),{uploadMessage:"Unable to upload. XHR was not provided",uploadStatus:"error"}),serverResponse:{success:!1,message:"Error on upload: Unable to upload. XHR was not provided ",payload:{}}}},exports.unexpectedErrorUploadResult=function(e){return st(st({},e),{uploadMessage:"Unexpected error",uploadStatus:"error",serverResponse:{success:!1,message:"Error on upload: unexpected error ",payload:{}}})},exports.uploadExtFile=function(e,t,r,a,n){return ct(void 0,void 0,void 0,(function(){return ut(this,(function(o){return[2,new Promise((function(o,i){return ct(void 0,void 0,void 0,(function(){var i,s,c,u,l,p;return ut(this,(function(d){switch(d.label){case 0:return d.trys.push([0,2,,3]),(i=e.xhr)?(s=r||"POST",c=e.file,(u=new FormData).append(n||"file",c),l=st({otherValue:"other valueee haaaa",param2:{tecnica:"KIKOHUUUU",friend:"Chaos",age:25}},e.extraUploadData),wt(u,l),p=void 0,[4,Rt(i,s,t,u,a||{})]):(o(St(e)),[2]);case 1:return(p=d.sent()).success?o(Dt(e,p)):o(Ct(e,p)),[3,3];case 2:return d.sent(),o(Ct(e,zt)),[3,3];case 3:return[2]}}))}))}))]}))}))},exports.uploadFile=function(e,t,r,a,n){var o=this;return new Promise((function(i,s){return ct(o,void 0,void 0,(function(){var o,s;return ut(this,(function(c){switch(c.label){case 0:(o=new FormData).append(a||"file",e),c.label=1;case 1:return c.trys.push([1,3,,4]),[4,Rt(new XMLHttpRequest,r,t,o,n)];case 2:return s=c.sent(),i(s),[3,4];case 3:return c.sent(),i(zt),[3,4];case 4:return[2]}}))}))}))},exports.uploadFormData=Rt,exports.uploadOne=function(e){return new Promise((function(t,r){setTimeout((function(){t(st(st({},e),{uploadStatus:"success"}))}),2e3)}))},exports.uploadOneExtFile=function(e){return new Promise((function(t,r){setTimeout((function(){e.uploadStatus="success",t(st(st({},e),{uploadStatus:"success"}))}),2e3)}))},exports.validateAccept=xt,exports.validateExtFile=bt,exports.validateExtFileList=function(e,t,r,a,n,o){var i=[];if(!t)return i;for(var s=t,c=D(o),u=c.maxFileCount,l=0;l<e.length;l++){var p=e[l];if((p=bt(p,a,r,c)).valid){var d=s>0;p.valid=d,d||(p.errors=p.errors?lt(lt([],p.errors,!0),[u(n||1/0)],!1):[u(n||1/0)]),s--}i.push(p)}return i},exports.validateFile=vt,exports.videoSelector=et,exports.vsd=Te,exports.vue=Le,exports.wav=Ue,exports.weba=Ne,exports.webm=Be,exports.webp=Pe,exports.wma=Oe,exports.wmv=qe,exports.woff=He,exports.xlsx=Ve,exports.xml=Ze,exports.xul=Ge,exports.zip=Xe; +"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=function(e){if(e)return e<1024?e+" Bytes":e<1048576?(e/1024).toFixed(2)+" KB":e<1073741824?(e/1024/1024).toFixed(2)+" MB":e<1099511627776?(e/1024/1024/1024).toFixed(2)+" GB":(e/1024/1024/1024/1024).toFixed(2)+" TB"},t={defaultLabel:"Trascina qui i tuoi file",uploadingMessage:function(e){return"Caricamento di ".concat(e," file")},uploadFinished:function(e,t){return"File caricati: ".concat(e,", File rifiutati: ").concat(t)},noFilesMessage:"Nessun file valido in attesa di essere caricato",footer:{acceptAll:"Tutti i tipi di file sono accettati",acceptCustom:function(e){return"Tipi di file consentiti: ".concat(e)}},header:{uploadFilesMessage:"Caricamento",maxSizeMessage:function(e){return"Dimensione massima ".concat(e)},validFilesMessage:function(e,t){return"File ".concat(e,"/").concat(t)}},fakeuploadsuccess:"Il file è stato caricato con successo ",fakeUploadError:"Errore di caricamento del file"},r={fullInfoLayer:{name:"Nome: ",size:"Dimensione: ",type:"Tipo: "},status:{preparing:"preparazione",uploading:"In corso",success:"Successo",valid:"Valido",denied:"Non válido",error:"Errore",aborted:"Interrotto"}},a={maxSizeError:function(t){return"Il file è molto grande. Il tam. il massimo è ".concat(e(t))},acceptError:"Tipo di file illegale",maxFileCount:function(e){return"Numero massimo di file (".concat(e,") raggiunto")}},n={defaultLabel:"Déposez vos fichiers ici",uploadingMessage:function(e){return"Envoi de ".concat(e," fichiers")},uploadFinished:function(e,t){return"Fichiers téléchargés : ".concat(e,", Fichiers rejetés: ").concat(t)},noFilesMessage:"Aucun fichier valide ne manque",footer:{acceptAll:"Tous types de fichiers acceptés ",acceptCustom:function(e){return"Types de fichier: ".concat(e)}},header:{uploadFilesMessage:"Envoyer",maxSizeMessage:function(e){return"Taille maximale ".concat(e)},validFilesMessage:function(e,t){return"Fichiers ".concat(e,"/").concat(t)}},fakeuploadsuccess:"Le fichier a été téléchargé avec succès",fakeUploadError:"Erreur lors du téléchargement "},o={fullInfoLayer:{name:"Le nom: ",size:"Le taille: ",type:"Le type: "},status:{preparing:"préparer",uploading:"En cours",success:"Succès",valid:"Valide",denied:"Refusé",error:"Erreur",aborted:"Interrompu"}},i={maxSizeError:function(t){return"Le fichier est très volumineux. Le tam. le maximum est de ".concat(e(t))},acceptError:"Type de fichier illégal ",maxFileCount:function(e){return"Limite de fichiers atteinte (".concat(e,")")}},s={defaultLabel:"Drop your files here",uploadingMessage:function(e){return"Uploading ".concat(e," files")},uploadFinished:function(e,t){return"Uploaded files: ".concat(e,", Rejected files: ").concat(t)},noFilesMessage:"There is no missing valid file to upload",footer:{acceptAll:"All file types accepted",acceptCustom:function(e){return"Allowed types: ".concat(e)}},header:{uploadFilesMessage:"Upload files",maxSizeMessage:function(e){return"Max file size: ".concat(e)},validFilesMessage:function(e,t){return"Files ".concat(e,"/").concat(t)}},fakeuploadsuccess:"File was successfuly uploaded",fakeUploadError:"Error on uploading. Please try again later."},c={fullInfoLayer:{name:"Name: ",size:"Size: ",type:"Type: "},status:{preparing:"Preparing",uploading:"Uploading",success:"Success",valid:"Valid",denied:"Not valid",error:"Error",aborted:"Aborted"}},u={maxSizeError:function(t){return"File is too big. Max file size allowed is ".concat(e(t))},acceptError:"File type is not allowed",maxFileCount:function(e){return"Max amount of files (".concat(e,") has been reached")}},l={defaultLabel:"Suelta tus archivos aquí",uploadingMessage:function(e){return"Subiendo ".concat(e," archivos")},uploadFinished:function(e,t){return"Archivos subidos: ".concat(e,", Archivos rechazados: ").concat(t)},noFilesMessage:"No hay archivos válidos pendientes por subir",footer:{acceptAll:"Todos los tipos de archivo aceptados",acceptCustom:function(e){return"Tipo(s) de archivo permitidos: ".concat(e)}},header:{uploadFilesMessage:"Subir",maxSizeMessage:function(e){return"Tam. máximo ".concat(e)},validFilesMessage:function(e,t){return"Archivos ".concat(e,"/").concat(t)}},fakeuploadsuccess:"El archivo se subió correctamente",fakeUploadError:"Error al subir el archivo"},p={fullInfoLayer:{name:"Nombre: ",size:"Tamaño: ",type:"Tipo: "},status:{preparing:"Preparando",uploading:"Subiendo",success:"Éxito",valid:"Válido",denied:"No válido",error:"Error",aborted:"Anulado"}},d={maxSizeError:function(t){return"El archivo es muy grande. El tam. máximo es ".concat(e(t))},acceptError:"Tipo de archivo no permitido",maxFileCount:function(e){return"Cantidad máxima de archivos (".concat(e,") alcanzada")}},f={defaultLabel:"Перетащите сюда свои файлы.",uploadingMessage:function(e){return"Выгрузка ".concat(e," файлов")},uploadFinished:function(e,t){return"Загружено файлов: ".concat(e,", отклоненных файлов: ").concat(t)},noFilesMessage:"Действительный файл не отсутствует для загрузки",footer:{acceptAll:"Принимаются все типы файлов ",acceptCustom:function(e){return"Допустимые типы: ".concat(e)}},header:{uploadFilesMessage:"Отправить",maxSizeMessage:function(e){return"макс размер: ".concat(e)},validFilesMessage:function(e,t){return"Файлы ".concat(e,"/").concat(t)}},fakeuploadsuccess:"Файл был успешно загружен",fakeUploadError:"Ошибка при загрузке"},m={fullInfoLayer:{name:"Имя: ",size:"Размер: ",type:"Tип: "},status:{preparing:"подготовка",uploading:"Загрузка",success:"успех",valid:"годный",denied:"выкинутый",error:"ошибка",aborted:"прерванный"}},g={maxSizeError:function(t){return"Файл слишком большой. Максимально допустимый размер файла - ".concat(e(t))},acceptError:"Тип файла не разрешен",maxFileCount:function(e){return"Достигнуто максимальное количество файлов (".concat(e,")")}},h={defaultLabel:"Solte seus arquivos aqui ",uploadingMessage:function(e){return"Enviando ".concat(e," arquivos")},uploadFinished:function(e,t){return"Arquivos enviados: ".concat(e,", Arquivos rejeitados: ").concat(t)},noFilesMessage:"Nenhum arquivo válido está faltando para enviar",footer:{acceptAll:"Todos os tipos de arquivo são aceitos",acceptCustom:function(e){return"Tipos permitidos: ".concat(e)}},header:{uploadFilesMessage:"Enviar",maxSizeMessage:function(e){return"Tamanho máximo: ".concat(e)},validFilesMessage:function(e,t){return"Arquivos ".concat(e,"/").concat(t)}},fakeuploadsuccess:"O arquivo foi enviado com sucesso",fakeUploadError:"Erro ao enviar"},x={fullInfoLayer:{name:"Nome: ",size:"Tamanho: ",type:"Tipo: "},status:{preparing:"Preparando",uploading:"Enviando",success:"Êxito",valid:"válido",denied:"Negado",error:"Erro",aborted:"Abortado"}},b={maxSizeError:function(t){return"O arquivo é muito grande. O tamanho máximo de arquivo permitido é ".concat(e(t))},acceptError:"O tipo de arquivo não é permitido ",maxFileCount:function(e){return"Quantidade máxima de arquivos (".concat(e,") alcançada")}},v={defaultLabel:"将您的文件放在这里",uploadingMessage:function(e){return"上传 ".concat(e," 个文件")},uploadFinished:function(e,t){return"上传文件:".concat(e,",拒绝文件:").concat(t)},noFilesMessage:"没有缺少要加载的有效文件",footer:{acceptAll:"接受所有文件类型",acceptCustom:function(e){return"允许的类型: ".concat(e)}},header:{uploadFilesMessage:"上传文件",maxSizeMessage:function(e){return"最大文件大小:".concat(e)},validFilesMessage:function(e,t){return"文档 ".concat(e,"/").concat(t)}},fakeuploadsuccess:"文件已成功上传",fakeUploadError:"上传时出错"},F={fullInfoLayer:{name:"文档名称: ",size:"尺寸: ",type:"文件类型: "},status:{preparing:"预加载",uploading:"上传",success:"成功",valid:"接受的文件",denied:"被拒绝的文件",error:"错误",aborted:"中止"}},w={maxSizeError:function(t){return"文件太大。 允许的最大文件大小为 ".concat(e(t))},acceptError:"文件类型不允许",maxFileCount:function(e){return"已达到最大文件数 (".concat(e,")")}},_={defaultLabel:"把你的文件放在這裡 ",uploadingMessage:function(e){return"上傳".concat(e,"個文件")},uploadFinished:function(e,t){return"上傳文件: ".concat(e,", 拒絕的文件:").concat(t)},noFilesMessage:"沒有缺少要上傳的有效文件",footer:{acceptAll:"接受所有文件類型",acceptCustom:function(e){return"允許的類型:".concat(e)}},header:{uploadFilesMessage:"上傳文件",maxSizeMessage:function(e){return"最大文件大小:".concat(e)},validFilesMessage:function(e,t){return" 文件 ".concat(e,"/").concat(t)}},fakeuploadsuccess:"文件已成功上傳",fakeUploadError:"上傳時出錯"},E={fullInfoLayer:{name:"文檔名稱: ",size:"文件大小: ",type:"文件類型: "},status:{preparing:"預加載",uploading:"上傳",success:"成功",valid:"有效文件",denied:"無效文件",error:"錯誤",aborted:"中止"}},y={maxSizeError:function(t){return"文件太大。 允許的最大文件大小為 ".concat(e(t))},acceptError:"文件類型不允許",maxFileCount:function(e){return"已達到最大文件數 (".concat(e,")")}},A={"ES-es":p,"EN-en":c,"FR-fr":o,"IT-it":r,"PT-pt":x,"RU-ru":m,"ZH-cn":F,"ZH-hk":E},z={"ES-es":l,"EN-en":s,"FR-fr":n,"IT-it":t,"PT-pt":h,"RU-ru":f,"ZH-cn":v,"ZH-hk":_},S=function(e){switch(e){case"ES-es":return z["ES-es"];case"EN-en":default:return z["EN-en"];case"FR-fr":return z["FR-fr"];case"IT-it":return z["IT-it"];case"PT-pt":return z["PT-pt"];case"RU-ru":return z["RU-ru"];case"ZH-cn":return z["ZH-cn"];case"ZH-hk":return z["ZH-hk"]}},k={"ES-es":d,"EN-en":u,"FR-fr":i,"IT-it":a,"PT-pt":b,"RU-ru":g,"ZH-cn":w,"ZH-hk":y},D=function(e){return e&&["ES-es","EN-en","FR-fr","IT-it","PT-pt","RU-ru","ZH-cn","ZH-hk"].includes(e)?k[e]:k["EN-en"]};var R="https://user-images.githubusercontent.com/43678736/132086517-72a51a12-e403-4675-bfd7-22c23affa730.png",C="https://user-images.githubusercontent.com/43678736/132086518-7026d4f1-ea16-4ed0-89fd-37c1aa8ac3ed.png",M="https://user-images.githubusercontent.com/43678736/132086519-863c63b4-917e-4471-94ff-7e15651cc14b.png",j="https://user-images.githubusercontent.com/43678736/132086520-9bc6aa3b-51c9-4da2-9ef7-349162b86d0b.png",I="https://user-images.githubusercontent.com/43678736/132086521-dbd6cf0d-d4d7-4b92-bb26-17e8a51a9383.png",T="https://user-images.githubusercontent.com/43678736/132086522-070f48e8-78a8-4294-8dbb-aab81525e164.png",L="https://user-images.githubusercontent.com/43678736/132086595-90ab7f90-f87e-4900-94d9-d0b26745df48.png",U="https://user-images.githubusercontent.com/43678736/132086597-e285ad5c-613a-4679-a270-493e5be4ffd9.png",B="https://user-images.githubusercontent.com/43678736/132086598-623c410a-084a-4395-a448-211b2ff61cfe.png",N="https://user-images.githubusercontent.com/43678736/132086600-8b70a007-512d-4252-9c66-eabd3ddd6573.png",P="https://user-images.githubusercontent.com/43678736/132086601-e62e5d1a-d8a2-4475-a14f-85922cec9272.png",O="https://user-images.githubusercontent.com/43678736/132086602-4c772934-f608-4f01-8459-c4622cee8ad5.png",q="https://user-images.githubusercontent.com/43678736/132086604-b5b019fe-572e-477e-92c2-3769a48a1304.png",H="https://user-images.githubusercontent.com/43678736/132086606-715ccb66-4702-4f7d-9b09-ac93ba17b643.png",V="https://user-images.githubusercontent.com/43678736/132086608-bcae9d57-8e54-488c-90c4-4952ae530b5e.png",Z="https://user-images.githubusercontent.com/43678736/132086618-397d6bd2-9fda-43ed-a135-cb40388c35af.png",G="https://user-images.githubusercontent.com/43678736/132086620-2586ba40-c583-4589-b1a4-8bb5b258b44d.png",X="https://user-images.githubusercontent.com/43678736/132086621-3b95fb64-2533-4ccc-abcd-bd2beba572e9.png",J="https://user-images.githubusercontent.com/43678736/132086622-af705a0c-2b25-4ba7-8ab6-bd69ec97f7e2.png",K="https://user-images.githubusercontent.com/43678736/132086624-89141a46-64e4-4fa0-bf69-54a0eb4d48c9.png",Q="https://user-images.githubusercontent.com/43678736/132086625-1b8f2652-1de0-4475-8c12-7da4a9973ffb.png",W="https://user-images.githubusercontent.com/43678736/132086626-38699705-1e6f-4bca-984b-03167b236faa.png",$="https://user-images.githubusercontent.com/43678736/132086650-f1166246-b361-4c30-a04e-9781c555d14a.png",Y="https://user-images.githubusercontent.com/43678736/132086650-f1166246-b361-4c30-a04e-9781c555d14a.png",ee="https://user-images.githubusercontent.com/43678736/132086652-4562942e-aaea-466c-968f-380fffabf3f9.png",te="https://user-images.githubusercontent.com/43678736/132086653-0487e7e2-1ee3-49e2-8cfe-3e20f1f7490a.png",re="https://user-images.githubusercontent.com/43678736/132086656-6e96c815-e4e2-4ffd-9d71-57e9cc2450bc.png",ae="https://user-images.githubusercontent.com/43678736/132086658-5d27d3c2-394f-43fb-b512-9b414a257875.png",ne="https://user-images.githubusercontent.com/43678736/132086659-98f3ef6e-b9f3-4b6d-b18f-469b5334ba27.png",oe="https://user-images.githubusercontent.com/43678736/132086661-a5484553-06c7-4ffa-a8f9-96b57b1b0344.png",ie="https://user-images.githubusercontent.com/43678736/132086662-05ad1597-d5e5-4efa-833e-2876e966a745.png",se="https://user-images.githubusercontent.com/43678736/132086663-90c58955-f7fb-4bdb-ac53-92667d16d4a3.png",ce="https://user-images.githubusercontent.com/43678736/132086664-9a7530e7-6d78-4ef3-a176-20cf7f57b555.png",ue="https://user-images.githubusercontent.com/43678736/132086666-ab3c505d-b2c0-4177-9a06-aed5d9c39ee4.png",le="https://user-images.githubusercontent.com/43678736/132086667-6c7dcbcc-8d83-41a2-8e0a-85b09e2791ae.png",pe="https://user-images.githubusercontent.com/43678736/132086668-9f246e91-cf2e-49cf-9617-e1fbb71abbbb.png",de="https://user-images.githubusercontent.com/43678736/132086669-46113762-84d1-4b32-9441-b0138ce17a5d.png",fe="https://user-images.githubusercontent.com/43678736/145835364-2054509d-3448-4d34-921f-73dd6e297fc7.png",me="https://user-images.githubusercontent.com/43678736/145835367-19172bf8-cd5a-4cbe-b512-d0de1d91f269.png",ge="https://user-images.githubusercontent.com/43678736/145835373-a57ef0f5-3968-483b-9f55-6d67e7f1dcea.png",he="https://user-images.githubusercontent.com/43678736/132086670-0f96e770-cedc-4635-a5f9-cf97894c1d7a.png",xe="https://user-images.githubusercontent.com/43678736/132086671-02ad35ef-ec3a-4a65-abd5-5bf794dfcf7b.png",be="https://user-images.githubusercontent.com/43678736/132086672-3a856fda-823d-4997-b802-c7c640e6ef44.png",ve="https://user-images.githubusercontent.com/43678736/132086673-0c4409ab-754e-4619-8cfa-179d0ccf1bd9.png",Fe="https://user-images.githubusercontent.com/43678736/132086674-fdb56d02-5845-49b7-8462-6357bc963464.png",we="https://user-images.githubusercontent.com/43678736/132086675-c879645d-acb4-41a6-ab3c-4e6c2048badb.png",_e="https://user-images.githubusercontent.com/43678736/132086685-4e327c4c-a409-4b83-b36a-8d88936b314b.png",Ee="https://user-images.githubusercontent.com/43678736/132086688-8e82fae4-3a9b-49c0-bf99-77189525514c.png",ye="https://user-images.githubusercontent.com/43678736/132086689-fe1fef9f-d2db-455b-8f4b-09acd095f571.png",Ae="https://user-images.githubusercontent.com/43678736/132086689-fe1fef9f-d2db-455b-8f4b-09acd095f571.png",ze="https://user-images.githubusercontent.com/43678736/132086691-d472576b-ec6a-4332-acd2-dd6a00b72952.png",Se="https://user-images.githubusercontent.com/43678736/132086693-9d43571e-0c86-438f-b247-e2cb42e19e06.png",ke="https://user-images.githubusercontent.com/43678736/132086694-4e661d6a-1118-441e-8bc3-c52fcb2133b6.png",De="https://user-images.githubusercontent.com/43678736/132086697-1d82d724-35b6-4f06-847a-3c59a5deda6e.png",Re="https://user-images.githubusercontent.com/43678736/132086698-19384230-dbd7-4e05-bc69-ef4537b6aae3.png",Ce="https://user-images.githubusercontent.com/43678736/132086699-5993a482-04f4-4915-b105-9037f527cf61.png",Me="https://user-images.githubusercontent.com/43678736/132086700-c23461c8-6819-46e1-aecd-0a1f8d3507bb.png",je="https://user-images.githubusercontent.com/43678736/132086701-c8044c09-8d95-4af1-9410-66761001d7da.png",Ie="https://user-images.githubusercontent.com/43678736/132086702-59294337-ed99-4302-badd-316b2c1ff62f.png",Te="https://user-images.githubusercontent.com/43678736/132086704-8fd51e7c-afa2-47a3-ab2f-d0bcd0ecae9f.png",Le="https://user-images.githubusercontent.com/43678736/132086705-33294da1-5c0f-49f7-b890-e4857cec0a6d.png",Ue="https://user-images.githubusercontent.com/43678736/132086706-22f805d0-39d4-494b-824e-47dc75d05eb7.png",Be="https://user-images.githubusercontent.com/43678736/132086707-e61a84de-d396-4dbf-8d1b-1d6ee19e1ac8.png",Ne="https://user-images.githubusercontent.com/43678736/132086707-e61a84de-d396-4dbf-8d1b-1d6ee19e1ac8.png",Pe="https://user-images.githubusercontent.com/43678736/132086708-21d096dd-7148-40aa-97f1-cbb099339740.png",Oe="https://user-images.githubusercontent.com/43678736/132086709-811d4e90-3cfa-4044-a956-aeda9c67fc92.png",qe="https://user-images.githubusercontent.com/43678736/132086710-c5479c6c-0249-4542-adad-48b0ef40b775.png",He="https://user-images.githubusercontent.com/43678736/132086711-1524a3e7-3e33-4822-a34f-ff3235404045.png",Ve="https://user-images.githubusercontent.com/43678736/132086712-17e2c491-f6e4-4586-aef6-06bcc5f4b0e5.png",Ze="https://user-images.githubusercontent.com/43678736/132086715-204b5a8b-9c5a-4bac-8294-9237ebc16089.png",Ge="https://user-images.githubusercontent.com/43678736/132086716-64511d20-58cb-45a8-85df-f4d9408b469d.png",Xe="https://user-images.githubusercontent.com/43678736/132086718-a8499333-6282-4820-aa1f-4d133eb54648.png",Je=function(e){var t=/(?:\.([^.]+))?$/.exec(e);return t?t[1]:""},Ke="octet",Qe=function(e){switch(e){case"aac":return"aac";case"midi":case"x-midi":return"midi";case"mpeg":return"mpeg";case"ogg":return"oga";case"opus":return"opus";case"wav":return"wav";case"webm":return"webm";case"wma":return"wma";default:return Ke}},We=function(e){switch(e){case"css":return"css";case"csv":return"csv";case"html":return"html";case"calendar":return"icalendar";case"javascript":case"x-javascript":return"javascript";case"plain":return"text";case"xml":return"xml";default:return Ke}},$e=function(e){switch(e){case"bmp":return"bmp";case"gif":return"gif";case"jpg":case"jpeg":return"jpeg";case"png":return"png";case"tiff":return"tiff";case"webp":return"webp";default:return Ke}},Ye=function(e){switch(e){case"otf":return"otf";case"ttf":return"ttf";case"woff":case"woff2":return"woff";default:return Ke}},et=function(e){switch(e){case"x-msvideo":case"msvideo":case"avi":return"avi";case"mp4":return"mp4";case"mpeg":return"mpeg";case"ogg":return"ogv";case"mp2t":return"mp2t";case"wmv":return"wmv";case"webm":return"webm";default:return Ke}},tt=function(e){switch(e){case"x-abiword":case"abiword":return"abw";case"x-freearc":case"freearc":return"arc";case"vnd.amazon.ebook":return"azw";case"octet-stream":return"octet";case"x-bzip":case"bzip":return"bz";case"x-bzip2":case"bzip2":return"bz2";case"x-cdf":return"cda";case"msaccess":return"accdb";case"csh":case"x-csh":return"csh";case"vnd.ms-fontobject":return"eot";case"epub+zip":return"epub";case"gzip":return"gzip";case"java-archive":return"jar";case"x-javascript":return"javascript";case"json":return"json";case"ld+json":return"jsonld";case"vnd.apple.installer+xml":return"mpkg";case"ogg":return"ogx";case"vnd.rar":return"rar";case"rtf":return"rtf";case"x-sh":case"sh":return"sh";case"x-shockwave-flash":return"swf";case"x-tar":return"tar";case"x-httpd-php":return"php";case"vnd.visio":return"vsd";case"xhtml+xml":return"xhtml";case"xml":return"xml";case"vnd.mozilla.xul+xml":return"xul";case"vnd.openxmlformats-officedocument.wordprocessingml.document":case"msword":return"docx";case"vnd.openxmlformats-officedocument.spreadsheetml.sheet":return"xlsx";case"vnd.openxmlformats-officedocument.presentationml.presentation":case"vnd.ms-powerpoint":return"pptx";case"vnd.oasis.opendocument.presentation":return"odp";case"vnd.oasis.opendocument.text":return"odt";case"vnd.oasis.opendocument.spreadsheet":return"ods";case"zip":case"x-zip-compressed":return"zip";case"pdf":return"pdf";default:return Ke}},rt=function(e){if(!e||!e.includes("/"))return Ke;var t=e.split("/")[0],r=e.split("/")[1];switch(t){case"application":return tt(r);case"audio":return Qe(r);case"video":return et(r);case"text":return We(r);case"image":return $e(r);case"font":return Ye(r);default:return Ke}},at=function(e){var t="octet";return e&&""!==e&&(e.includes("zip")||e.includes("rar")?t="zip":e.includes("doc")?t="docx":e.includes("xls")?t="xlsx":e.includes("drawio")?t="drawio":e.includes("psd")?t="psd":e.includes("csv")?t="csv":"jsx"===e?t="react":"py"===e?t="python":"vue"===e?t="vue":"java"===e?t="java":"ts"===e?t="typescript":"sass"!==e&&"scss"!==e||(t="sass")),t},nt=function(e){var t="text";return e&&""!==e&&("jsx"===e?t="react":"py"===e?t="python":"vue"===e?t="vue":"java"===e?t="java":"ts"===e||"tsx"===e?t="typescript":"js"===e?t="javascript":"xml"===e?t="xml":"php"===e&&(t="php")),t},ot={aac:C,accdb:j,abw:M,arc:X,avi:I,azw:T,octet:ue,bmp:L,bz:U,bz2:B,cda:N,csh:P,css:O,csv:q,docx:H,drawio:V,eot:Z,epub:G,gzip:K,gif:J,html:Q,icalendar:W,jar:Y,jpeg:te,javascript:ee,json:re,jsonld:ae,midi:ne,mp3:oe,mp4:ie,mpeg:se,mpkg:ce,mp2t:ue,odp:le,ods:pe,odt:de,oga:fe,ogv:me,ogx:ge,opus:he,otf:xe,png:Fe,pdf:be,php:ve,pptx:we,psd:_e,rar:Ae,rtf:Se,sass:ke,sh:De,swf:Re,tar:ye,tiff:Me,ttf:je,typescript:Ie,text:Ce,vsd:Te,wav:Ue,weba:Ne,webm:Be,webp:Pe,woff:He,wma:Oe,wmv:qe,xhtml:Q,xlsx:Ve,xml:Ze,xul:Ge,zip:Xe,sevenzip:R,python:Ee,java:$,react:ze,vue:Le,fallBack:ue},it=function(){function e(e){var t=e.id,r=e.file,a=e.name,n=e.size,o=e.type,i=e.imageUrl,s=e.valid,c=e.errors,u=e.uploadMessage,l=e.uploadStatus,p=e.progress,d=e.xhr,f=e.extraData,m=e.extraUploadData,g=e.serverResponse,h=e.downloadUrl,x=e.videoUrl;this.id=t,this.file=r,this.name=a,this.size=n,this.type=o,this.imageUrl=i,this.valid=s,this.errors=c,this.uploadStatus=l,this.uploadMessage=u,this.progress=p,this.xhr=d,this.extraData=f,this.extraUploadData=m,this.serverResponse=g,this.downloadUrl=h,this.videoUrl=x}return e.toExtFile=function(e){for(var t={},r=Object.keys(e),a=Object.values(e),n=0;n<a.length;n++){var o=a[n],i=r[n];void 0!==o&&(t[i]=o)}return t},e.prototype.toExtFile=function(){return e.toExtFile(this)},e}(),st=function(){return st=Object.assign||function(e){for(var t,r=1,a=arguments.length;r<a;r++)for(var n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},st.apply(this,arguments)};function ct(e,t,r,a){return new(r||(r=Promise))((function(n,o){function i(e){try{c(a.next(e))}catch(e){o(e)}}function s(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,s)}c((a=a.apply(e,t||[])).next())}))}function ut(e,t){var r,a,n,o,i={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(s){return function(c){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;o&&(o=0,s[0]&&(i=0)),i;)try{if(r=1,a&&(n=2&s[0]?a.return:s[0]?a.throw||((n=a.return)&&n.call(a),0):a.next)&&!(n=n.call(a,s[1])).done)return n;switch(a=0,n&&(s=[2&s[0],n.value]),s[0]){case 0:case 1:n=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,a=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(n=i.trys,(n=n.length>0&&n[n.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!n||s[1]>n[0]&&s[1]<n[3])){i.label=s[1];break}if(6===s[0]&&i.label<n[1]){i.label=n[1],n=s;break}if(n&&i.label<n[2]){i.label=n[2],i.ops.push(s);break}n[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],a=0}finally{r=n=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,c])}}}function lt(e,t,r){if(r||2===arguments.length)for(var a,n=0,o=t.length;n<o;n++)!a&&n in t||(a||(a=Array.prototype.slice.call(t,0,n)),a[n]=t[n]);return e.concat(a||Array.prototype.slice.call(t))}var pt=function(){function e(){}return e.getNextId=function(){return e.nextId++,e.nextId},e.setFileList=function(t,r){return t?(e.fileLists[t]=lt([],r,!0),t):0},e.createFileListMap=function(){var t=e.getNextId();return e.fileLists[t]=[],t},e.removeFileListMap=function(t){if(!t)return 0;try{return e.fileLists[t]=void 0,t}catch(e){return"development"===process.env.NODE_ENV&&console.error("Error on remove",e),0}},e.getExtFileInstanceList=function(t){try{if(!t)return;return e.fileLists[t]}catch(e){return void("development"===process.env.NODE_ENV&&console.error("Error on getExtFileInstanceList",e))}},e.setFileListMapPreparing=function(t,r,a,n){if("number"==typeof t||"string"==typeof t)try{var o,i=lt([],r,!0);n&&a&&(i=i.filter((function(e){return e.valid}))),o=(i=a?i.map((function(e){return"success"!==e.uploadStatus&&e.valid?st(st({},e),{uploadStatus:"preparing"}):st({},e)})):i.map((function(e){return"success"!==e.uploadStatus?st(st({},e),{uploadStatus:"preparing"}):st({},e)}))).map((function(e){return new it(e)}));e.setFileList(t,o);return o}catch(e){return void("development"===process.env.NODE_ENV&&console.error("setFileListMapPreparing Error on get List",e))}},e.setFileListMapPreparing2=function(t,r,a,n){return e.setFileList(t,r.map((function(e){return new it(st(st({},e),{uploadStatus:"preparing"}))}))),e.getExtFileInstanceList(t)},e.nextId=0,e.fileLists={},e}(),dt=function(){function e(){}return e.createFile=function(e,t,r){var a=new File([],e,{type:r});return Object.defineProperty(a,"size",{get:function(){return t}}),a},e.create_aac=function(t){return e.createFile("acc_audio-file-with-large-name.aac",t||3516516,"audio/aac")},e.create_abw=function(t){return e.createFile("abiword-file-with-large-name.abw",t||3516516,"application/x-abiword")},e.create_freearc=function(t){return e.createFile("freearc-file-with-large-name.arc",t||3516516,"application/x-freearc")},e.create_avi=function(t){return e.createFile("avi-file-with-large-name.avi",t||3516516,"video/x-msvideo")},e.create_azw=function(t){return e.createFile("amazon_kindle_ebook-file-with-large-name.azw",t||3516516,"application/vnd.amazon.ebook")},e.create_octet=function(t){return e.createFile("binary_octet_stream-file-with-large-name.bin",t||3516516,"application/octet-stream")},e.create_bmp=function(t){return e.createFile("bit_map-file-with-large-name.bmp",t||3516516,"image/bmp")},e.create_bz=function(t){return e.createFile("x_bzip-file-with-large-name.bz",t||3516516,"application/x-bzip")},e.create_bz2=function(t){return e.createFile("x_bzip_2-file-with-large-name.bz2",t||3516516,"application/x-bzip2")},e.create_cda=function(t){return e.createFile("cd_audio-file-with-large-name.cda",t||3516516,"application/x-cdf")},e.create_csh=function(t){return e.createFile("test-file-with-large-name.csh",t||3516516,"application/x-csh")},e.create_css=function(t){return e.createFile("test-file-with-large-name.css",t||3516516,"text/css")},e.create_csv=function(t){return e.createFile("test-file-with-large-name.csv",t||3516516,"text/csv")},e.create_doc=function(t){return e.createFile("test-file-with-large-name.doc",t||3516516,"application/msword")},e.create_docx=function(t){return e.createFile("test-file-with-large-name.docx",t||3516516,"application/vnd.openxmlformats-officedocument.wordprocessingml.document")},e.create_eot=function(t){return e.createFile("test-file-with-large-name.eot",t||3516516,"application/vnd.ms-fontobject")},e.create_epub=function(t){return e.createFile("test-file-with-large-name.epub",t||3516516,"application/epub+zip")},e.create_gzip=function(t){return e.createFile("test-file-with-large-name.gz",t||3516516,"application/gzip")},e.create_gif=function(t){return e.createFile("test-file-with-large-name.gif",t||3516516,"image/gif")},e.create_htm=function(t){return e.createFile("test-file-with-large-name.htm",t||3516516,"text/html")},e.create_html=function(t){return e.createFile("test-file-with-large-name.html",t||3516516,"text/html")},e.create_ico=function(t){return e.createFile("test-file-with-large-name.ico",t||3516516,"image/vnd.microsoft.icon")},e.create_icalendar=function(t){return e.createFile("test-file-with-large-name.ics",t||3516516,"text/calendar")},e.create_jar=function(t){return e.createFile("test-file-with-large-name.jar",t||3516516,"application/java-archive")},e.create_jpeg=function(t){return e.createFile("test-file-with-large-name.jpeg",t||3516516,"image/jpeg")},e.create_jpg=function(t){return e.createFile("test-file-with-large-name.jpg",t||3516516,"image/jpeg")},e.create_js=function(t){return e.createFile("test-file-with-large-name.js",t||3516516,"text/javascript")},e.create_json=function(t){return e.createFile("test-file-with-large-name.json",t||3516516,"application/json")},e.create_jsonld=function(t){return e.createFile("test-file-with-large-name.jsonld",t||3516516,"application/ld+json")},e.create_mid=function(t){return e.createFile("test-file-with-large-name.mid",t||3516516,"audio/midi")},e.create_x_mid=function(t){return e.createFile("test-file-with-large-name.mid",t||3516516,"audio/x-midi")},e.create_midi=function(t){return e.createFile("test-file-with-large-name.midi",t||3516516,"audio/x-midi")},e.create_x_midi=function(t){return e.createFile("test-file-with-large-name.midi",t||3516516,"audio/x-midi")},e.create_mjs=function(t){return e.createFile("test-file-with-large-name.mjs",t||3516516,"text/javascript")},e.create_mp3=function(t){return e.createFile("test-file-with-large-name.mp3",t||3516516,"audio/mpeg")},e.create_mp4=function(t){return e.createFile("test-file-with-large-name.mp4",t||3516516,"video/mp4")},e.create_mpeg=function(t){return e.createFile("test-file-with-large-name.mpeg",t||3516516,"video/mpeg")},e.create_mpkg=function(t){return e.createFile("test-file-with-large-name.mpkg",t||3516516,"application/vnd.apple.installer+xml")},e.create_odp=function(t){return e.createFile("test-file-with-large-name.odp",t||3516516,"application/vnd.oasis.opendocument.presentation")},e.create_ods=function(t){return e.createFile("test-file-with-large-name.ods",t||3516516,"application/vnd.oasis.opendocument.spreadsheet")},e.create_odt=function(t){return e.createFile("test-file-with-large-name.odt",t||3516516,"application/vnd.oasis.opendocument.text")},e.create_oga=function(t){return e.createFile("test-file-with-large-name.oga",t||3516516,"audio/ogg")},e.create_ogv=function(t){return e.createFile("test-file-with-large-name.ogv",t||3516516,"video/ogg")},e.create_ogx=function(t){return e.createFile("test-file-with-large-name.ogx",t||3516516,"application/ogg")},e.create_opus=function(t){return e.createFile("test-file-with-large-name.opus",t||3516516,"audio/opus")},e.create_otf=function(t){return e.createFile("test-file-with-large-name.otf",t||3516516,"font/otf")},e.create_png=function(t){return e.createFile("test-file-with-large-name.png",t||3516516,"image/png")},e.create_pdf=function(t){return e.createFile("test-file-with-large-name.pdf",t||3516516,"application/pdf")},e.create_php=function(t){return e.createFile("test-file-with-large-name.php",t||3516516,"application/x-httpd-php")},e.create_ppt=function(t){return e.createFile("test-file-with-large-name.ppt",t||3516516,"application/vnd.ms-powerpoint")},e.create_pptx=function(t){return e.createFile("test-file-with-large-name.pptx",t||3516516,"application/vnd.openxmlformats-officedocument.presentationml.presentation")},e.create_rar=function(t){return e.createFile("test-file-with-large-name.rar",t||3516516,"application/vnd.rar")},e.create_rtf=function(t){return e.createFile("test-file-with-large-name.rtf",t||3516516,"application/rtf")},e.create_sh=function(t){return e.createFile("test-file-with-large-name.sh",t||3516516,"application/x-sh")},e.create_svg=function(t){return e.createFile("test-file-with-large-name.svg",t||3516516,"image/svg+xml")},e.create_swf=function(t){return e.createFile("test-file-with-large-name.swf",t||3516516,"application/x-shockwave-flash")},e.create_tar=function(t){return e.createFile("test-file-with-large-name.tar",t||3516516,"application/x-tar")},e.create_tif=function(t){return e.createFile("test-file-with-large-name.tif",t||3516516,"image/tiff")},e.create_tiff=function(t){return e.createFile("test-file-with-large-name.tiff",t||3516516,"image/tiff")},e.create_ts=function(t){return e.createFile("mp2t_video-file-with-large-name.ts",t||3516516,"video/mp2t")},e.create_ttf=function(t){return e.createFile("test-file-with-large-name.ttf",t||3516516,"font/ttf")},e.create_text=function(t){return e.createFile("test-file-with-large-name.txt",t||3516516,"text/plain")},e.create_typescript=function(t){return e.createFile("typescript-file-with-large-name.ts",t||3516516,"text/plain")},e.create_vsd=function(t){return e.createFile("ms_visio-file-with-large-name.vsd",t||3516516,"application/vnd.visio")},e.create_wav=function(t){return e.createFile("wav_audio-file-with-large-name.wav",t||3516516,"audio/wav")},e.create_weba=function(t){return e.createFile("web_audio-file-with-large-name.weba",t||3516516,"audio/webm")},e.create_webm=function(t){return e.createFile("web_video-file-with-large-name.webm",t||3516516,"video/webm")},e.create_webp=function(t){return e.createFile("web_image-file-with-large-name.webp",t||3516516,"image/webp")},e.create_woff=function(t){return e.createFile("test-file-with-large-name.woff",t||3516516,"font/woff")},e.create_woff2=function(t){return e.createFile("test-file-with-large-name.woff2",t||3516516,"font/woff2")},e.create_xhtml=function(t){return e.createFile("test-file-with-large-name.xhtml",t||3516516,"application/xhtml+xml")},e.create_xlsx=function(t){return e.createFile("test-file-with-large-name.xls",t||3516516,"application/vnd.ms-excel")},e.create_xls=function(t){return e.createFile("test-file-with-large-name.xlsx",t||3516516,"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")},e.create_xml=function(t){return e.createFile("xml-file-with-large-name.xml",t||3516516,"application/xml")},e.create_xml_txt=function(t){return e.createFile("xml_plain_text-file-with-large-name.xml",t||3516516,"application/xml")},e.create_xul=function(t){return e.createFile("test-file-with-large-name.xul",t||3516516,"application/vnd.mozilla.xul+xml")},e.create_zip=function(t){return e.createFile("zip-file-with-large-name.zip",t||3516516,"application/zip")},e.create_3gp=function(t){return e.createFile("3gp_video-file-with-large-name.3gp",t||3516516,"video/3gpp")},e.create_3gp2=function(t){return e.createFile("3gp2_video-file-with-large-name.3g2",t||3516516,"video/3gpp2")},e.create_3gp_a=function(t){return e.createFile("3gp_audio-file-with-large-name.3gp",t||3516516,"audio/3gpp")},e.create_3gp_v=function(t){return e.createFile("3gp_audio-file-with-large-name.3gp2",t||3516516,"audio/3gpp2")},e.create_7z=function(t){return e.createFile("seven_zip-file-with-large-name.7z",t||3516516,"application/x-7z-compressed")},e.create_python=function(t){return e.createFile("python-file-with-large-name.py",t||3516516,"text/plain")},e.create_java=function(t){return e.createFile("java-file-with-large-name.java",t||3516516,"text/plain")},e.create_react=function(t){return e.createFile("react_jsx-file-with-large-name.jsx",t||3516516,"text/plain")},e.create_vue=function(t){return e.createFile("vue-file-with-large-name.vue",t||3516516,"text/plain")},e.createFileListMiscelanious=function(t){var r=[];return r.push(e.create_aac(t)),r.push(e.create_abw(t)),r.push(e.create_freearc(t)),r.push(e.create_avi(t)),r.push(e.create_azw(t)),r.push(e.create_octet(t)),r.push(e.create_bmp(t)),r.push(e.create_bz(t)),r.push(e.create_bz2(t)),r.push(e.create_cda(t)),r.push(e.create_csh(t)),r.push(e.create_css(t)),r.push(e.create_csv(t)),r.push(e.create_doc(t)),r.push(e.create_docx(t)),r.push(e.create_eot(t)),r.push(e.create_epub(t)),r.push(e.create_gzip(t)),r.push(e.create_gif(t)),r.push(e.create_htm(t)),r.push(e.create_html(t)),r.push(e.create_ico(t)),r.push(e.create_icalendar(t)),r.push(e.create_jar(t)),r.push(e.create_jpeg(t)),r.push(e.create_jpg(t)),r.push(e.create_js(t)),r.push(e.create_json(t)),r.push(e.create_jsonld(t)),r.push(e.create_mid(t)),r.push(e.create_midi(t)),r.push(e.create_x_mid(t)),r.push(e.create_x_midi(t)),r.push(e.create_mjs(t)),r.push(e.create_mp3(t)),r.push(e.create_mp4(t)),r.push(e.create_mpeg(t)),r.push(e.create_mpkg(t)),r.push(e.create_odp(t)),r.push(e.create_ods(t)),r.push(e.create_odt(t)),r.push(e.create_oga(t)),r.push(e.create_ogv(t)),r.push(e.create_ogx(t)),r.push(e.create_opus(t)),r.push(e.create_otf(t)),r.push(e.create_png(t)),r.push(e.create_pdf(t)),r.push(e.create_php(t)),r.push(e.create_ppt(t)),r.push(e.create_pptx(t)),r.push(e.create_rar(t)),r.push(e.create_rtf(t)),r.push(e.create_sh(t)),r.push(e.create_svg(t)),r.push(e.create_swf(t)),r.push(e.create_tar(t)),r.push(e.create_tif(t)),r.push(e.create_tiff(t)),r.push(e.create_ts(t)),r.push(e.create_ttf(t)),r.push(e.create_text(t)),r.push(e.create_typescript(t)),r.push(e.create_vsd(t)),r.push(e.create_wav(t)),r.push(e.create_weba(t)),r.push(e.create_webm(t)),r.push(e.create_webp(t)),r.push(e.create_woff(t)),r.push(e.create_woff2(t)),r.push(e.create_xhtml(t)),r.push(e.create_xlsx(t)),r.push(e.create_xls(t)),r.push(e.create_xml(t)),r.push(e.create_xml_txt(t)),r.push(e.create_xul(t)),r.push(e.create_zip(t)),r.push(e.create_python(t)),r.push(e.create_java(t)),r.push(e.create_react(t)),r.push(e.create_vue(t)),r},e}(),ft=function(e,t,r){return void 0===e&&(e="png-image-file-with-large-name.png"),void 0===t&&(t=455555),void 0===r&&(r="image/png"),dt.createFile(e,t,r)},mt=function(){function e(){}return e.getNextId=function(){return e.nextId++,e.nextId},e.nextId=0,e}();function gt(e,t){return void 0===e&&(e=0),void 0===t&&(t=0),Math.floor(Math.random()*(t-e))+e}var ht=function(e){return e&&0!==e.length?e.split(",").map((function(e){return e.trim()})):[]},xt=function(e,t){for(var r=t.name,a=t.type,n=0;n<e.length;n++){var o=e[n];if(0!==o.length){if("."===o.charAt(0)&&o.includes(Je(r)))return!0;if(a&&a.length>0&&o.includes("/")&&a.includes("/")){var i=o.split("/")[0],s=o.split("/")[1],c=a.split("/")[0],u=a.split("/")[1];if(i===c){if("*"===s)return!0;if(s===u)return!0}}}}return!1},bt=function(e,t,r,a){var n=st({},e),o=[];if(!e.file)return st({},n);if(t){var i=t(n.file).errors;i&&o.push.apply(o,i)}var s=r.maxFileSize,c=r.accept,u=e.file;if(s&&u.size>s){var l=a.maxSizeError;o.push(l(s))}c&&!xt(ht(c),u)&&o.push(a.acceptError);var p=0===o.length;return n=st(st({},n),{valid:p,errors:p?void 0:o})},vt=function(e,t,r,a){var n=mt.getNextId(),o=[];if(t)return st({id:n,file:e},t(e));var i=r.maxFileSize,s=r.accept;if(i&&e.size>i){var c=a.maxSizeError;o.push(c(i))}return s&&!xt(ht(s),e)&&o.push(a.acceptError),{id:n,file:e,valid:0===o.length,errors:o}},Ft=["File is too big. Max file size allowed is 80mb.","File's type is not allowed.","Max amount of files (28) has been reached."];function wt(e,t){for(var r=Object.keys(t||{}),a=0;a<r.length&&t;a++)e.append(r[a],t[r[a]]);e.append("otherValue","HAAAAAAAAAAAAAAa")}function _t(e,t){for(var r=Object.keys(t||{}),a=0;a<r.length&&t;a++)e.setRequestHeader(r[a],t[r[a]])}var Et={success:!1,message:"Timeout error",payload:{}},yt={success:!1,message:"Upload aborted",payload:{}},At={success:!1,message:"Error when parsing JSON response",payload:{}},zt={success:!1,message:"Unexpected error",payload:{}},St=function(e){return st(st({},e),{uploadMessage:"Unable to upload. xhr object was not provided",uploadStatus:"error",serverResponse:{success:!1}})},kt=function(e){try{var t=JSON.parse(e.response),r=t.success,a=t.message;return{success:"boolean"==typeof r&&r,message:"string"==typeof a?a:"Error on message response",payload:t.payload||{}}}catch(e){return At}},Dt=function(e,t){return st(st({},e),{serverResponse:t,uploadMessage:t.message,uploadStatus:"success"})},Rt=function(e,t){return st(st({},e),{uploadMessage:t.message,uploadStatus:"error",serverResponse:t})},Ct=function(e,t,r,a,n){return void 0===t&&(t="POST"),new Promise((function(o,i){var s=["POST","PUT","PATCH"].includes(t.toUpperCase())?t:"POST";e.upload.onload=function(){},e.upload.ontimeout=function(){return o(Et)},e.upload.onabort=function(){o(yt)},e.onloadend=function(e){return ct(void 0,void 0,void 0,(function(){return ut(this,(function(e){return[2]}))}))},e.onreadystatechange=function(t){return ct(void 0,void 0,void 0,(function(){return ut(this,(function(t){return e.readyState,4===e.readyState&&(""!==e.response?o(kt(e)):o(yt)),[2]}))}))},e.open(s,r,!0),_t(e,n),e.send(a)}))};var Mt={indianred:"#CD5C5C",lightcoral:"#F08080",salmon:"#FA8072",darksalmon:"#E9967A",lightsalmon:"#FFA07A",crimson:"#DC143C",red:"#FF0000",firebrick:"#B22222",darkred:"#8B0000",pink:"#FFC0CB",lightpink:"#FFB6C1",hotpink:"#FF69B4",deeppink:"#FF1493",mediumvioletred:"#C71585",palevioletred:"#DB7093",coral:"#FF7F50",tomato:"#FF6347",orangered:"#FF4500",darkorange:"#FF8C00",orange:"#FFA500",gold:"#FFD700",yellow:"#FFFF00",lightyellow:"#FFFFE0",lemonchiffon:"#FFFACD",lightgoldenrodyellow:"#FAFAD2",papayawhip:"#FFEFD5",moccasin:"#FFE4B5",peachpuff:"#FFDAB9",palegoldenrod:"#EEE8AA",khaki:"#F0E68C",darkkhaki:"#BDB76B",lavender:"#E6E6FA",thistle:"#D8BFD8",plum:"#DDA0DD",violet:"#EE82EE",orchid:"#DA70D6",fuchsia:"#FF00FF",magenta:"#FF00FF",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",rebeccapurple:"#663399",blueviolet:"#8A2BE2",darkviolet:"#9400D3",darkorchid:"#9932CC",darkmagenta:"#8B008B",purple:"#800080",indigo:"#4B0082",slateblue:"#6A5ACD",darkslateblue:"#483D8B",mediumslateblue:"#7B68EE",greenyellow:"#ADFF2F",chartreuse:"#7FFF00",lawngreen:"#7CFC00",lime:"#00FF00",limegreen:"#32CD32",palegreen:"#98FB98",lightgreen:"#90EE90",mediumspringgreen:"#00FA9A",springgreen:"#00FF7F",mediumseagreen:"#3CB371",seagreen:"#2E8B57",forestgreen:"#228B22",green:"#008000",darkgreen:"#006400",yellowgreen:"#9ACD32",olivedrab:"#6B8E23",olive:"#808000",darkolivegreen:"#556B2F",mediumaquamarine:"#66CDAA",darkseagreen:"#8FBC8B",lightseagreen:"#20B2AA",darkcyan:"#008B8B",teal:"#008080",aqua:"#00FFFF",cyan:"#00FFFF",lightcyan:"#E0FFFF",paleturquoise:"#AFEEEE",aquamarine:"#7FFFD4",turquoise:"#40E0D0",mediumturquoise:"#48D1CC",darkturquoise:"#00CED1",cadetblue:"#5F9EA0",steelblue:"#4682B4",lightsteelblue:"#B0C4DE",powderblue:"#B0E0E6",lightblue:"#ADD8E6",skyblue:"#87CEEB",lightskyblue:"#87CEFA",deepskyblue:"#00BFFF",dodgerblue:"#1E90FF",cornflowerblue:"#6495ED",royalblue:"#4169E1",blue:"#0000FF",mediumblue:"#0000CD",darkblue:"#00008B",navy:"#000080",midnightblue:"#191970",cornsilk:"#FFF8DC",blanchedalmond:"#FFEBCD",bisque:"#FFE4C4",navajowhite:"#FFDEAD",wheat:"#F5DEB3",burlywood:"#DEB887",tan:"#D2B48C",rosybrown:"#BC8F8F",sandybrown:"#F4A460",goldenrod:"#DAA520",darkgoldenrod:"#B8860B",peru:"#CD853F",chocolate:"#D2691E",saddlebrown:"#8B4513",sienna:"#A0522D",brown:"#A52A2A",maroon:"#800000",white:"#FFFFFF",snow:"#FFFAFA",honeydew:"#F0FFF0",mintcream:"#F5FFFA",azure:"#F0FFFF",aliceblue:"#F0F8FF",ghostwhite:"#F8F8FF",whitesmoke:"#F5F5F5",seashell:"#FFF5EE",beige:"#F5F5DC",oldlace:"#FDF5E6",floralwhite:"#FFFAF0",ivory:"#FFFFF0",antiquewhite:"#FAEBD7",linen:"#FAF0E6",lavenderblush:"#FFF0F5",mistyrose:"#FFE4E1",gainsboro:"#DCDCDC",lightgray:"#D3D3D3",silver:"#C0C0C0",darkgray:"#A9A9A9",gray:"#808080",dimgray:"#696969",lightslategray:"#778899",slategray:"#708090",darkslategray:"#2F4F4F",black:"#000000"},jt=function(e,t,r){void 0===t&&(t=0);var a=r||"rgba(255, 255, 255, 0.6)";if(!e)return a;var n=e.toUpperCase();if(n.includes("RGBA"))return n;if(n.includes("RGB"))return n.replace("RGB","rgba").replace(")",", ".concat(t,")"));if(!It(Tt(n)))return a;var o,i,s;return o=16*Bt(n.charAt(1))+Bt(n.charAt(2)),i=16*Bt(n.charAt(3))+Bt(n.charAt(4)),s=16*Bt(n.charAt(5))+Bt(n.charAt(6)),"rgba(".concat(o,", ").concat(i,",").concat(s," , ").concat(t,")")},It=function(e){if("#"!==e.charAt(0))return!1;if(7!==e.length)return!1;for(var t=1;t<e.length;t++)if(!Lt.includes(e.charAt(t)))return!1;return!0};function Tt(e){return e?void 0!==Mt[e.toLocaleLowerCase()]?Mt[e.toLocaleLowerCase()]:e:""}var Lt=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"],Ut=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],Bt=function(e){return Lt.includes(e)?Ut[Lt.indexOf(e)]:0},Nt=function(e){return void 0!==e&&""!==e?e:Pt},Pt="#646c7f";exports.ABORTED_ERROR_RESPONSE=yt,exports.DropzoneEnglish=s,exports.DropzoneFrench=n,exports.DropzoneItalian=t,exports.DropzoneLocalizer=z,exports.DropzoneLocalizerSelector=S,exports.DropzonePortuguese=h,exports.DropzoneRussian=f,exports.DropzoneSimplifiedChinese=v,exports.DropzoneSpanish=l,exports.DropzoneTraditionalChinese=_,exports.ExtFileInstance=it,exports.ExtFileManager=pt,exports.FileIdGenerator=mt,exports.FileItemEnglish=c,exports.FileItemFrench=o,exports.FileItemItalian=r,exports.FileItemLocalizer=A,exports.FileItemLocalizerSelector=function(e){switch(e){case"ES-es":return A["ES-es"];case"EN-en":default:return A["EN-en"];case"FR-fr":return A["FR-fr"];case"IT-it":return A["IT-it"];case"PT-pt":return A["PT-pt"];case"RU-ru":return A["RU-ru"];case"ZH-cn":return A["ZH-cn"];case"ZH-hk":return A["ZH-hk"]}},exports.FileItemPortuguese=x,exports.FileItemRussian=m,exports.FileItemSimplifiedChinese=F,exports.FileItemSpanish=p,exports.FileItemTraditionalChinese=E,exports.FuiUpload=function(e,t,r,a,n){return new Promise((function(o,i){e.upload.onload=function(){},e.upload.ontimeout=function(){return o(Et)},e.upload.onabort=function(){return o(yt)},e.onreadystatechange=function(t){return ct(void 0,void 0,void 0,(function(){return ut(this,(function(t){return 4===e.readyState&&(""!==e.response?o(kt(e)):o(zt)),[2]}))}))},e.open(t,r,!0);for(var s=Object.keys(n),c=0;c<s.length;c++)e.setRequestHeader(s[c],n[s[c]]);e.send(a)}))},exports.JSON_PARSE_ERROR_RESPONSE=At,exports.JsonParseResponse=kt,exports.NAMED_COLORS=Mt,exports.NO_XHR_PROVIDED_ERROR=St,exports.SyntheticFile=dt,exports.TIMEOUT_ERROR_RESPONSE=Et,exports.UNEXPECTED_ERROR_RESPONSE=zt,exports.ValidateErrorEnglish=u,exports.ValidateErrorFrench=i,exports.ValidateErrorItalian=a,exports.ValidateErrorLocalizer=k,exports.ValidateErrorLocalizerSelector=D,exports.ValidateErrorPortuguese=b,exports.ValidateErrorRussian=g,exports.ValidateErrorSimplifiedChinese=w,exports.ValidateErrorSpanish=d,exports.ValidateErrorTraditionalChinese=y,exports.aac=C,exports.abw=M,exports.accdb=j,exports.addClassName=function(e,t){return t?"".concat(e," ").concat(t):e},exports.addExtraData=wt,exports.addHeaders=_t,exports.applicationSelector=tt,exports.asureColor=Nt,exports.audioSelector=Qe,exports.avi=I,exports.azw=T,exports.bmp=L,exports.brighterColor=function(e,t){void 0===t&&(t=25);var r="",a=(100+t)/100,n=0,o=0,i=0;if(It(Tt(e)))n=16*Bt(e.charAt(1))+Bt(e.charAt(2)),o=16*Bt(e.charAt(3))+Bt(e.charAt(4)),i=16*Bt(e.charAt(5))+Bt(e.charAt(6)),r="rgb(".concat(n*a,", ").concat(o*a,",").concat(i*a,")");else if(e.includes("rgba")){var s=e.replace("rgba(","").split(",");r="rgb(".concat(parseInt(s[0],10)*a,", ").concat(parseInt(s[1],10)*a,",").concat(parseInt(s[2],10)*a,")")}else if(e.includes("rgb")){s=e.replace("rgb(","").split(",");r="rgb(".concat(parseInt(s[0],10)*a,", ").concat(parseInt(s[1],10)*a,",").concat(parseInt(s[2],10)*a,")")}return r},exports.bz=U,exports.bz2=B,exports.cda=N,exports.checkIsCode=nt,exports.cleanInput=function(e){e&&(e.value="")},exports.colourNameToHex=Tt,exports.completeAsureColor=function(e,t){return void 0===t&&(t=1),jt(Nt(Tt(e)),t)},exports.completeUploadResult=function(e,t,r){return{id:e.id,uploadedFile:st(st({},e),{uploadMessage:t.message,uploadStatus:r}),serverResponse:t}},exports.createListOfMultiTypeFile=function(e){return dt.createFileListMiscelanious(e)},exports.createSyntheticFile=ft,exports.createUploadConfig=function(e,t,r,a,n){return{url:e,method:t,headers:r,uploadLabel:a,cleanonUpload:n}},exports.csh=P,exports.css=O,exports.csv=q,exports.darkerColor=function(e,t){void 0===t&&(t=25);var r="",a=(100-t)/100,n=0,o=0,i=0;if(It(Tt(e)))n=16*Bt(e.charAt(1))+Bt(e.charAt(2)),o=16*Bt(e.charAt(3))+Bt(e.charAt(4)),i=16*Bt(e.charAt(5))+Bt(e.charAt(6)),r="rgb(".concat(n*a,", ").concat(o*a,",").concat(i*a,")");else if(e.includes("rgba")){var s=e.replace("rgba(","").split(",");r="rgb(".concat(parseInt(s[0],10)*a,", ").concat(parseInt(s[1],10)*a,",").concat(parseInt(s[2],10)*a,")")}else if(e.includes("rgb")){s=e.replace("rgb(","").split(",");r="rgb(".concat(parseInt(s[0],10)*a,", ").concat(parseInt(s[1],10)*a,",").concat(parseInt(s[2],10)*a,")")}return r},exports.docx=H,exports.drawio=V,exports.eot=Z,exports.epub=G,exports.extFileMock=function(e){return{id:e||mt.getNextId(),name:"fileName.ext",size:29360128,type:"files-ui/mock",file:ft("fileName.ext",29360128,"files-ui/mock"),errors:Ft,uploadMessage:"uploaded",uploadStatus:"preparing",valid:!1,progress:28,xhr:new XMLHttpRequest,extraData:{extraData1:"files-ui is the best",extraData2:{id:1,name:"files-ui.mock"},deleted:!0},downloadUrl:"https://www.files-ui.com/mock/file-download"}},exports.extFileReconcilation=function(e,t){var r=pt.getExtFileInstanceList(e);if(r){var a=lt([],t,!0);if(a=a.filter((function(e){return-1===(null==r?void 0:r.findIndex((function(t){return t.id===e.id})))})),r.length!==t.length||0===t.length)return;for(var n=0;n<r.length;n++)void 0===t[n].uploadStatus&&"preparing"===r[n].uploadStatus&&(r[n].uploadStatus=void 0)}return[]},exports.extensionSelector=at,exports.fakeFuiUpload=function(e,t){void 0===t&&(t=S("EN-en"));var r=e.toExtFile();return new Promise((function(e,a){setTimeout((function(){if(Math.floor(10*Math.random())%2==0){var a=!0,n=t.fakeuploadsuccess,o={url:""};e(st(st({},r),{serverResponse:{success:a,message:n,payload:o},uploadStatus:"success",uploadMessage:n}))}else{a=!1,n=t.fakeUploadError,o={};e(st(st({},r),{serverResponse:{success:a,message:n,payload:o},uploadStatus:"error",uploadMessage:n}))}}),1700)}))},exports.fileListToExtFileArray=function(e){for(var t=[],r=0,a=void 0;a=e[r];r++)t.push({id:mt.getNextId(),file:a,name:a.name,size:a.size,type:a.type});return t},exports.fileListToExtFileInstanceArray=function(e){for(var t=[],r=0,a=void 0;a=e[r];r++)t.push(new it({id:mt.getNextId(),file:a,name:a.name,size:a.size,type:a.type}));return t},exports.fileListvalidator=function(e,t,r,a,n,o){for(var i=[],s=t,c=D(o),u=0,l=void 0;l=e[u];u++){var p=vt(l,a,r,c);if(p.valid){var d=s>0;if(p.valid=d,!d){var f=c.maxFileCount;p.errors=p.errors?lt(lt([],p.errors,!0),[f(n||1/0)],!1):[f(n||1/0)]}s--}i.push(p)}return i},exports.fileSizeFormater=e,exports.fontSelector=Ye,exports.freearc=X,exports.getExt=Je,exports.getImageOrientation=function(e){return new Promise((function(t,r){if(e&&0!==e.length)try{var a=new Image;a.src=e,a.onerror=function(e){r("landscape")},a.onload=function(){var e=a.width,r=a.height;t(e>r?"landscape":"portrait")}}catch(e){"development"===process.env.NODE_ENV&&console.error("An error ocurred when trying to get the image orientation"),r("landscape")}else r("landscape")}))},exports.getLocalFileItemData=function(e,t,r,a){var n="",o=void 0,i=void 0;return e&&"string"==typeof e.name?(n=e.name,o=e.type,i=e.size):t&&"string"==typeof t&&(n=t,o=r,i=a),[n,o,i]},exports.getRandomInt=gt,exports.getURLFileIco=function(e,t){var r="fallBack";if(!e)return r=Ke,(null==t?void 0:t.fallBack)?{url:null==t?void 0:t.fallBack,mimeResume:r}:{url:ot[r],mimeResume:r};r=rt(e.type);var a=Je(e.name);"text"===r&&(r=nt(a)),r===Ke&&(r=at(a));var n=null==t?void 0:t[r];return void 0!==n?{url:n,mimeResume:r}:{url:ot[r],mimeResume:r}},exports.getURLFileIcoFromNameAndType=function(e,t,r){var a="octet";if(!e)return a=Ke,(null==r?void 0:r.fallBack)?{url:null==r?void 0:r.fallBack,mimeResume:a}:{url:ot[a],mimeResume:a};a=rt(t);var n=Je(e);"text"===a&&(a=nt(n)),a===Ke&&(a=at(n));var o=null==r?void 0:r[a];return void 0!==o?{url:o,mimeResume:a}:{url:ot[a],mimeResume:a}},exports.gif=J,exports.gzip=K,exports.hexColorToRGB=jt,exports.hexTodec=Bt,exports.html=Q,exports.icalendar=W,exports.imageSelector=$e,exports.instantPreparingToUploadOne=function(e){return"preparing"===e.uploadStatus?(e.uploadStatus="uploading",st(st({},e),{uploadStatus:"uploading"})):e},exports.isHexColor=It,exports.isUploadAbleExtFile=function(e,t){return(!t||t&&e.valid)&&"success"!==e.uploadStatus},exports.isValidateActive=function(e,t,r,a){return null!=e||null!=t||null!=r||null!=a},exports.jar=Y,exports.java=$,exports.javascript=ee,exports.jpeg=te,exports.json=re,exports.jsonld=ae,exports.makeErrorUploadResponse=Rt,exports.makeServerResponse=function(e,t,r){return{success:e,message:t,payload:r}},exports.makeSuccessUploadResponse=Dt,exports.makeSyntheticExtFile=function(e,t,r,a){void 0===t&&(t=Math.ceil(28*Math.random())%2==0);var n=[],o=r||function(){switch(gt(0,4)){case 0:return"error";case 1:return"uploading";case 2:return"success";default:return}}(),i=a||"";if(t){if(!a)switch(o){case"error":i="Upload failed. There was an error";break;case"success":i="File was successfully upload";break;default:a=void 0}n=void 0}else{var s=gt(0,3);n.push(Ft[s]),o=void 0,i=void 0}return{id:mt.getNextId(),valid:t,file:e,uploadStatus:o,uploadMessage:i,errors:n}},exports.midi=ne,exports.mimeSelector=rt,exports.mp3=oe,exports.mp4=ie,exports.mpeg=se,exports.mpkg=ce,exports.octet=ue,exports.odp=le,exports.ods=pe,exports.odt=de,exports.oga=fe,exports.ogv=me,exports.ogx=ge,exports.opus=he,exports.otf=xe,exports.pdf=be,exports.php=ve,exports.png=Fe,exports.pptx=we,exports.prepToUploadOne=function(e){return new Promise((function(t,r){setTimeout((function(){e.uploadStatus="uploading",t(st(st({},e),{uploadStatus:"uploading"}))}),1500)}))},exports.preparingToUploadOne=function(e){return new Promise((function(t,r){setTimeout((function(){"preparing"===e.uploadStatus?(e.uploadStatus="uploading",t(st(st({},e),{uploadStatus:"uploading"}))):t(e)}),1500)}))},exports.psd=_e,exports.python=Ee,exports.rar=Ae,exports.react=ze,exports.readAsArrayBuffer=function(e,t,r){return new Promise((function(a,n){try{var o=new FileReader;o.onload=function(){a(o.result)},o.onprogress=function(){null==t||t()},o.onerror=function(){null==r||r()},o.readAsArrayBuffer(e)}catch(e){n(void 0)}}))},exports.readAsBinaryString=function(e,t,r){return new Promise((function(a,n){try{var o=new FileReader;o.onload=function(){a(o.result)},o.onprogress=function(){null==t||t()},o.onerror=function(){null==r||r()},o.readAsBinaryString(e)}catch(e){n(void 0)}}))},exports.readAsDataURL=function(e,t,r){return new Promise((function(a,n){try{var o=new FileReader;o.onprogress=function(){null==t||t()},o.onerror=function(){null==r||r()},o.onload=function(){a(o.result)},o.readAsDataURL(e)}catch(e){n(void 0)}}))},exports.readAsText=function(e,t,r,a){return new Promise((function(n,o){try{var i=new FileReader;i.onload=function(){n(i.result)},i.onprogress=function(){null==r||r()},i.onerror=function(){null==a||a()},i.readAsText(e,t||"base64")}catch(e){o(void 0)}}))},exports.resizeImage=function(e,t,r){return void 0===t&&(t=135),void 0===r&&(r=120),new Promise((function(a,n){try{var o=new Image;o.src=e,o.onload=function(){var i=document.createElement("canvas"),s=t,c=r,u=o.width,l=o.height;t>u&&r>l?a(e):u>l?u>s&&(l*=s/u,u=s):l>c&&(u*=c/l,l=c),i.width=u,i.height=l;var p=i.getContext("2d");p?(p.drawImage(o,0,0,u,l),a(i.toDataURL())):("development"===process.env.NODE_ENV&&console.error("An error ocurred when trying to make a thumnail"),n(void 0))}}catch(e){"development"===process.env.NODE_ENV&&console.error("An error ocurred when trying to make a thumnail"),n(void 0)}}))},exports.rtf=Se,exports.sanitizeArrExtFile=function(e){return e.filter((function(e){var t;return!(null===(t=e.extraData)||void 0===t?void 0:t.deleted)})).map((function(e){return"aborted"!==e.uploadStatus||e.uploadMessage||(e.uploadMessage="Upload aborted by user"),it.toExtFile(e)}))},exports.sass=ke,exports.separateAccept=ht,exports.setNextUploadStatus=function(e,t){var r=e.uploadStatus,a=t.uploadStatus;"preparing"===r&&["aborted",void 0].includes(a)?(e.uploadStatus=void 0,e.uploadMessage=t.uploadMessage):"uploading"===r&&["aborted",void 0].includes(a)&&(e.uploadStatus="aborted",e.uploadMessage=t.uploadMessage)},exports.setPrepToUploading=function(e){return new Promise((function(t,r){setTimeout((function(){t(st(st({},e),{uploadStatus:"uploading"}))}),1500)}))},exports.sevenzip=R,exports.sh=De,exports.shrinkWord=function(e,t){void 0===e&&(e=""),void 0===t&&(t=!1);var r=e;return t?e.length>=20&&(r=e.slice(0,10)+"..."+e.slice(-7)):e.length>=30&&(r=e.slice(0,13)+"..."+e.slice(-8)),r},exports.sleepPreparing=function(e){return void 0===e&&(e=5e3),new Promise((function(t,r){setTimeout((function(){t()}),e)}))},exports.sleepTransition=function(e){return void 0===e&&(e=1500),new Promise((function(t,r){setTimeout((function(){t(!0)}),e)}))},exports.swf=Re,exports.tar=ye,exports.text=Ce,exports.textSelector=We,exports.tiff=Me,exports.toUploadableExtFileList=function(e){return e?e.map((function(e){return st(st({},e),{xhr:new XMLHttpRequest})})):[]},exports.ttf=je,exports.typescript=Ie,exports.unableToUploadResult=function(e){return{id:e.id,uploadedFile:st(st({},e),{uploadMessage:"Unable to upload. XHR was not provided",uploadStatus:"error"}),serverResponse:{success:!1,message:"Error on upload: Unable to upload. XHR was not provided ",payload:{}}}},exports.unexpectedErrorUploadResult=function(e){return st(st({},e),{uploadMessage:"Unexpected error",uploadStatus:"error",serverResponse:{success:!1,message:"Error on upload: unexpected error ",payload:{}}})},exports.uploadExtFile=function(e,t,r,a,n){return ct(void 0,void 0,void 0,(function(){return ut(this,(function(o){return[2,new Promise((function(o,i){return ct(void 0,void 0,void 0,(function(){var i,s,c,u,l,p;return ut(this,(function(d){switch(d.label){case 0:return d.trys.push([0,2,,3]),(i=e.xhr)?(s=r||"POST",c=e.file,(u=new FormData).append(n||"file",c),l=st({otherValue:"other valueee haaaa",param2:{tecnica:"KIKOHUUUU",friend:"Chaos",age:25}},e.extraUploadData),wt(u,l),p=void 0,[4,Ct(i,s,t,u,a||{})]):(o(St(e)),[2]);case 1:return(p=d.sent()).success?o(Dt(e,p)):o(Rt(e,p)),[3,3];case 2:return d.sent(),o(Rt(e,zt)),[3,3];case 3:return[2]}}))}))}))]}))}))},exports.uploadFile=function(e,t,r,a,n){var o=this;return new Promise((function(i,s){return ct(o,void 0,void 0,(function(){var o,s;return ut(this,(function(c){switch(c.label){case 0:(o=new FormData).append(a||"file",e),c.label=1;case 1:return c.trys.push([1,3,,4]),[4,Ct(new XMLHttpRequest,r,t,o,n)];case 2:return s=c.sent(),i(s),[3,4];case 3:return c.sent(),i(zt),[3,4];case 4:return[2]}}))}))}))},exports.uploadFormData=Ct,exports.uploadOne=function(e){return new Promise((function(t,r){setTimeout((function(){t(st(st({},e),{uploadStatus:"success"}))}),2e3)}))},exports.uploadOneExtFile=function(e){return new Promise((function(t,r){setTimeout((function(){e.uploadStatus="success",t(st(st({},e),{uploadStatus:"success"}))}),2e3)}))},exports.validateAccept=xt,exports.validateExtFile=bt,exports.validateExtFileList=function(e,t,r,a,n,o){var i=[];if(!t)return i;for(var s=t,c=D(o),u=c.maxFileCount,l=0;l<e.length;l++){var p=e[l];if((p=bt(p,a,r,c)).valid){var d=s>0;p.valid=d,d||(p.errors=p.errors?lt(lt([],p.errors,!0),[u(n||1/0)],!1):[u(n||1/0)]),s--}i.push(p)}return i},exports.validateFile=vt,exports.videoSelector=et,exports.vsd=Te,exports.vue=Le,exports.wav=Ue,exports.weba=Ne,exports.webm=Be,exports.webp=Pe,exports.wma=Oe,exports.wmv=qe,exports.woff=He,exports.xlsx=Ve,exports.xml=Ze,exports.xul=Ge,exports.zip=Xe; //# sourceMappingURL=index.js.map diff --git a/src/files-ui/core/index.js.map b/src/files-ui/core/index.js.map index 144181b99e7a26e0f9a7d1618d93b1a3354e9586..bfd639ec327266600a8f7301ac3a51d3791fe975 100644 --- a/src/files-ui/core/index.js.map +++ b/src/files-ui/core/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sources":["../src/utils/fileSizeFormatter.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","../src/mime/icons.ts","../src/utils/getExt.ts","../src/mime/mime.ts","../src/types/ExtFile.ts","../src/types/ExtFileManager.ts","../src/synthetic-file/SyntheticFile.ts","../src/utils/IdGenerator.ts","../src/utils/randomInt.ts","../src/utils/input.utils.ts","../src/validation/separateAccept.ts","../src/validation/validateAccept.ts","../src/validation/fileValidator.ts","../src/validation/fakeerros.ts","../src/upload/addExtraData.upload.ts","../src/upload/addheaders.upload.ts","../src/upload/errors.upload.ts","../src/upload/response.upload.ts","../src/upload/upload.ts","../src/color/namedColors.ts","../src/color/colors.ts","../src/utils/addClassName.ts","../src/upload/utils.upload.ts","../src/types/UploadConfig.ts","../src/mocks/extFileMock.ts","../src/file-manager/reconcilation.ts","../src/utils/fakeupload.utils.ts","../src/utils/fileListParser.ts","../src/reader/imageOrientation.ts","../src/utils/getLocalFileItemData.ts","../src/utils/isUploadAbleExtFile.ts","../src/utils/dropzone.utils.ts","../src/synthetic-file/syntheticfileGenerator.ts","../src/validation/randomStatus.ts","../src/reader/readers.ts","../src/reader/resizeImage.ts","../src/utils/shrinkWord.ts"],"sourcesContent":["/**\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\n export const fileSizeFormater = (fileSize?: number | false): string| undefined => {\r\n let result = \"\";\r\n if (!fileSize) {\r\n return undefined;\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}","import { fileSizeFormater } from \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"preparazione\",\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 aborted:\"Interrotto\"\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 \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"préparer\",\r\n uploading: \"En cours\",\r\n success: \"Succès\",\r\n valid: \"Valide\",\r\n denied: \"Refusé\",\r\n error: \"Erreur\",\r\n aborted:\"Interrompu\"\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}","import { fileSizeFormater } from \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"Preparing\",\r\n uploading: \"Uploading\",\r\n success: \"Success\",\r\n valid: \"Valid\",\r\n denied: \"Not valid\",\r\n error: \"Error\",\r\n aborted:\"Aborted\"\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 \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"Preparando\",\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 aborted: \"Anulado\"\r\n },\r\n}\r\n/**\r\n * Spanish translation for Validation Errors\r\n */\r\nexport 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 \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"подготовка\",\r\n uploading: \"Загрузка\",\r\n success: \"успех\",\r\n valid: \"годный\",\r\n denied: \"выкинутый\",\r\n error: \"ошибка\",\r\n aborted:\"прерванный\"\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 \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"Preparando\",\r\n uploading: \"Enviando\",\r\n success: \"Êxito\",\r\n valid: \"válido\",\r\n denied: \"Negado\",\r\n error: \"Erro\",\r\n aborted:\"Abortado\"\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}","import { LocalLabels } from \"../../types\";\r\nimport { fileSizeFormater } from \"../../utils/fileSizeFormatter\";\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 * Chinnese 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 preparing:\"预加载\",\r\n uploading: \"上传\",\r\n success: \"成功\",\r\n valid: \"接受的文件\",\r\n denied: \"被拒绝的文件\",\r\n error: \"错误\",\r\n aborted:\"中止\"\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}","import { fileSizeFormater } from \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\r\n\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 * Chinese 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 preparing: \"預加載\",\r\n uploading: \"上傳\",\r\n success: \"成功\",\r\n valid: \"有效文件\",\r\n denied: \"無效文件\",\r\n error: \"錯誤\",\r\n aborted: \"中止\"\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 \"../types\";\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 { 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\nimport { ComponentLocalizer, Localization, LocalLabels } from \"../types\";\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 \"./../types\";\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 if (!local || ![\"ES-es\", \"EN-en\", \"FR-fr\", \"IT-it\", \"PT-pt\", \"RU-ru\", \"ZH-cn\", \"ZH-hk\"].includes(local)) {\r\n return ValidateErrorLocalizer[\"EN-en\"];\r\n }\r\n return ValidateErrorLocalizer[local];\r\n}","export 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\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\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\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\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 * Looks for the first file extension\r\n * @param fileName file name\r\n * @returns the file name extension\r\n */\r\n export 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};","import {\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 \"./icons\";\r\nimport { getExt } from \"../utils/getExt\";\r\nimport { IconsMap } from \"../types\";\r\n\r\nconst DEF_GEN_MIME: keyof IconsMap = \"octet\";\r\n/**\r\n * \r\n * @param tailMime \r\n * @returns \r\n */\r\nexport const audioSelector = (tailMime: string): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\r\n let genericMime: keyof IconsMap = \"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 = \"typescript\";\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): keyof IconsMap => {\r\n let genericMime: keyof IconsMap = \"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 * If not found, returns octet-stream url\r\n * @param props mime and extension from file to search\r\n * @returns the result file ico\r\n */\r\nexport const getURLFileIco = (\r\n file: File | undefined,\r\n customIcons: IconsMap | undefined\r\n): ResultFileIco => {\r\n\r\n let result: keyof IconsMap = \"fallBack\";\r\n //if not file, return octet\r\n if (!file) {\r\n result = DEF_GEN_MIME;\r\n if (customIcons?.fallBack)\r\n return { url: customIcons?.fallBack, mimeResume: result };\r\n\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 const customUrl = customIcons?.[result];\r\n if (customUrl !== undefined)\r\n return { url: customUrl, mimeResume: result };\r\n\r\n\r\n return { url: mimeUrlList[result], mimeResume: result };\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 getURLFileIcoFromNameAndType = (\r\n name: string | undefined,\r\n type: string | undefined,\r\n customIcons: IconsMap | undefined\r\n): ResultFileIco => {\r\n\r\n let result: keyof IconsMap = \"octet\";\r\n //if not nam and type, return octet\r\n if (!name) {\r\n result = DEF_GEN_MIME;\r\n if (customIcons?.fallBack)\r\n return { url: customIcons?.fallBack, mimeResume: result };\r\n return { url: mimeUrlList[result], mimeResume: result };\r\n } else {\r\n result = mimeSelector(type);\r\n }\r\n //If plain text\r\n const extention: string = getExt(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 const customUrl = customIcons?.[result];\r\n if (customUrl !== undefined)\r\n return { url: customUrl, mimeResume: result };\r\n\r\n return { url: mimeUrlList[result], mimeResume: result };\r\n}\r\ninterface ResultFileIco {\r\n url: string;\r\n mimeResume: keyof IconsMap;\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 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 fallBack: octet,\r\n};","\r\nimport { UPLOADSTATUS, ServerResponse } from \"../types\";\r\n\r\n/**\r\n * ExtFile === \"Extended File\".\r\n * This object \"extends\" the File Object\r\n */\r\nexport declare type ExtFile = {\r\n /** \r\n * An identifier for the extFile\r\n */\r\n id?: number | string | undefined;\r\n /**\r\n * The file object. Used mostly when user selects or drops files in the client sid.\r\n */\r\n file?: File;\r\n /**\r\n * The name of the file. Used mostly for displaying file data from server.\r\n */\r\n name?: string;\r\n /**\r\n * The type of the file. Used mostly for displaying file data from server.\r\n */\r\n type?: string;\r\n /**\r\n * The size of the file. Used mostly for displaying file data from server.\r\n */\r\n size?: number;\r\n /**\r\n * a flag that determines whether the file is valid, not valid or it is not validated.\r\n */\r\n valid?: boolean;\r\n /**\r\n * The list of errors when the file was validated\r\n */\r\n errors?: string[];\r\n /**\r\n * The current upload status. (e.g. \"uploading\")\r\n */\r\n uploadStatus?: UPLOADSTATUS | undefined;\r\n /**\r\n * A message that shows the result of the upload process\r\n */\r\n uploadMessage?: string;\r\n /**\r\n * Link, URI or string representation of an image\r\n */\r\n imageUrl?: string;\r\n /**\r\n * The XMLHttpRequest object for performing uploads to a server\r\n */\r\n xhr?: XMLHttpRequest;\r\n /**\r\n * The current percentage of upload progress.\r\n * This value will have a higher priority over the upload progress value calculated inside the component.\r\n * @default undefined\r\n */\r\n progress?: number;\r\n /**\r\n * The additional data that will be sent to the server\r\n * when files are uploaded individually\r\n */\r\n extraUploadData?: Record<string, any>;\r\n /**\r\n * Any kind of extra data that could be needed.\r\n */\r\n extraData?: Object;\r\n /**\r\n * The upload response from server\r\n */\r\n serverResponse?: ServerResponse;\r\n /**\r\n * The url to be used to perform a GET request in order to download the\r\n file. If defined, the download icon will be shown.\r\n */\r\n downloadUrl?: string;\r\n /**\r\n * Link, URI, FIle object or string representation of a video\r\n */\r\n videoUrl?: string;\r\n}\r\n\r\n/**\r\n * A class definition for ExtFile.\r\n * This class has the purpose to allow the creation of instances\r\n * of an ExtFile for performing complex operations that cannot be\r\n * accomplished just by using the ExtFile type.\r\n * For instance, it can help in changing the value of some attributes\r\n * across different scopes thanks to memory reference.\r\n */\r\nexport class ExtFileInstance {\r\n /**\r\n * An identifier for the extFile\r\n */\r\n public id?: number | string;\r\n /**\r\n * The file object. Used mostly when user selects or drops files in the client sid.\r\n */\r\n public file?: File;\r\n /**\r\n * The name of the file. Used mostly for displaying file data from server.\r\n */\r\n public name?: string;\r\n /**\r\n * The type of the file. Used mostly for displaying file data from server.\r\n */\r\n public type?: string;\r\n /**\r\n * The size of the file. Used mostly for displaying file data from server.\r\n */\r\n public size?: number;\r\n\r\n public imageUrl?: string;\r\n /**\r\n * A flag that determines whether the file is valid, not valid or it is not validated.\r\n */\r\n public valid?: boolean;\r\n /**\r\n * The list of errors when the file was validated\r\n */\r\n public errors?: string[];\r\n /**\r\n * A message that shows the result of the upload process\r\n */\r\n public uploadMessage?: string;\r\n /**\r\n * The current upload status. (e.g. \"uploading\")\r\n */\r\n public uploadStatus?: UPLOADSTATUS | undefined;\r\n /**\r\n * The current upload progress\r\n */\r\n public progress?: number;\r\n /**\r\n * The XMLHttpRequest object for performing uploads to a server\r\n */\r\n public xhr?: XMLHttpRequest;\r\n /**\r\n * The additional data that will be sent to the server\r\n */\r\n public extraData?: Record<string, any>;\r\n /**\r\n * The additional data that will be sent to the server\r\n * when filesare uploaded individually\r\n */\r\n public extraUploadData?: Record<string, any>;\r\n /**\r\n * The upload response from server\r\n */\r\n public serverResponse?: ServerResponse;\r\n /**\r\n * Url to perform a GET request in order to download the file.\r\n * This action is triggered when download button is clicked or pressed.\r\n * In case onDownload prop is given\r\n */\r\n public downloadUrl?: string;\r\n /**\r\n * Link, URI, FIle object or string representation of a video\r\n */\r\n public videoUrl?: string;\r\n\r\n constructor(extFile: ExtFile) {\r\n const {\r\n id,\r\n file,\r\n name,\r\n size,\r\n type,\r\n imageUrl,\r\n valid,\r\n errors,\r\n uploadMessage,\r\n uploadStatus,\r\n progress,\r\n xhr,\r\n extraData,\r\n extraUploadData,\r\n serverResponse,\r\n downloadUrl, videoUrl\r\n } = extFile;\r\n\r\n this.id = id;\r\n this.file = file;\r\n this.name = name;\r\n this.size = size;\r\n this.type = type;\r\n this.imageUrl = imageUrl;\r\n\r\n this.valid = valid;\r\n this.errors = errors;\r\n this.uploadStatus = uploadStatus;\r\n this.uploadMessage = uploadMessage;\r\n this.progress = progress;\r\n this.xhr = xhr;\r\n\r\n this.extraData = extraData;\r\n this.extraUploadData = extraUploadData;\r\n this.serverResponse = serverResponse;\r\n\r\n this.downloadUrl = downloadUrl;\r\n this.videoUrl = videoUrl;\r\n }\r\n /**\r\n * method under construction\r\n */\r\n /* private static kamuiFile() {\r\n \r\n }\r\n */\r\n /**\r\n * Copies all non undefined attributes from ExtFileInstance to a new ExtFile object\r\n * @param extFileInstance the instance of ExtFile\r\n * @returns an ExtFile object\r\n */\r\n static toExtFile(extFileInstance: ExtFileInstance): ExtFile {\r\n //console.log(\"before toExtFile()\", extFileInstance);\r\n\r\n let extFileClone: ExtFile = {}; // the new empty object\r\n const extFileInstanceKeys = Object.keys(extFileInstance) as [keyof ExtFile];\r\n const extFileInstanceValues = Object.values(extFileInstance) as Array<ExtFile[keyof ExtFile]>;\r\n // let's copy all user properties into it\r\n for (let i = 0; i < extFileInstanceValues.length; i++) {\r\n const currentValue: ExtFile[keyof ExtFile] = extFileInstanceValues[i];\r\n\r\n\r\n const currKey = extFileInstanceKeys[i];\r\n if (currentValue !== undefined) {\r\n\r\n extFileClone[currKey] = currentValue as ExtFile[keyof ExtFile] as never;\r\n }\r\n }\r\n //console.log(\"after toExtFile()\", extFileClone);\r\n //console.log(\"current extFileClone keys\",Object.keys( extFileClone).length);\r\n return extFileClone;\r\n }\r\n /**\r\n * Copies all non undefined attributes from ExtFileInstance to a new ExtFile object.\r\n * @returns an ExtFile object\r\n */\r\n toExtFile(): ExtFile {\r\n return ExtFileInstance.toExtFile(this);\r\n }\r\n\r\n /* static mock = (id?: number): ExtFileInstance => {\r\n return new ExtFileInstance(\r\n extFileMock(id)\r\n );\r\n } */\r\n}\r\n\r\n\r\n","import { ExtFileInstance, ExtFile } from \"./ExtFile\";\r\n\r\nexport class ExtFileManager {\r\n private static nextId: number = 0;\r\n static fileLists: Record<number | string, ExtFileInstance[] | undefined> = {};\r\n /**\r\n * Increases the id counter and returns the next id available.\r\n * @returns the next integer id available\r\n */\r\n public static getNextId(): number {\r\n ExtFileManager.nextId++;\r\n return ExtFileManager.nextId;\r\n }\r\n /**\r\n * Updates a dui file list given an id\r\n * @param id id of the fileList\r\n * @param extFiles list of DuiFiles forinitializing the array\r\n * @returns the id of the fileList\r\n */\r\n public static setFileList(\r\n id: number | string | undefined,\r\n extFilesInstances: ExtFileInstance[]\r\n ): number | string {\r\n if (!id) {\r\n return 0;\r\n } else {\r\n ExtFileManager.fileLists[id] = [...extFilesInstances];\r\n\r\n return id;\r\n }\r\n\r\n }\r\n /**\r\n * Generates a new ID\r\n * @returns the next Id asociated with a DuiFIle list\r\n */\r\n public static createFileListMap(): number {\r\n const nextId: number = ExtFileManager.getNextId();\r\n ExtFileManager.fileLists[nextId] = [];\r\n\r\n return nextId;\r\n }\r\n\r\n /**\r\n * Deletes a list map\r\n * @returns the next Id asociated with a DuiFIle list\r\n */\r\n public static removeFileListMap(id?: number | string): number | string {\r\n if (!id) {\r\n return 0;\r\n } else {\r\n try {\r\n ExtFileManager.fileLists[id] = undefined;\r\n return id;\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"development\")\r\n console.error(\"Error on remove\", error);\r\n return 0;\r\n }\r\n }\r\n }\r\n /**\r\n * \r\n * @param id the id of the dropzone\r\n * @returns \r\n */\r\n public static getExtFileInstanceList(\r\n id?: number | string\r\n ): ExtFileInstance[] | undefined {\r\n try {\r\n if (!id) {\r\n return undefined;\r\n }\r\n return ExtFileManager.fileLists[id];\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"development\")\r\n console.error(\"Error on getExtFileInstanceList\", error);\r\n return undefined;\r\n }\r\n }\r\n /**\r\n * Updates(replaces) the extFile list on preparing stage and returns the new array.\r\n * Removes the non valid files if cleanOnUpload is true and validateFiles is also true\r\n * Then sets on preparing stage all files according to the following creiteria:\r\n * If theuploadStatus is diferent than \"sucess\" AND\r\n * then, update the files on preparing stage. Otherwise keep the extFile props.\r\n * Finally, updates the ExtFileInstance list on ExtFileManager.\r\n * @param dropzoneId the id to access the right list\r\n * @param localFiles the list of extFiles\r\n * @param validateFiles flag that indicates that validation is active or o¿not\r\n * @param cleanOnUpload flag to determine whther to clena the list oof non valid files or not\r\n * @returns a list of ExtFileInstance\r\n */\r\n public static setFileListMapPreparing(\r\n dropzoneId: number | string,\r\n localFiles: ExtFile[],\r\n validateFiles: boolean,\r\n cleanOnUpload: boolean\r\n ): ExtFileInstance[] | undefined {\r\n //console.log(\"setFileListMapPreparing before if\", dropzoneId, localFiles, cleanOnUpload);\r\n\r\n if (!(typeof dropzoneId === \"number\" || typeof dropzoneId === \"string\")) return undefined;\r\n\r\n //console.log(\"setFileListMapPreparing before try\", localFiles, cleanOnUpload);\r\n try {\r\n\r\n let resultExtList: ExtFileInstance[] = [];\r\n\r\n //initializes the extFileLInstance list\r\n let temLocalFiles: ExtFile[] = [...localFiles];\r\n\r\n //remove non valids if cleanOnUpload is true and validateFiles is also true\r\n if (cleanOnUpload && validateFiles) {\r\n // clean on Upload is true, so non valid files must be removed\r\n temLocalFiles = temLocalFiles.filter(extFile => extFile.valid)\r\n //console.log(\"temLocalFiles filter\", temLocalFiles);\r\n }\r\n\r\n //console.log(\"setFileListMapPreparing after remove non valids\", temLocalFiles);\r\n\r\n if (validateFiles) {\r\n // validation flag was set to true, so only valid=true files will be set to \"preparing\"\r\n\r\n //so, only valid files was kept in the temLocalfiles array\r\n //now set the preparing state only for files with uploadStatus !== \"success\"\r\n temLocalFiles =\r\n temLocalFiles\r\n .map(extFile => {\r\n if (extFile.uploadStatus !== \"success\" && extFile.valid) {\r\n return { ...extFile, uploadStatus: \"preparing\" }\r\n } else {\r\n return { ...extFile }\r\n }\r\n });\r\n } else {\r\n // all files will be set to \"preparing\" whether the valid value\r\n // except those files with uploadStatus ===\"success\"\r\n temLocalFiles =\r\n temLocalFiles\r\n .map(extFile => {\r\n if (extFile.uploadStatus !== \"success\") {\r\n return { ...extFile, uploadStatus: \"preparing\" }\r\n } else {\r\n return { ...extFile }\r\n }\r\n });\r\n }\r\n\r\n //console.log(\"setFileListMapPreparing result\", temLocalFiles);\r\n\r\n //converto to Object instances\r\n resultExtList = temLocalFiles.map(F => new ExtFileInstance(F));\r\n //console.log(\"setFileListMapPreparing RESULT resultExtList\", resultExtList);\r\n\r\n const resultSet = ExtFileManager.setFileList(dropzoneId, resultExtList);\r\n //console.log(\"setFileListMapPreparing RESULT resultSet\", resultSet);\r\n\r\n return resultExtList;\r\n // return ExtFileManager.fileLists[dropzoneId];\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"development\")\r\n console.error(\"setFileListMapPreparing Error on get List\", error);\r\n return undefined;\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n /**\r\n * Updates(replaces) the extFile list on preparing stage and returns the new array.\r\n * Removes the non valid files if cleanOnUpload is true and validateFiles is also true\r\n * Then sets on preparing stage all files according to the following creiteria:\r\n * If theuploadStatus is diferent than \"sucess\" AND\r\n * then, update the files on preparing stage. Otherwise keep the extFile props.\r\n * Finally, updates the ExtFileInstance list on ExtFileManager.\r\n * @param dropzoneId the id to access the right list\r\n * @param localFiles the list of extFiles\r\n * @param validateFiles flag that indicates that validation is active or o¿not\r\n * @param cleanOnUpload flag to determine whther to clena the list oof non valid files or not\r\n * @returns a list of ExtFileInstance\r\n */\r\n public static setFileListMapPreparing2(\r\n dropzoneId: number | string,\r\n localFiles: ExtFile[],\r\n validateFiles: boolean,\r\n cleanOnUpload: boolean\r\n ): ExtFileInstance[] | undefined {\r\n\r\n ExtFileManager.setFileList(dropzoneId, localFiles.map(F => new ExtFileInstance({ ...F, uploadStatus: \"preparing\" })));\r\n\r\n return ExtFileManager.getExtFileInstanceList(dropzoneId);\r\n }\r\n\r\n\r\n\r\n /**\r\n * \r\n * @param dropzoneId \r\n * @param index \r\n * @param incommingDuiFile \r\n * @returns \r\n */\r\n /* public static updateFileListMapPreparingById(\r\n dropzoneId: number,\r\n index: number,\r\n incommingDuiFile: ExtFileInstance\r\n ): ExtFileInstance[] | undefined {\r\n if (!(typeof dropzoneId === \"number\") || !(typeof index === \"number\") || index > 0) return undefined;\r\n const extFileList: ExtFileInstance[] | undefined = ExtFileManager.fileLists[dropzoneId];\r\n\r\n if (!(extFileList && extFileList.length > 0)) return undefined;\r\n extFileList[index]=\r\n try {\r\n ExtFileManager.setFileList(dropzoneId, [\r\n ...localFiles.map(\r\n (x) =>\r\n new ExtFileInstance({ ...x, uploadStatus: \"preparing\" })\r\n ),\r\n ]);\r\n return ExtFileManager.fileLists[dropzoneId];\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"development\")\r\n console.error(\"Error on get List\", error);\r\n return undefined;\r\n }\r\n\r\n } */\r\n}","\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}\r\n///////////////////// SHORTCUTS\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/**\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 * An id generator for FileItems\r\n */\r\n export abstract class FileIdGenerator {\r\n static nextId = 0;\r\n /**\r\n * Increases the id counter 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 * Random integer between min (included) and max (excluded)\r\n * @param min the min number\r\n * @param max the max number\r\n * @returns a random number between min (included) and max (excluded)\r\n */\r\nexport function getRandomInt(min: number = 0, max: number = 0): number {\r\n return Math.floor(Math.random() * (max - min)) + min;\r\n}\r\n","/**\r\n * Cleans the input.value attribute\r\n * @param inputElement \r\n */\r\nexport const cleanInput = (inputElement?: HTMLInputElement | null) => {\r\n if (!inputElement) return;\r\n inputElement.value = \"\";\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}","import { getExt } from \"../utils/getExt\";\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\n export 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}","import { ValidateErrorLocalizerSelector } from \"../localization\";\r\nimport { ExtFile, FunctionLabel, Localization, LocalLabels } from \"../types\";\r\nimport { ValidateFileResponse, FileValidatorProps } from \"../types/validation\";\r\nimport { FileIdGenerator } from \"../utils/IdGenerator\";\r\nimport { separateAccept } from \"./separateAccept\";\r\nimport { validateAccept } from \"./validateAccept\";\r\n\r\n/**\r\n * \r\n * @param preValidatedFiles FileList \r\n * @param remainingValids The number of remaining valid files\r\n * @param localValidator \r\n * @param validator \r\n * @param maxFiles \r\n * @param localization \r\n * @returns \r\n */\r\nexport const fileListvalidator = (\r\n preValidatedFiles: FileList,\r\n remainingValids: number,\r\n localValidator: FileValidatorProps,\r\n validator: ((f: File) => ValidateFileResponse) | undefined,\r\n maxFiles?: number,\r\n localization?: Localization\r\n): ExtFile[] => {\r\n const output: ExtFile[] = [];\r\n //set a countdown when there is a limit on files\r\n let countdown: number = remainingValids;\r\n // get localized labels\r\n const ValidationErrorLocalizer: LocalLabels =\r\n ValidateErrorLocalizerSelector(localization);\r\n //Iterate the File list\r\n for (let i = 0, f: File; (f = preValidatedFiles[i]); i++) {\r\n // Validate the file list with\r\n let validatedFile: ExtFile = validateFile(f, validator, localValidator, ValidationErrorLocalizer);\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 = ValidationErrorLocalizer.maxFileCount as FunctionLabel;\r\n validatedFile.errors = validatedFile.errors\r\n ? [...validatedFile.errors, maxFileErrorMessenger(maxFiles || Infinity)]\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\r\n\r\n/**\r\n * For each ExtFile sets the valid prop of ExtFile to \"true\" or \"false\"\r\n * depending on the result of the individual validation. \r\n * It also add the list of errors.\r\n * @param extFileList \r\n * @param remainingValids \r\n * @param localValidatorProps \r\n * @param validator \r\n * @param maxFiles \r\n * @param localization \r\n * @returns a new ExtFile list with each item validated\r\n */\r\nexport const validateExtFileList = (\r\n extFileList: ExtFile[],\r\n remainingValids: number,\r\n localValidatorProps: FileValidatorProps,\r\n validator: ((f: File) => ValidateFileResponse) | undefined,\r\n maxFiles: number | undefined,\r\n localization?: Localization\r\n): ExtFile[] => {\r\n //console.log(\"remaning valids\", remainingValids);\r\n let fileListResult: ExtFile[] = [];\r\n if (!remainingValids) return fileListResult;\r\n let remaining: number = remainingValids;\r\n const ValidationErrorLocalizer: LocalLabels =\r\n ValidateErrorLocalizerSelector(localization);\r\n const maxFileErrorMessenger: FunctionLabel = ValidationErrorLocalizer.maxFileCount as FunctionLabel;\r\n for (let i = 0; i < extFileList.length; i++) {\r\n let currentExtFile: ExtFile = extFileList[i];\r\n\r\n currentExtFile = validateExtFile(currentExtFile, validator, localValidatorProps, ValidationErrorLocalizer);\r\n //console.log(\"validateExtFileList after validation\", currentExtFile);\r\n\r\n if (currentExtFile.valid) {\r\n //not valid due to file count limit\r\n const valid = remaining > 0;\r\n currentExtFile.valid = valid;\r\n //add error about amount\r\n if (!valid) {\r\n currentExtFile.errors = currentExtFile.errors\r\n ? [...currentExtFile.errors, maxFileErrorMessenger(maxFiles || Infinity)]\r\n : [maxFileErrorMessenger(maxFiles || Infinity)];\r\n }\r\n remaining--;\r\n }\r\n fileListResult.push(currentExtFile);\r\n\r\n }\r\n return fileListResult;\r\n}\r\n\r\n/**\r\n * \r\n * @param extFile \r\n * @param validator \r\n * @param validatorProps \r\n * @param localErrors \r\n * @returns \r\n */\r\nexport const validateExtFile = (\r\n extFile: ExtFile,\r\n validator: undefined | ((f: File) => ValidateFileResponse),\r\n validatorProps: FileValidatorProps,\r\n localErrors: LocalLabels\r\n): ExtFile => {\r\n let extFileResult: ExtFile = { ...extFile };\r\n let errors: string[] = [];\r\n //TO-DO: Add extra validation for individual props even if FIle object was not given\r\n if (!extFile.file) {\r\n return { ...extFileResult }\r\n }\r\n\r\n //TO-DO: add \"overrideValidation\" prop to ignore the rest of validators like accept and maxFileSize\r\n if (validator) {\r\n const resultCustomValidation: ValidateFileResponse = validator(extFileResult.file as File);\r\n const { errors: errorsResult } = resultCustomValidation;\r\n if (errorsResult)\r\n errors.push(...errorsResult)\r\n //return { ...extFileResult, ...validator(extFileResult.file as File) };\r\n }\r\n\r\n const { maxFileSize, accept } = validatorProps;\r\n //console.log(\"Validation\", maxFileSize, accept);\r\n //check file size\r\n const file: File = extFile.file;\r\n\r\n\r\n if (maxFileSize && file.size > maxFileSize) {\r\n const maxFileSizeErrorMessenger: FunctionLabel = localErrors.maxSizeError as FunctionLabel;\r\n\r\n //console.log(\"Size error\", maxFileSizeErrorMessenger(maxFileSize));\r\n\r\n errors.push(maxFileSizeErrorMessenger(maxFileSize));\r\n }\r\n //check file type\r\n if (accept && !validateAccept(separateAccept(accept), file)) {\r\n errors.push(localErrors.acceptError as string);\r\n }\r\n const isValid: boolean = errors.length === 0;\r\n extFileResult = { ...extFileResult, valid: isValid, errors: !isValid ? errors : undefined };\r\n //console.log(\"validation extFileResult\", extFileResult);\r\n return extFileResult;\r\n\r\n}\r\n\r\n\r\n\r\n/**\r\n * Function that validate whether a file is valid, or not\r\n * according to the Filevalidator properties\r\n * @param file a File object to be evaluated\r\n * @param validatorProps the validator object \r\n * @returns a FileValidated object\r\n */\r\nexport const validateFile = (\r\n file: File,\r\n validator: undefined | ((f: File) => ValidateFileResponse),\r\n validatorProps: FileValidatorProps,\r\n localErrors: LocalLabels\r\n): ExtFile => {\r\n\r\n const idGenerated = FileIdGenerator.getNextId();\r\n let errors: string[] = [];\r\n if (validator) {\r\n return { id: idGenerated, file, ...validator(file) };\r\n }\r\n\r\n const { maxFileSize, accept } = validatorProps;\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: ExtFile = {\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\n * list of dumy errors in english\r\n */\r\nexport const listOfErrors: string[] =\r\n [\r\n \"File is too big. Max file size allowed is 80mb.\",\r\n \"File's type is not allowed.\",\r\n \"Max amount of files (28) has been reached.\"\r\n ];","export default function addExtraData(\r\n formData: FormData,\r\n extraData: Record<string, string> | undefined\r\n) {\r\n //headers\r\n const extraDataKeys: string[] = Object.keys(extraData || {});\r\n //const headerValues: string[] = Object.values(headers);\r\n for (let i = 0; i < extraDataKeys.length && extraData; i++) {\r\n //console.log(\"uploadFile extraData\", extraDataKeys[i], extraData[extraDataKeys[i]]);\r\n formData.append(extraDataKeys[i], extraData[extraDataKeys[i]]);\r\n }\r\n\r\n formData.append(\"otherValue\", \"HAAAAAAAAAAAAAAa\");\r\n\r\n}","export default function addHeaders(\r\n xhr: XMLHttpRequest,\r\n headers: Record<string, string> | undefined\r\n) {\r\n //headers\r\n const headerKeys: string[] = Object.keys(headers || {});\r\n //const headerValues: string[] = Object.values(headers);\r\n for (let i = 0; i < headerKeys.length && headers; i++) {\r\n //console.log(\"uploadFile headers\", headerKeys[i], headers[headerKeys[i]]);\r\n xhr.setRequestHeader(\r\n headerKeys[i],\r\n headers[headerKeys[i]]\r\n );\r\n }\r\n\r\n\r\n}","import { ExtFile, UploadResponse } from \"../types\";\r\n\r\nexport const TIMEOUT_ERROR_RESPONSE = {\r\n success: false,\r\n message: \"Timeout error\",\r\n payload: {}\r\n};\r\nexport const ABORTED_ERROR_RESPONSE = {\r\n success: false,\r\n message: \"Upload aborted\",\r\n payload: {}\r\n}\r\nexport const JSON_PARSE_ERROR_RESPONSE = {\r\n success: false,\r\n message: \"Error when parsing JSON response\",\r\n payload: {}\r\n}\r\n\r\nexport const UNEXPECTED_ERROR_RESPONSE = {\r\n success: false,\r\n message: \"Unexpected error\",\r\n payload: {}\r\n}\r\n\r\nexport const NO_XHR_PROVIDED_ERROR = (extFile: ExtFile): ExtFile => {\r\n return {\r\n\r\n ...extFile,\r\n uploadMessage: \"Unable to upload. xhr object was not provided\",\r\n uploadStatus: \"error\",\r\n\r\n serverResponse: { success: false, }\r\n }\r\n}","import { ExtFile, ServerResponse, UploadResponse } from \"../types\";\r\nimport { JSON_PARSE_ERROR_RESPONSE } from \"./errors.upload\";\r\n\r\nexport const makeServerResponse = (success: any, message: string, payload: any): ServerResponse => {\r\n const result: ServerResponse = { success: success, message: message, payload: payload } as ServerResponse;\r\n return result;\r\n}\r\nexport const JsonParseResponse = (xhr: XMLHttpRequest): ServerResponse => {\r\n try {\r\n const jsonResponse = JSON.parse(xhr.response);\r\n const success: any = jsonResponse.success;\r\n const message: string = jsonResponse.message;\r\n const payload: any = jsonResponse.payload;\r\n\r\n const fuiResponse: ServerResponse = {\r\n success: typeof success === \"boolean\" ? success : false,\r\n message: typeof message === \"string\" ? message : \"Error on message response\",\r\n payload: payload || {}\r\n }\r\n return fuiResponse\r\n } catch (error) {\r\n //console.log(\"FuiUpload ERROR\", error);\r\n return JSON_PARSE_ERROR_RESPONSE;\r\n }\r\n}\r\n\r\n\r\n\r\nexport const makeSuccessUploadResponse = (\r\n extFile: ExtFile,\r\n responseFui: ServerResponse\r\n): ExtFile => {\r\n return {\r\n ...extFile,\r\n serverResponse: responseFui,\r\n uploadMessage: responseFui.message,\r\n uploadStatus: \"success\"\r\n\r\n }\r\n}\r\n\r\n\r\nexport const makeErrorUploadResponse = (\r\n extFile: ExtFile,\r\n responseFui: ServerResponse\r\n): ExtFile => {\r\n //console.log(\"makeErrorUploadResponse\", extFile, responseFui);\r\n return {\r\n ...extFile,\r\n uploadMessage: responseFui.message,\r\n uploadStatus: \"error\", \r\n serverResponse: responseFui,\r\n }\r\n}\r\n\r\n","import { ExtFile, Method, UPLOADSTATUS } from \"../types\";\r\nimport { ServerResponse, UploadResponse } from \"../types/uploadTypes\";\r\nimport addExtraDataUpload from \"./addExtraData.upload\";\r\nimport addHeaders from \"./addheaders.upload\";\r\nimport { ABORTED_ERROR_RESPONSE, NO_XHR_PROVIDED_ERROR, TIMEOUT_ERROR_RESPONSE, UNEXPECTED_ERROR_RESPONSE } from \"./errors.upload\";\r\nimport { JsonParseResponse, makeErrorUploadResponse, makeSuccessUploadResponse } from \"./response.upload\";\r\nimport { completeUploadResult, unableToUploadResult } from \"./utils.upload\";\r\n\r\n\r\n/**\r\n * Uploads one formData object to a given endpoint in a promisified way\r\n * @param xhr XMLHTTPrequest object\r\n * @param method method for uploading\r\n * @param endpoint endpoint to upload the file\r\n * @param data FromData object to perform multipart form data upload\r\n * @param headers the set of headers\r\n * @returns a server response that consists on {status, payload, message}\r\n */\r\nexport const uploadFormData = (\r\n xhr: XMLHttpRequest,\r\n method: Method | undefined = \"POST\",\r\n endpoint: string,\r\n data: FormData,\r\n headers: Record<string, string> | undefined\r\n) => {\r\n return new Promise<ServerResponse>((resolve, reject) => {\r\n //console.log(\"Fui_uploadFormData uploadFile\", xhr, method, endpoint, data, headers);\r\n\r\n const finalMethod: Method = [\"POST\", \"PUT\", \"PATCH\"].includes(method.toUpperCase()) ? method : \"POST\";\r\n\r\n let lastLastState: number = -1;\r\n let lastState: number = 0;\r\n let jumped: boolean = false;\r\n\r\n xhr.upload.onload = () => {\r\n //console.log(\"Fui_uploadFormData uploadFile onLoad\", xhr.readyState, xhr.response);\r\n };\r\n xhr.upload.ontimeout = () => resolve(TIMEOUT_ERROR_RESPONSE);\r\n xhr.upload.onabort = () => {\r\n //console.log(\"Fui_uploadFormData ABORTEEEEDDDD\");\r\n resolve(ABORTED_ERROR_RESPONSE);\r\n };\r\n xhr.onloadend = async (e) => {\r\n //console.log(\"onloadend loaded\", e.loaded);\r\n //console.log(\"onloadend total\", e.total);\r\n //console.log(\"onloadend lengthComputable\", e.lengthComputable);\r\n\r\n }\r\n // listen for `progress` event\r\n //currently listening on FileItem component hook\r\n xhr.onreadystatechange = async (e) => {\r\n //console.log(\"Finished\", xhr);\r\n\r\n //console.log(\"Fui_uploadFormData uploadFile onreadystatechange e.type\", e.type);\r\n //console.log(\"Fui_uploadFormData uploadFile onreadystatechange\", xhr.readyState, xhr.response);\r\n\r\n lastLastState = lastState;\r\n lastState = xhr.readyState;\r\n\r\n if (xhr.readyState === 4) {\r\n if (xhr.response !== \"\") {\r\n //there is th answer\r\n resolve(JsonParseResponse(xhr));\r\n } else {\r\n //error unexpected\r\n // console.log(\"Fui_uploadFormData EMPTY status\", xhr.status);\r\n // console.log(\"Fui_uploadFormData EMPTY readyState\", xhr.readyState);\r\n // console.log(\"Fui_uploadFormData EMPTY upload\", xhr.upload);\r\n //console.log(\"Fui_uploadFormData EMPTY abort\", xhr.abort);\r\n //const jumped = lastLastState - lastLastState !== 1;\r\n resolve(ABORTED_ERROR_RESPONSE);\r\n\r\n }\r\n } else {\r\n //console.log(\"Fui_uploadFormData FuiUpload NOT YET\" + xhr.readyState);\r\n }\r\n };\r\n // open request\r\n xhr.open(finalMethod, endpoint, true);\r\n\r\n //add header to request\r\n addHeaders(xhr, headers);\r\n //start uploading\r\n xhr.send(data);\r\n });\r\n\r\n};\r\n\r\n/**\r\n * \r\n * @param file the extended file to be uploaded\r\n * @param url the endpoint\r\n * @param method the method for uploading\r\n * @param headers headers for request\r\n * @returns \r\n */\r\nexport const uploadExtFile = async (\r\n extFile: ExtFile,\r\n url: string,\r\n method?: Method,\r\n headers?: Record<string, string>,\r\n uploadLabel?: string,\r\n): Promise<ExtFile> => {\r\n return new Promise(async (resolve, reject) => {\r\n try {\r\n const uploader: XMLHttpRequest | undefined = extFile.xhr;\r\n\r\n if (!uploader) {\r\n resolve(NO_XHR_PROVIDED_ERROR(extFile));\r\n return;\r\n }\r\n\r\n const localMethod: Method = method || \"POST\";\r\n const fileToUpload: File = extFile.file as File;\r\n\r\n const formData = new FormData();\r\n\r\n formData.append(uploadLabel || \"file\", fileToUpload);\r\n\r\n // add extra data to upload\r\n const finalExtraData: Record<string, any> =\r\n { otherValue: \"other valueee haaaa\", param2: { tecnica: \"KIKOHUUUU\", friend: \"Chaos\", age: 25 }, ...extFile.extraUploadData };\r\n\r\n addExtraDataUpload(formData, finalExtraData);\r\n //console.log(\"FORMDATA\", formData);\r\n\r\n let responseFui: ServerResponse;\r\n responseFui = await uploadFormData(\r\n uploader,\r\n localMethod,\r\n url,\r\n formData,\r\n headers || {});\r\n\r\n if (responseFui.success) {\r\n // status is true\r\n resolve(makeSuccessUploadResponse(extFile, responseFui));\r\n } else {\r\n // status is false\r\n resolve(makeErrorUploadResponse(extFile, responseFui));\r\n }\r\n } catch (error) {\r\n // on error\r\n //console.log(\"uploadPromiseXHR uploadPromiseXHR ERROR\", error);\r\n resolve(\r\n makeErrorUploadResponse(extFile, UNEXPECTED_ERROR_RESPONSE)\r\n );\r\n }\r\n });\r\n};\r\n\r\n\r\n\r\n\r\nexport function uploadFile(\r\n file: File,\r\n url: string,\r\n method?: Method,\r\n label?: string,\r\n headers?: Record<string, string>\r\n): Promise<ServerResponse> {\r\n return new Promise(async (resolve, reject) => {\r\n\r\n\r\n //start uploading\r\n const formData = new FormData();\r\n\r\n formData.append(label || \"file\", file);\r\n\r\n try {\r\n const serverResponse: ServerResponse = await uploadFormData(new XMLHttpRequest(), method, url, formData, headers);\r\n resolve(serverResponse);\r\n } catch (error) {\r\n // on error\r\n //console.log(\"uploadPromiseXHR uploadPromiseXHR ERROR\", error);\r\n resolve(UNEXPECTED_ERROR_RESPONSE);\r\n }\r\n });\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * @deprecated\r\n * Uploads one formData object to a given endpoint in a promisified way\r\n * @param xhr XMLHTTPrequest object\r\n * @param method method for uploading\r\n * @param endpoint endpoint to upload the file\r\n * @param data FromData object to perform multipart form data\r\n * @param headers the set of headers\r\n * @returns a dui server response that consists on {success, payload, message}\r\n */\r\nexport const FuiUpload = (\r\n xhr: XMLHttpRequest,\r\n method: Method,\r\n endpoint: string,\r\n data: FormData,\r\n headers: Record<string, string>\r\n) => {\r\n return new Promise<ServerResponse>((resolve, reject) => {\r\n //console.log(\"FuiUpload params\", xhr, method, endpoint, data, headers);\r\n\r\n xhr.upload.onload = () => {\r\n //console.log(\"FuiUpload onLoad\", xhr.readyState, xhr.response);\r\n };\r\n\r\n xhr.upload.ontimeout = () => resolve(TIMEOUT_ERROR_RESPONSE);\r\n xhr.upload.onabort = () => resolve(ABORTED_ERROR_RESPONSE);\r\n\r\n // listen for `progress` event\r\n //currently listening on FileMosaic component hook\r\n\r\n xhr.onreadystatechange = async (e) => {\r\n //console.log(\"Finished\", xhr);\r\n //console.log(\"FuiUpload onreadystatechange\", xhr.readyState, xhr.response, xhr);\r\n\r\n if (xhr.readyState === 4) {\r\n if (xhr.response !== \"\") {\r\n //there is th answer\r\n resolve(JsonParseResponse(xhr));\r\n } else {\r\n //error unexpected\r\n resolve(UNEXPECTED_ERROR_RESPONSE);\r\n }\r\n } else {\r\n //console.log(\"FuiUpload NOT YET\" + xhr.readyState);\r\n }\r\n };\r\n // open request\r\n xhr.open(method, endpoint, true);\r\n const headerKeys: string[] = Object.keys(headers);\r\n //const headerValues: string[] = Object.values(headers);\r\n for (let i = 0; i < headerKeys.length; i++) {\r\n //console.log(\"FuiUpload headers\", headerKeys[i], headers[headerKeys[i]]);\r\n xhr.setRequestHeader(\r\n headerKeys[i],\r\n headers[headerKeys[i]]\r\n );\r\n }\r\n //start uploading\r\n xhr.send(data);\r\n });\r\n\r\n};\r\n\r\n\r\n","import { NamedColor } from \"../types/NamedColor\";\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\nexport const NAMED_COLORS: NamedColor =\r\n{\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}","import { NAMED_COLORS } from \"./namedColors\";\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\nexport const darkerColor = (colorInput: string, percentage = 25): string => {\r\n let darkedColor = \"\";\r\n const reduce = (100 - percentage) / 100;\r\n let component1: number = 0;\r\n let component2: number = 0;\r\n let component3: number = 0;\r\n if (isHexColor(colourNameToHex(colorInput))) {\r\n\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\r\n darkedColor = `rgb(${component1 * reduce}, ${component2 * reduce},${component3 * reduce})`;\r\n } else {\r\n if (colorInput.includes(\"rgba\")) {\r\n let slicer = colorInput.replace(\"rgba(\", \"\");\r\n let components: string[] = 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 } else if (colorInput.includes(\"rgb\")) {\r\n\r\n let slicer = colorInput.replace(\"rgb(\", \"\");\r\n let components: string[] = 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\r\n return darkedColor;\r\n}\r\n/**\r\n * Make the color into a brighted color\r\n * @param colorInput \r\n * @returns the brighted color \r\n */\r\nexport const brighterColor = (colorInput: string, percentage = 25): string => {\r\n let brightedColor = \"\";\r\n const increase = (100 + percentage) / 100;\r\n let component1: number = 0;\r\n let component2: number = 0;\r\n let component3: number = 0;\r\n if (isHexColor(colourNameToHex(colorInput))) {\r\n\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\r\n brightedColor = `rgb(${component1 * increase}, ${component2 * increase},${component3 * increase})`;\r\n } else {\r\n if (colorInput.includes(\"rgba\")) {\r\n let slicer = colorInput.replace(\"rgba(\", \"\");\r\n let components: string[] = slicer.split(\",\");\r\n brightedColor = `rgb(${parseInt(components[0], 10) * increase}, ${parseInt(components[1], 10) * increase},${parseInt(components[2], 10) * increase})`;\r\n //return darkedColor;\r\n } else if (colorInput.includes(\"rgb\")) {\r\n\r\n let slicer = colorInput.replace(\"rgb(\", \"\");\r\n let components: string[] = slicer.split(\",\");\r\n brightedColor = `rgb(${parseInt(components[0], 10) * increase}, ${parseInt(components[1], 10) * increase},${parseInt(components[2], 10) * increase})`;\r\n // return darkedColor;\r\n }\r\n }\r\n\r\n return brightedColor;\r\n}\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\nexport const hexColorToRGB = (colorInput: string | undefined, perc = 0, defaultColor?: string): string => {\r\n let resultDefault: string = 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 const color: string = colorInput.toUpperCase();\r\n // is already a rgba color\r\n if (color.includes(\"RGBA\")) {\r\n return color;\r\n }\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\r\n // if is a hex color or named color\r\n if (!isHexColor(colourNameToHex(color))) {\r\n return resultDefault;\r\n }\r\n let resultOk: string = \"\";\r\n //let strVar: string = \"\";\r\n let component1: number = 0;\r\n let component2: number = 0;\r\n let component3: number = 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/**\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\nexport const isHexColor = (colorInput: string): boolean => {\r\n\r\n // if first element is no '#' return default background color\r\n if (colorInput.charAt(0) !== '#') {\r\n\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\r\n\r\n return false;\r\n }\r\n // if one of the letters is not included in hex array return default\r\n for (let i = 1; i < colorInput.length; i++) {\r\n if (!hexArray.includes(colorInput.charAt(i))) {\r\n\r\n\r\n return false;\r\n }\r\n }\r\n\r\n return true;\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\nexport function colourNameToHex(colour: string | undefined): string {\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 (NAMED_COLORS[colour.toLocaleLowerCase()] !== undefined) {\r\n return NAMED_COLORS[colour.toLocaleLowerCase()];\r\n }\r\n /**\r\n * When the named color was not found\r\n */\r\n\r\n return colour;\r\n}\r\n\r\n/**\r\n * hexArray & decArray\r\n * \r\n * arrays of numbers used to convert hexadecimal numbers into decimal and viceversa\r\n */\r\nconst hexArray = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];\r\nconst decArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];\r\n\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\nexport const hexTodec = (letter: string): number => {\r\n if (hexArray.includes(letter)) {\r\n return decArray[hexArray.indexOf(letter)];\r\n } else {\r\n return 0;\r\n }\r\n}\r\n\r\n\r\n/** \r\n * Asure a base color. 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\nexport const asureColor = (color?: string): string => {\r\n if (color !== undefined && color !== \"\") {\r\n return color;\r\n } else {\r\n return DEFAULT_FONT_COLOR;\r\n }\r\n}\r\n/** \r\n * Asure a base color. 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\nexport const completeAsureColor = (color?: string, perc = 1): string => {\r\n\r\n return hexColorToRGB(asureColor(colourNameToHex(color)), perc);\r\n\r\n}\r\n\r\n\r\n\r\nexport const DEFAULT_FONT_COLOR = \"#646c7f\";","/**\r\n * If className is given, adds class name in string format to a base class name\r\n * @param baseClassName the base class name\r\n * @param className the class name to be added\r\n * @returns a new class name obtained by adding the second paramater\r\n */\r\nexport const addClassName = (\r\n baseClassName: string,\r\n className: string | undefined\r\n): string => {\r\n if (className)\r\n return `${baseClassName} ${className}`;\r\n return baseClassName;\r\n}","\r\nimport { ExtFile, ExtFileInstance, ServerResponse, UploadResponse, UPLOADSTATUS } from \"../types\"\r\n\r\nexport const unexpectedErrorUploadResult = (extFile: ExtFile): ExtFile => {\r\n return {\r\n ...extFile,\r\n uploadMessage: \"Unexpected error\",\r\n uploadStatus: \"error\",\r\n serverResponse: {\r\n success: false,\r\n message: \"Error on upload: unexpected error \",\r\n payload: {},\r\n }\r\n }\r\n}\r\nexport const unableToUploadResult = (\r\n extFile: ExtFile\r\n): UploadResponse => {\r\n return {\r\n id: extFile.id,\r\n uploadedFile: {\r\n ...extFile,\r\n uploadMessage: \"Unable to upload. XHR was not provided\",\r\n uploadStatus: \"error\"\r\n },\r\n serverResponse: {\r\n success: false,\r\n message: \"Error on upload: Unable to upload. XHR was not provided \",\r\n payload: {},\r\n }\r\n }\r\n}\r\nexport const completeUploadResult = (\r\n extFile: ExtFile,\r\n serverResponse: ServerResponse,\r\n uploadStatusresult: UPLOADSTATUS\r\n): UploadResponse => {\r\n return {\r\n id: extFile.id,\r\n uploadedFile: {\r\n ...extFile,\r\n uploadMessage: serverResponse.message,\r\n uploadStatus: uploadStatusresult\r\n },\r\n serverResponse: serverResponse\r\n }\r\n}\r\n\r\n/**\r\n * Initializes the xhr attribute for performing uploads\r\n * @param extFileList the list of extended files\r\n * @returns the array of extFiles with the xhr attribute initialized\r\n */\r\nexport const toUploadableExtFileList = (\r\n extFileList: ExtFile[] | ExtFileInstance[]\r\n): ExtFile[] => {\r\n if (!extFileList) return [];\r\n return extFileList.map(extFile => {\r\n return { ...extFile, xhr: new XMLHttpRequest() }\r\n });\r\n}\r\n\r\n/**\r\n * Updates the uploadStatus of the given extFile \r\n * from \"preparing\" to \"uploading\"\r\n * @param extFile the extended file\r\n * @returns the extended file with uploadStatus updated to \"uploading\"\r\n */\r\nexport const instantPreparingToUploadOne = (\r\n extFile: ExtFileInstance | ExtFile\r\n): ExtFileInstance | ExtFile => {\r\n if (extFile.uploadStatus === \"preparing\") {\r\n //for ExtFile instance\r\n extFile.uploadStatus = \"uploading\";\r\n //for ExtFile type\r\n return {\r\n ...extFile,\r\n uploadStatus: \"uploading\",\r\n };\r\n }\r\n return extFile;\r\n};\r\n\r\n/**\r\n * \r\n * @param extFile the extended file\r\n * @returns \r\n */\r\nexport const preparingToUploadOne = (\r\n extFile: ExtFileInstance | ExtFile\r\n): Promise<ExtFileInstance | ExtFile> => {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n if (extFile.uploadStatus === \"preparing\") {\r\n //for ExtFile instance\r\n extFile.uploadStatus = \"uploading\";\r\n //for ExtFile type\r\n resolve({\r\n ...extFile,\r\n uploadStatus: \"uploading\",\r\n });\r\n } else\r\n resolve(extFile);\r\n }, 1500);\r\n });\r\n};\r\n/**\r\n * Sleeps for 1200 miliseconds for showing a better transition\r\n * on uploading\r\n * @param time the time to sleep in miliseconds\r\n * @returns true is everything is ok\r\n */\r\nexport const sleepTransition = (time = 1500\r\n): Promise<boolean> => {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve(true);\r\n }, time);\r\n });\r\n}\r\n/**\r\n * Removes the deleted files and updates the aborted ones with a message\r\n * @param arrExtFile incomming arr of extFle instances\r\n * @returns an array of ExtFle objects\r\n */\r\nexport const sanitizeArrExtFile = (arrExtFile: ExtFileInstance[]): ExtFile[] => {\r\n \r\n return arrExtFile.filter((extFileInstance: ExtFileInstance) =>\r\n !extFileInstance.extraData?.deleted)\r\n\r\n .map((extFileInstance: ExtFileInstance) => {\r\n if (extFileInstance.uploadStatus === \"aborted\"\r\n && !extFileInstance.uploadMessage) {\r\n // TO-DO: ad localization for this message\r\n extFileInstance.uploadMessage = \"Upload aborted by user\";\r\n //extFileInstance.uploadStatus = \"error\";\r\n }\r\n return ExtFileInstance.toExtFile(extFileInstance) as ExtFile\r\n });\r\n}\r\n/**\r\n * \r\n * @param extFileInstance \r\n * @param extFileobj \r\n */\r\nexport const setNextUploadStatus = (\r\n extFileInstance: ExtFileInstance,\r\n extFileobj: ExtFile) => {\r\n\r\n const prevStatus: UPLOADSTATUS | undefined = extFileInstance.uploadStatus;\r\n const nextStstaus: UPLOADSTATUS | undefined = extFileobj.uploadStatus;\r\n\r\n //console.log(\"setNextUploadStatus\", prevStatus, nextStstaus);\r\n //console.log(\"setNextUploadStatus\", extFileInstance.uploadMessage, extFileobj.uploadMessage);\r\n if (\r\n prevStatus === \"preparing\" &&\r\n [\"aborted\", undefined].includes(nextStstaus)\r\n ) {\r\n extFileInstance.uploadStatus = undefined;\r\n extFileInstance.uploadMessage = extFileobj.uploadMessage;\r\n\r\n } else if (\r\n prevStatus === \"uploading\" &&\r\n [\"aborted\", undefined].includes(nextStstaus)\r\n ) {\r\n extFileInstance.uploadStatus = \"aborted\";\r\n extFileInstance.uploadMessage = extFileobj.uploadMessage;\r\n\r\n }\r\n\r\n}\r\n\r\n","import { Method } from \"./method\"\r\n\r\nexport type UploadConfig = {\r\n /**\r\n * The url endpoint to upload the file.\r\n * e.g. https://www.myasomwbackend/uploads/file\r\n */\r\n url?: string;\r\n /**\r\n * upload method, can be POST | PUT | PATCH\r\n * @default \"POST\"\r\n */\r\n method?: Method;\r\n /**\r\n * Request headers for http request.\r\n * e.g.\r\n * ```jsx\r\n * headers = { \r\n * \"content-type\": \"multipart/form-data\",\r\n * Authorization: \"Bearer YOUR_BEARER_TOKEN_GOES_HERE\",\r\n * } \r\n * ```\r\n */\r\n headers?: Record<string, string>;\r\n /**\r\n * the label to use in request\r\n * On server this must be the label to get the file.\r\n * @default \"file\"\r\n */\r\n uploadLabel?: string;\r\n /**\r\n * Flag for indicating whther to remove the non-valid files\r\n * before starting the upload process.\r\n * This flag is valid only if validation is enable\r\n */\r\n cleanOnUpload?: boolean;\r\n /**\r\n * If true, onDrop event or file selection not only will make Dropzone to return the list of files, but also\r\n * it will start the upload stage for the files if at least url was set\r\n * By default is false\r\n */\r\n autoUpload?: boolean;\r\n /**\r\n * The time that will last the \"preparing\" stage\r\n * By default is 1500 miliseconds = 1.5 seconds\r\n */\r\n preparingTime?: number;\r\n /**\r\n * A message to show in the footer when the uploading process takes place.\r\n */\r\n uploadingMessage?: string;\r\n}\r\n\r\nexport const createUploadConfig = (\r\n url?: string,\r\n method?: Method,\r\n headers?: Record<string, string>,\r\n uploadLabel?: string,\r\n cleanonUpload?: boolean\r\n) => {\r\n return {\r\n url,\r\n method,\r\n headers,\r\n uploadLabel,\r\n cleanonUpload\r\n }\r\n}","import { createSyntheticFile } from \"../synthetic-file\"\r\nimport { ExtFile } from \"../types\"\r\nimport { FileIdGenerator } from \"../utils\"\r\nimport { listOfErrors } from \"../validation\"\r\n\r\nexport const extFileMock = (id?: number): ExtFile => {\r\n return {\r\n id: id || FileIdGenerator.getNextId(),\r\n name: \"fileName.ext\",\r\n size: 28 * 1024 * 1024,\r\n type: \"files-ui/mock\",\r\n file: createSyntheticFile(\"fileName.ext\", 28 * 1024 * 1024, \"files-ui/mock\"),\r\n errors: listOfErrors,\r\n uploadMessage: \"uploaded\",\r\n uploadStatus: \"preparing\",\r\n valid: false,\r\n progress: 28,\r\n xhr: new XMLHttpRequest(),\r\n extraData: {\r\n extraData1: \"files-ui is the best\",\r\n extraData2: {\r\n id: 1,\r\n name: \"files-ui.mock\"\r\n },\r\n deleted: true\r\n },\r\n downloadUrl: \"https://www.files-ui.com/mock/file-download\"\r\n }\r\n}","import { ExtFile, ExtFileInstance, ExtFileManager } from \"../types\";\r\n\r\nexport const extFileReconcilation = (\r\n dropzoneId: number | string | undefined,\r\n extFileIncomming: ExtFile[]\r\n): ExtFile[] | undefined => {\r\n let result: ExtFile[] = [];\r\n\r\n let arrOfExtFiles: ExtFileInstance[] | undefined =\r\n ExtFileManager.getExtFileInstanceList(dropzoneId);\r\n\r\n // continue only if arrOfExtFiles exists\r\n if (arrOfExtFiles) {\r\n //different sizes means there was deleted files\r\n //also can be new files to be uploaded\r\n //needed an extra flag to allow add files in the middle of uploading process\r\n // if new files are added, they are added to the Manager\r\n // outside they were already added to the UI\r\n // inside Dropzone, will be needed a .next() method for manager\r\n\r\n // 1st allow deleted files and ignore new ones\r\n // reduce the arrOfExtFileInstances array\r\n // parecido a listas ligadas, iterar hasta encontrar null XD\r\n let incommingTemp: ExtFile[] = [...extFileIncomming];\r\n incommingTemp = incommingTemp.filter(\r\n (F) => arrOfExtFiles?.findIndex(I => I.id === F.id) === -1\r\n );\r\n\r\n //console.log(\"reconciliation incommingTemp\", incommingTemp);\r\n \r\n\r\n //different sizes not allowed\r\n if (arrOfExtFiles.length !== extFileIncomming.length || extFileIncomming.length === 0) {\r\n return undefined;\r\n }\r\n for (let i = 0; i < arrOfExtFiles.length; i++) {\r\n if (\r\n (extFileIncomming[i].uploadStatus === undefined)\r\n &&\r\n (arrOfExtFiles[i].uploadStatus === \"preparing\")\r\n ) {\r\n //console.log(\"useDropzoneFileListUpdater onCancel i\", i);\r\n arrOfExtFiles[i].uploadStatus = undefined;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n}","\r\nimport { DropzoneLocalizerSelector } from \"../localization\";\r\nimport { ExtFile, ExtFileInstance, UploadResponse } from \"../types\";\r\n\r\n/**\r\n * Updates a extFile and sets its uploadStatus to \"uploading\"\r\n * @param extFile the extended file object\r\n * @returns the extended file with the uploadStatus attribute modified\r\n */\r\nexport const setPrepToUploading = (\r\n extFile: ExtFile\r\n): Promise<ExtFile> => {\r\n //console.log(\"prepToUpload One\", extFile);\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve({\r\n ...extFile,\r\n uploadStatus: \"uploading\",\r\n });\r\n }, 1500);\r\n\r\n });\r\n};\r\n/**\r\n * Updates a extFile and sets its uploadStatus to \"success\"\r\n * @param extFile the extended file object\r\n * @returns the extended file with the uploadStatus attribute modified\r\n */\r\nexport const uploadOne = (\r\n extFile: ExtFile\r\n): Promise<ExtFile> => {\r\n //console.log(\"upload One\", extFile);\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve({\r\n ...extFile,\r\n uploadStatus: \"success\",\r\n });\r\n }, 2000);\r\n });\r\n};\r\n/**\r\n * Awaits the given time before start uploading\r\n * @param preparingTime the time in miliseconds, by default it will wait 1.5 secs\r\n * @returns an empty object\r\n */\r\nexport const sleepPreparing = (\r\n preparingTime: number = 5000\r\n): Promise<void> => {\r\n //console.log(\"uploadfiles preparingTime One\", preparingTime);\r\n return new Promise((resolve, reject) => {\r\n\r\n setTimeout(() => {\r\n resolve();\r\n }, preparingTime);\r\n\r\n });\r\n}\r\n\r\n/**\r\n * \r\n * @param extFileInstance \r\n * @returns \r\n */\r\nexport const prepToUploadOne = (\r\n extFileInstance: ExtFileInstance | ExtFile\r\n): Promise<ExtFileInstance | ExtFile> => {\r\n //console.log(\"prepToUpload One\", extFileInstance);\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n extFileInstance.uploadStatus = \"uploading\";\r\n resolve({\r\n ...extFileInstance,\r\n uploadStatus: \"uploading\",\r\n });\r\n }, 1500);\r\n\r\n });\r\n};\r\n\r\n/**\r\n * \r\n * @param extFileInstance \r\n * @returns \r\n */\r\nexport const uploadOneExtFile = (\r\n extFileInstance: ExtFileInstance\r\n): Promise<Object> => {\r\n //console.log(\"upload One\", extFileInstance);\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n extFileInstance.uploadStatus = \"success\";\r\n resolve({\r\n ...extFileInstance,\r\n uploadStatus: \"success\",\r\n });\r\n }, 2000);\r\n });\r\n};\r\n\r\n\r\n/**\r\n * \r\n * @param extFile the extFile to upload \r\n * @param DropzoneLocalizer the localization\r\n * @returns a duiUploadResponse object that describes the result\r\n */\r\nexport const fakeFuiUpload = (\r\n extFileInstance: ExtFileInstance,\r\n DropzoneLocalizer = DropzoneLocalizerSelector(\"EN-en\")\r\n): Promise<ExtFile> => {\r\n \r\n const extFile:ExtFile = extFileInstance.toExtFile();\r\n \r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n const randomNumber: number = Math.floor(Math.random() * 10);\r\n if (randomNumber % 2 === 0) {\r\n const success = true;\r\n const message = DropzoneLocalizer.fakeuploadsuccess as string;\r\n const payload = { url: \"\" };\r\n resolve({\r\n ...extFile,\r\n serverResponse: { success, message, payload },\r\n uploadStatus: \"success\",\r\n uploadMessage: message,\r\n\r\n });\r\n } else {\r\n const success = false;\r\n const message = DropzoneLocalizer.fakeUploadError as string;\r\n const payload = {};\r\n resolve({\r\n ...extFile,\r\n serverResponse: { success, message, payload },\r\n uploadStatus: \"error\",\r\n uploadMessage: message,\r\n });\r\n }\r\n }, 1700);\r\n });\r\n};\r\n\r\n\r\n/**\r\n * \r\n * @param extFile the extFile to upload \r\n * @param DropzoneLocalizer the localization\r\n * @returns a duiUploadResponse object that describes the result\r\n */\r\nexport const fakeFuiUploadExtFile = (\r\n extFileInstance: ExtFileInstance,\r\n DropzoneLocalizer = DropzoneLocalizerSelector(\"EN-en\")\r\n): Promise<UploadResponse> => {\r\n \r\n const extFile:ExtFile = extFileInstance.toExtFile();\r\n \r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n const randomNumber: number = 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\r\n resolve({\r\n id: extFile.id,\r\n serverResponse: { status, message, payload },\r\n uploadedFile: {\r\n ...extFile,\r\n uploadStatus: \"success\",\r\n uploadMessage: message,\r\n progress: 100\r\n }\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 id: extFile.id,\r\n serverResponse: { status, message, payload },\r\n uploadedFile: {\r\n ...extFile,\r\n uploadStatus: \"error\",\r\n uploadMessage: message,\r\n progress: 60\r\n },\r\n });\r\n }\r\n }, 1700);\r\n });\r\n};\r\n","import { ExtFile, ExtFileInstance } from \"../types\";\r\nimport { FileIdGenerator } from \"./IdGenerator\";\r\n\r\n\r\n/**\r\n * Converts the fileList into an array of separated ExtFile objects\r\n * @param fileList the FileList object given by input(event.target.files) or drop operation (event.dataTransfer)\r\n * @returns an array of ExtFile objects\r\n */\r\nexport const fileListToExtFileArray = (fileList: FileList): ExtFile[] => {\r\n let extFileArray: ExtFile[] = [];\r\n for (let i = 0, f: File; (f = fileList[i]); i++) {\r\n extFileArray.push({ id: FileIdGenerator.getNextId(), file: f, name: f.name, size: f.size, type: f.type });\r\n }\r\n return extFileArray;\r\n};\r\n\r\n/**\r\n * Converts the fileList into an array of separated ExtFile instances\r\n * @param fileList the FileList object given by input (event.target.files) or drop operation (event.dataTransfer)\r\n * @returns an array of ExtFile instances\r\n */\r\nexport const fileListToExtFileInstanceArray = (fileList: FileList): ExtFileInstance[] => {\r\n let extFileArray: ExtFileInstance[] = [];\r\n for (let i = 0, f: File; (f = fileList[i]); i++) {\r\n extFileArray.push(new ExtFileInstance({ id: FileIdGenerator.getNextId(), file: f, name: f.name, size: f.size, type: f.type }));\r\n }\r\n return extFileArray;\r\n};","/**\r\n * Resize an image resolution given maxWidth and maxHeight\r\n * \r\n * Should be called with await\r\n * @param base64Str a string representation of an imae file\r\n * @param maxWidth the max width of he image\r\n * @param maxHeight the max height of he image\r\n * @returns the resized image\r\n */\r\nexport function getImageOrientation(\r\n imageSource: string | undefined,\r\n): Promise<\"landscape\" | \"portrait\"> {\r\n return new Promise((resolve, reject) => {\r\n //console.log(\"getImageOrientation imageSource\", imageSource);\r\n if (!imageSource || imageSource.length === 0) {\r\n // console.log(\"getImageOrientation rejected\", imageSource);\r\n\r\n reject(\"landscape\");\r\n return;\r\n }\r\n try {\r\n //console.log(\"getImageOrientation try ini\", imageSource);\r\n\r\n let img: HTMLImageElement = new Image();\r\n img.src = imageSource;\r\n img.onerror = (ev: string | Event) => {\r\n //console.log(\"getImageOrientation There was a ne error reading\", ev);\r\n reject(\"landscape\");\r\n }\r\n img.onload = () => {\r\n let width: number = img.width;\r\n let height: number = img.height;\r\n if (width > height) {\r\n resolve(\"landscape\");\r\n } else {\r\n resolve(\"portrait\");\r\n }\r\n }\r\n } catch (error) {\r\n //console.error(\"An error ocurred when trying to get the image orientation\");\r\n\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.error(\"An error ocurred when trying to get the image orientation\");\r\n }\r\n reject(\"landscape\");\r\n }\r\n });\r\n}\r\n\r\n","/**\r\n * \r\n * @param file \r\n * @param name \r\n * @param type \r\n * @param size \r\n * @returns the file name, type and size\r\n */\r\nexport const getLocalFileItemData = (\r\n file: File | undefined,\r\n name: string | undefined,\r\n type: string | undefined,\r\n size: number | undefined\r\n): [string, string | undefined, number | undefined] => {\r\n\r\n let localFileName: string = \"\";\r\n let localFileType: string | undefined = undefined;\r\n let localFileSize: number | undefined = undefined;\r\n\r\n // if file object is valid, obtain metadata from it\r\n // otherwise try to get file data from individual props in string format\r\n if (file && typeof file.name === \"string\") {\r\n localFileName = file.name;\r\n localFileType = file.type;\r\n localFileSize = file.size;\r\n } else if (name && typeof name === \"string\") {\r\n localFileName = name;\r\n localFileType = type;\r\n localFileSize = size;\r\n }\r\n return [localFileName, localFileType, localFileSize]\r\n}","import { ExtFile } from \"../types\";\r\n\r\nexport const isUploadAbleExtFile = (extFile: ExtFile, validateFilesFlag: boolean) => {\r\n return (!validateFilesFlag || (validateFilesFlag && extFile.valid)) && extFile.uploadStatus !== \"success\";\r\n}","export const isValidateActive = (\r\n accept: string | undefined,\r\n maxFileSize: number | undefined,\r\n maxFiles: number | undefined,\r\n validator: Function | undefined\r\n ): boolean => {\r\n return (\r\n (accept !== undefined && accept !== null) ||\r\n (maxFileSize !== undefined && maxFileSize !== null) ||\r\n (maxFiles !== undefined && maxFiles !== null) ||\r\n (validator !== undefined && validator !== null)\r\n );\r\n };\r\n ","import { ExtFile, UPLOADSTATUS } from \"../types\";\r\nimport { FileIdGenerator, getRandomInt } from \"../utils\";\r\nimport { getRandomUploadStatus, listOfErrors } from \"../validation\";\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\n export const makeSyntheticExtFile = (\r\n file?: File ,\r\n valid = (Math.ceil(Math.random() * 28) % 2 === 0),\r\n uploadStatus?: UPLOADSTATUS,\r\n uploadMessage?: string\r\n): ExtFile => {\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 \"error\": customUploadMessage = \"Upload failed. There was an error\"; break;\r\n case \"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: ExtFile = {\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","import { UPLOADSTATUS } from \"../types\";\r\nimport { getRandomInt } from \"../utils/randomInt\";\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\n export const getRandomUploadStatus = (): UPLOADSTATUS | undefined => {\r\n const result: number = getRandomInt(0, 4);\r\n switch (result) {\r\n case 0: return \"error\";\r\n case 1: return \"uploading\";\r\n case 2: return \"success\";\r\n default:\r\n return undefined;\r\n }\r\n}","/**\r\n * Reads an image (or other type) file as data URL in a promise way, \r\n * so you can use await.\r\n * It will return a string that contains the URL representation\r\n * @param file File or Blob object\r\n * @returns data URL of the file\r\n */\r\nexport const readAsDataURL = (file: File | Blob, onProgress?: Function, onError?: Function): Promise<string | undefined> => {\r\n return new Promise<string | undefined>((resolve, reject) => {\r\n try {\r\n const reader = new FileReader();\r\n reader.onprogress = () => {\r\n onProgress?.();\r\n }\r\n reader.onerror = function () {\r\n onError?.();\r\n }\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\r\n\r\n/**\r\n * Reads a file as Text 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 or Blob object\r\n * @param encoding The type of encoding such as \"base64\"\r\n * @returns data text of the file\r\n */\r\nexport const readAsText = (file: File | Blob, encoding?: string, onProgress?: Function, onError?: Function): 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.onprogress = () => {\r\n onProgress?.();\r\n }\r\n reader.onerror = function () {\r\n onError?.();\r\n }\r\n reader.readAsText(file, encoding ? encoding : \"base64\");\r\n } catch (error) {\r\n reject(undefined);\r\n }\r\n });\r\n}\r\n\r\n\r\n\r\n/**\r\n * Reads a file and return the raw binary data from the file. \r\n * @param file File or Blob object\r\n * @param encoding The type of encoding such as \"base64\"\r\n * @returns raw binary data of the file\r\n */\r\nexport const readAsBinaryString = (file: File | Blob, onProgress?: Function, onError?: Function): 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.onprogress = () => {\r\n onProgress?.();\r\n }\r\n reader.onerror = function () {\r\n onError?.();\r\n }\r\n reader.readAsBinaryString(file);\r\n } catch (error) {\r\n reject(undefined);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Reads a file and returns an ArrayBuffer representing the file's data \r\n * @param file File or blob object\r\n * @param encoding The type of encoding such as \"base64\"\r\n * @returns ArrayBuffer representation of the file\r\n */\r\nexport const readAsArrayBuffer = (file: File | Blob, onProgress?: Function, onError?: Function): 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.onprogress = () => {\r\n onProgress?.();\r\n }\r\n reader.onerror = function () {\r\n onError?.();\r\n }\r\n reader.readAsArrayBuffer(file);\r\n } catch (error) {\r\n reject(undefined);\r\n }\r\n });\r\n}","/**\r\n * Resize an image resolution given maxWidth and maxHeight\r\n * \r\n * Should be called with await\r\n * @param base64Str a string representation of an imae file\r\n * @param maxWidth the max width of he image\r\n * @param maxHeight the max height of he image\r\n * @returns the resized image\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: HTMLCanvasElement = document.createElement('canvas');\r\n const MAX_WIDTH: number = maxWidth;\r\n const MAX_HEIGHT: number = maxHeight;\r\n let width: number = img.width;\r\n let height: number = 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: CanvasRenderingContext2D | null = 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 if (process.env.NODE_ENV === \"development\") {\r\n console.error(\"An error ocurred when trying to make a thumnail\");\r\n }\r\n reject(undefined);\r\n }\r\n }\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.error(\"An error ocurred when trying to make a thumnail\");\r\n }\r\n reject(undefined);\r\n }\r\n });\r\n}\r\n\r\n","/**\r\n * The max size of the word in characters\r\n */\r\nexport const DEFAULT_MAX_SIZE_WORD = 30;\r\n/**\r\n * \r\n * @param word the word to be shrinked\r\n * @returns the shrinked word\r\n */\r\nexport const shrinkWord = (word = \"\", card = false): string => {\r\n let newWord = word;\r\n if (card) {\r\n if (word.length >= 20) {\r\n newWord = word.slice(0, 10) + \"...\" + word.slice(-7);\r\n }\r\n } else if (word.length >= DEFAULT_MAX_SIZE_WORD) {\r\n newWord = word.slice(0, 13) + \"...\" + word.slice(-8);\r\n }\r\n return newWord;\r\n};"],"names":["fileSizeFormater","fileSize","toFixed","DropzoneItalian","defaultLabel","uploadingMessage","amountOfFiles","uploadFinished","uploaded","rejected","concat","noFilesMessage","footer","acceptAll","acceptCustom","accept","header","uploadFilesMessage","maxSizeMessage","maxFileSize","validFilesMessage","numberOfValidFiles","maxFiles","fakeuploadsuccess","fakeUploadError","FileItemItalian","fullInfoLayer","name","size","type","status","preparing","uploading","success","valid","denied","error","aborted","ValidateErrorItalian","maxSizeError","maxSize","acceptError","maxFileCount","DropzoneFrench","FileItemFrench","ValidateErrorFrench","DropzoneEnglish","FileItemEnglish","ValidateErrorEnglish","DropzoneSpanish","FileItemSpanish","ValidateErrorSpanish","DropzoneRussian","FileItemRussian","ValidateErrorRussian","DropzonePortuguese","FileItemPortuguese","ValidateErrorPortuguese","DropzoneSimplifiedChinese","FileItemSimplifiedChinese","ValidateErrorSimplifiedChinese","DropzoneTraditionalChinese","FileItemTraditionalChinese","ValidateErrorTraditionalChinese","FileItemLocalizer","DropzoneLocalizer","DropzoneLocalizerSelector","local","ValidateErrorLocalizer","ValidateErrorLocalizerSelector","includes","sevenzip","aac","abw","accdb","avi","azw","bmp","bz","bz2","cda","csh","css","csv","docx","drawio","eot","epub","freearc","gif","gzip","html","icalendar","java","jar","javascript","jpeg","json","jsonld","midi","mp3","mp4","mpeg","mpkg","octet","odp","ods","odt","oga","ogv","ogx","opus","otf","pdf","php","png","pptx","psd","python","tar","rar","react","rtf","sass","sh","swf","text","tiff","ttf","typescript","vsd","vue","wav","webm","weba","webp","wma","wmv","woff","xlsx","xml","xul","zip","getExt","fileName","result","exec","DEF_GEN_MIME","audioSelector","tailMime","textSelector","imageSelector","fontSelector","videoSelector","applicationSelector","mimeSelector","mimeType","headerMime","split","extensionSelector","extension","genericMime","checkIsCode","mimeUrlList","arc","mp2t","xhtml","fallBack","ExtFileInstance","extFile","id","file","imageUrl","errors","uploadMessage","uploadStatus","progress","xhr","extraData","extraUploadData","serverResponse","downloadUrl","videoUrl","this","toExtFile","extFileInstance","extFileClone","extFileInstanceKeys","Object","keys","extFileInstanceValues","values","i","length","currentValue","currKey","undefined","prototype","ExtFileManager","getNextId","nextId","setFileList","extFilesInstances","fileLists","__spreadArray","createFileListMap","removeFileListMap","process","env","NODE_ENV","console","getExtFileInstanceList","setFileListMapPreparing","dropzoneId","localFiles","validateFiles","cleanOnUpload","resultExtList","temLocalFiles","filter","map","__assign","F","setFileListMapPreparing2","SyntheticFile","createFile","File","defineProperty","get","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_x_mid","create_midi","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_3gp","create_3gp2","create_3gp_a","create_3gp_v","create_7z","create_python","create_java","create_react","create_vue","createFileListMiscelanious","listFile","push","createSyntheticFile","FileIdGenerator","getRandomInt","min","max","Math","floor","random","separateAccept","acceptItem","trim","validateAccept","charAt","headerMimeFile","tailMimeFile","validateExtFile","validator","validatorProps","localErrors","extFileResult","errorsResult","apply","maxFileSizeErrorMessenger","isValid","validateFile","idGenerated","listOfErrors","addExtraData","formData","extraDataKeys","append","addHeaders","headers","headerKeys","setRequestHeader","TIMEOUT_ERROR_RESPONSE","message","payload","ABORTED_ERROR_RESPONSE","JSON_PARSE_ERROR_RESPONSE","UNEXPECTED_ERROR_RESPONSE","NO_XHR_PROVIDED_ERROR","JsonParseResponse","jsonResponse","JSON","parse","response","makeSuccessUploadResponse","responseFui","makeErrorUploadResponse","uploadFormData","method","endpoint","data","Promise","resolve","reject","finalMethod","toUpperCase","upload","onload","ontimeout","onabort","onloadend","e","__awaiter","onreadystatechange","readyState","open","send","NAMED_COLORS","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","hexColorToRGB","colorInput","perc","defaultColor","resultDefault","color","replace","isHexColor","colourNameToHex","component1","component2","component3","hexTodec","hexArray","colour","toLocaleLowerCase","decArray","letter","indexOf","asureColor","DEFAULT_FONT_COLOR","baseClassName","className","percentage","brightedColor","increase","components","parseInt","inputElement","value","uploadStatusresult","uploadedFile","url","uploadLabel","cleanonUpload","darkedColor","reduce","XMLHttpRequest","extraData1","extraData2","deleted","extFileIncomming","arrOfExtFiles","incommingTemp","findIndex","I","setTimeout","fileList","extFileArray","f","preValidatedFiles","remainingValids","localValidator","localization","output","countdown","ValidationErrorLocalizer","validatedFile","maxFileErrorMessenger","Infinity","imageSource","img_1","Image","src","onerror","ev","width","height","localFileName","localFileType","localFileSize","customIcons","mimeResume","extention","customUrl","validateFilesFlag","ceil","newUpoadStatus","getRandomUploadStatus","customUploadMessage","randInt","onProgress","onError","reader_4","FileReader","onprogress","readAsArrayBuffer","reader_3","readAsBinaryString","reader_1","readAsDataURL","encoding","reader_2","readAsText","base64Str","maxWidth","maxHeight","canvas","document","createElement","MAX_WIDTH","MAX_HEIGHT","ctx","getContext","drawImage","toDataURL","arrExtFile","_a","extFileobj","prevStatus","nextStstaus","word","card","newWord","slice","preparingTime","time","extFileList","uploader","localMethod","fileToUpload","FormData","finalExtraData","otherValue","param2","tecnica","friend","age","addExtraDataUpload","label","_this","sent","localValidatorProps","fileListResult","remaining","currentExtFile"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sources":["../src/utils/fileSizeFormatter.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","../src/mime/icons.ts","../src/utils/getExt.ts","../src/mime/mime.ts","../src/types/ExtFile.ts","../src/types/ExtFileManager.ts","../src/synthetic-file/SyntheticFile.ts","../src/utils/IdGenerator.ts","../src/utils/randomInt.ts","../src/utils/input.utils.ts","../src/validation/separateAccept.ts","../src/validation/validateAccept.ts","../src/validation/fileValidator.ts","../src/validation/fakeerros.ts","../src/upload/addExtraData.upload.ts","../src/upload/addheaders.upload.ts","../src/upload/errors.upload.ts","../src/upload/response.upload.ts","../src/upload/upload.ts","../src/color/namedColors.ts","../src/color/colors.ts","../src/utils/addClassName.ts","../src/upload/utils.upload.ts","../src/types/UploadConfig.ts","../src/mocks/extFileMock.ts","../src/file-manager/reconcilation.ts","../src/utils/fakeupload.utils.ts","../src/utils/fileListParser.ts","../src/reader/imageOrientation.ts","../src/utils/getLocalFileItemData.ts","../src/utils/isUploadAbleExtFile.ts","../src/utils/dropzone.utils.ts","../src/synthetic-file/syntheticfileGenerator.ts","../src/validation/randomStatus.ts","../src/reader/readers.ts","../src/reader/resizeImage.ts","../src/utils/shrinkWord.ts"],"sourcesContent":["/**\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\n export const fileSizeFormater = (fileSize?: number | false): string| undefined => {\r\n let result = \"\";\r\n if (!fileSize) {\r\n return undefined;\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}","import { fileSizeFormater } from \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"preparazione\",\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 aborted:\"Interrotto\"\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 \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"préparer\",\r\n uploading: \"En cours\",\r\n success: \"Succès\",\r\n valid: \"Valide\",\r\n denied: \"Refusé\",\r\n error: \"Erreur\",\r\n aborted:\"Interrompu\"\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}","import { fileSizeFormater } from \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"Preparing\",\r\n uploading: \"Uploading\",\r\n success: \"Success\",\r\n valid: \"Valid\",\r\n denied: \"Not valid\",\r\n error: \"Error\",\r\n aborted:\"Aborted\"\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 \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"Preparando\",\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 aborted: \"Anulado\"\r\n },\r\n}\r\n/**\r\n * Spanish translation for Validation Errors\r\n */\r\nexport 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 \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"подготовка\",\r\n uploading: \"Загрузка\",\r\n success: \"успех\",\r\n valid: \"годный\",\r\n denied: \"выкинутый\",\r\n error: \"ошибка\",\r\n aborted:\"прерванный\"\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 \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\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 preparing:\"Preparando\",\r\n uploading: \"Enviando\",\r\n success: \"Êxito\",\r\n valid: \"válido\",\r\n denied: \"Negado\",\r\n error: \"Erro\",\r\n aborted:\"Abortado\"\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}","import { LocalLabels } from \"../../types\";\r\nimport { fileSizeFormater } from \"../../utils/fileSizeFormatter\";\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 * Chinnese 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 preparing:\"预加载\",\r\n uploading: \"上传\",\r\n success: \"成功\",\r\n valid: \"接受的文件\",\r\n denied: \"被拒绝的文件\",\r\n error: \"错误\",\r\n aborted:\"中止\"\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}","import { fileSizeFormater } from \"../../utils/fileSizeFormatter\";\r\nimport { LocalLabels } from \"../../types\";\r\n\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 * Chinese 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 preparing: \"預加載\",\r\n uploading: \"上傳\",\r\n success: \"成功\",\r\n valid: \"有效文件\",\r\n denied: \"無效文件\",\r\n error: \"錯誤\",\r\n aborted: \"中止\"\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 \"../types\";\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 { 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\nimport { ComponentLocalizer, Localization, LocalLabels } from \"../types\";\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 \"./../types\";\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 if (!local || ![\"ES-es\", \"EN-en\", \"FR-fr\", \"IT-it\", \"PT-pt\", \"RU-ru\", \"ZH-cn\", \"ZH-hk\"].includes(local)) {\r\n return ValidateErrorLocalizer[\"EN-en\"];\r\n }\r\n return ValidateErrorLocalizer[local];\r\n}","export 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\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\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\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\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 * Looks for the first file extension\r\n * @param fileName file name\r\n * @returns the file name extension\r\n */\r\n export 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};","import {\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 \"./icons\";\r\nimport { getExt } from \"../utils/getExt\";\r\nimport { IconsMap } from \"../types\";\r\n\r\nconst DEF_GEN_MIME: keyof IconsMap = \"octet\";\r\n/**\r\n * \r\n * @param tailMime \r\n * @returns \r\n */\r\nexport const audioSelector = (tailMime: string): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\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): keyof IconsMap => {\r\n let genericMime: keyof IconsMap = \"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 = \"typescript\";\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): keyof IconsMap => {\r\n let genericMime: keyof IconsMap = \"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 * If not found, returns octet-stream url\r\n * @param props mime and extension from file to search\r\n * @returns the result file ico\r\n */\r\nexport const getURLFileIco = (\r\n file: File | undefined,\r\n customIcons: IconsMap | undefined\r\n): ResultFileIco => {\r\n\r\n let result: keyof IconsMap = \"fallBack\";\r\n //if not file, return octet\r\n if (!file) {\r\n result = DEF_GEN_MIME;\r\n if (customIcons?.fallBack)\r\n return { url: customIcons?.fallBack, mimeResume: result };\r\n\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 const customUrl = customIcons?.[result];\r\n if (customUrl !== undefined)\r\n return { url: customUrl, mimeResume: result };\r\n\r\n\r\n return { url: mimeUrlList[result], mimeResume: result };\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 getURLFileIcoFromNameAndType = (\r\n name: string | undefined,\r\n type: string | undefined,\r\n customIcons: IconsMap | undefined\r\n): ResultFileIco => {\r\n\r\n let result: keyof IconsMap = \"octet\";\r\n //if not nam and type, return octet\r\n if (!name) {\r\n result = DEF_GEN_MIME;\r\n if (customIcons?.fallBack)\r\n return { url: customIcons?.fallBack, mimeResume: result };\r\n return { url: mimeUrlList[result], mimeResume: result };\r\n } else {\r\n result = mimeSelector(type);\r\n }\r\n //If plain text\r\n const extention: string = getExt(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 const customUrl = customIcons?.[result];\r\n if (customUrl !== undefined)\r\n return { url: customUrl, mimeResume: result };\r\n\r\n return { url: mimeUrlList[result], mimeResume: result };\r\n}\r\ninterface ResultFileIco {\r\n url: string;\r\n mimeResume: keyof IconsMap;\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 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 fallBack: octet,\r\n};","\r\nimport { UPLOADSTATUS, ServerResponse } from \"../types\";\r\n\r\n/**\r\n * ExtFile === \"Extended File\".\r\n * This object \"extends\" the File Object\r\n */\r\nexport declare type ExtFile = {\r\n /** \r\n * An identifier for the extFile\r\n */\r\n id?: number | string | undefined;\r\n /**\r\n * The file object. Used mostly when user selects or drops files in the client sid.\r\n */\r\n file?: File;\r\n /**\r\n * The name of the file. Used mostly for displaying file data from server.\r\n */\r\n name?: string;\r\n /**\r\n * The type of the file. Used mostly for displaying file data from server.\r\n */\r\n type?: string;\r\n /**\r\n * The size of the file. Used mostly for displaying file data from server.\r\n */\r\n size?: number;\r\n /**\r\n * a flag that determines whether the file is valid, not valid or it is not validated.\r\n */\r\n valid?: boolean;\r\n /**\r\n * The list of errors when the file was validated\r\n */\r\n errors?: string[];\r\n /**\r\n * The current upload status. (e.g. \"uploading\")\r\n */\r\n uploadStatus?: UPLOADSTATUS | undefined;\r\n /**\r\n * A message that shows the result of the upload process\r\n */\r\n uploadMessage?: string;\r\n /**\r\n * Link, URI or string representation of an image\r\n */\r\n imageUrl?: string;\r\n /**\r\n * The XMLHttpRequest object for performing uploads to a server\r\n */\r\n xhr?: XMLHttpRequest;\r\n /**\r\n * The current percentage of upload progress.\r\n * This value will have a higher priority over the upload progress value calculated inside the component.\r\n * @default undefined\r\n */\r\n progress?: number;\r\n /**\r\n * The additional data that will be sent to the server\r\n * when files are uploaded individually\r\n */\r\n extraUploadData?: Record<string, any>;\r\n /**\r\n * Any kind of extra data that could be needed.\r\n */\r\n extraData?: Object;\r\n /**\r\n * The upload response from server\r\n */\r\n serverResponse?: ServerResponse;\r\n /**\r\n * The url to be used to perform a GET request in order to download the\r\n file. If defined, the download icon will be shown.\r\n */\r\n downloadUrl?: string;\r\n /**\r\n * Link, URI, FIle object or string representation of a video\r\n */\r\n videoUrl?: string;\r\n}\r\n\r\n/**\r\n * A class definition for ExtFile.\r\n * This class has the purpose to allow the creation of instances\r\n * of an ExtFile for performing complex operations that cannot be\r\n * accomplished just by using the ExtFile type.\r\n * For instance, it can help in changing the value of some attributes\r\n * across different scopes thanks to memory reference.\r\n */\r\nexport class ExtFileInstance {\r\n /**\r\n * An identifier for the extFile\r\n */\r\n public id?: number | string;\r\n /**\r\n * The file object. Used mostly when user selects or drops files in the client sid.\r\n */\r\n public file?: File;\r\n /**\r\n * The name of the file. Used mostly for displaying file data from server.\r\n */\r\n public name?: string;\r\n /**\r\n * The type of the file. Used mostly for displaying file data from server.\r\n */\r\n public type?: string;\r\n /**\r\n * The size of the file. Used mostly for displaying file data from server.\r\n */\r\n public size?: number;\r\n\r\n public imageUrl?: string;\r\n /**\r\n * A flag that determines whether the file is valid, not valid or it is not validated.\r\n */\r\n public valid?: boolean;\r\n /**\r\n * The list of errors when the file was validated\r\n */\r\n public errors?: string[];\r\n /**\r\n * A message that shows the result of the upload process\r\n */\r\n public uploadMessage?: string;\r\n /**\r\n * The current upload status. (e.g. \"uploading\")\r\n */\r\n public uploadStatus?: UPLOADSTATUS | undefined;\r\n /**\r\n * The current upload progress\r\n */\r\n public progress?: number;\r\n /**\r\n * The XMLHttpRequest object for performing uploads to a server\r\n */\r\n public xhr?: XMLHttpRequest;\r\n /**\r\n * The additional data that will be sent to the server\r\n */\r\n public extraData?: Record<string, any>;\r\n /**\r\n * The additional data that will be sent to the server\r\n * when filesare uploaded individually\r\n */\r\n public extraUploadData?: Record<string, any>;\r\n /**\r\n * The upload response from server\r\n */\r\n public serverResponse?: ServerResponse;\r\n /**\r\n * Url to perform a GET request in order to download the file.\r\n * This action is triggered when download button is clicked or pressed.\r\n * In case onDownload prop is given\r\n */\r\n public downloadUrl?: string;\r\n /**\r\n * Link, URI, FIle object or string representation of a video\r\n */\r\n public videoUrl?: string;\r\n\r\n constructor(extFile: ExtFile) {\r\n const {\r\n id,\r\n file,\r\n name,\r\n size,\r\n type,\r\n imageUrl,\r\n valid,\r\n errors,\r\n uploadMessage,\r\n uploadStatus,\r\n progress,\r\n xhr,\r\n extraData,\r\n extraUploadData,\r\n serverResponse,\r\n downloadUrl, videoUrl\r\n } = extFile;\r\n\r\n this.id = id;\r\n this.file = file;\r\n this.name = name;\r\n this.size = size;\r\n this.type = type;\r\n this.imageUrl = imageUrl;\r\n\r\n this.valid = valid;\r\n this.errors = errors;\r\n this.uploadStatus = uploadStatus;\r\n this.uploadMessage = uploadMessage;\r\n this.progress = progress;\r\n this.xhr = xhr;\r\n\r\n this.extraData = extraData;\r\n this.extraUploadData = extraUploadData;\r\n this.serverResponse = serverResponse;\r\n\r\n this.downloadUrl = downloadUrl;\r\n this.videoUrl = videoUrl;\r\n }\r\n /**\r\n * method under construction\r\n */\r\n /* private static kamuiFile() {\r\n \r\n }\r\n */\r\n /**\r\n * Copies all non undefined attributes from ExtFileInstance to a new ExtFile object\r\n * @param extFileInstance the instance of ExtFile\r\n * @returns an ExtFile object\r\n */\r\n static toExtFile(extFileInstance: ExtFileInstance): ExtFile {\r\n //console.log(\"before toExtFile()\", extFileInstance);\r\n\r\n let extFileClone: ExtFile = {}; // the new empty object\r\n const extFileInstanceKeys = Object.keys(extFileInstance) as [keyof ExtFile];\r\n const extFileInstanceValues = Object.values(extFileInstance) as Array<ExtFile[keyof ExtFile]>;\r\n // let's copy all user properties into it\r\n for (let i = 0; i < extFileInstanceValues.length; i++) {\r\n const currentValue: ExtFile[keyof ExtFile] = extFileInstanceValues[i];\r\n\r\n\r\n const currKey = extFileInstanceKeys[i];\r\n if (currentValue !== undefined) {\r\n\r\n extFileClone[currKey] = currentValue as ExtFile[keyof ExtFile] as never;\r\n }\r\n }\r\n //console.log(\"after toExtFile()\", extFileClone);\r\n //console.log(\"current extFileClone keys\",Object.keys( extFileClone).length);\r\n return extFileClone;\r\n }\r\n /**\r\n * Copies all non undefined attributes from ExtFileInstance to a new ExtFile object.\r\n * @returns an ExtFile object\r\n */\r\n toExtFile(): ExtFile {\r\n return ExtFileInstance.toExtFile(this);\r\n }\r\n\r\n /* static mock = (id?: number): ExtFileInstance => {\r\n return new ExtFileInstance(\r\n extFileMock(id)\r\n );\r\n } */\r\n}\r\n\r\n\r\n","import { ExtFileInstance, ExtFile } from \"./ExtFile\";\r\n\r\nexport class ExtFileManager {\r\n private static nextId: number = 0;\r\n static fileLists: Record<number | string, ExtFileInstance[] | undefined> = {};\r\n /**\r\n * Increases the id counter and returns the next id available.\r\n * @returns the next integer id available\r\n */\r\n public static getNextId(): number {\r\n ExtFileManager.nextId++;\r\n return ExtFileManager.nextId;\r\n }\r\n /**\r\n * Updates a dui file list given an id\r\n * @param id id of the fileList\r\n * @param extFiles list of DuiFiles forinitializing the array\r\n * @returns the id of the fileList\r\n */\r\n public static setFileList(\r\n id: number | string | undefined,\r\n extFilesInstances: ExtFileInstance[]\r\n ): number | string {\r\n if (!id) {\r\n return 0;\r\n } else {\r\n ExtFileManager.fileLists[id] = [...extFilesInstances];\r\n\r\n return id;\r\n }\r\n\r\n }\r\n /**\r\n * Generates a new ID\r\n * @returns the next Id asociated with a DuiFIle list\r\n */\r\n public static createFileListMap(): number {\r\n const nextId: number = ExtFileManager.getNextId();\r\n ExtFileManager.fileLists[nextId] = [];\r\n\r\n return nextId;\r\n }\r\n\r\n /**\r\n * Deletes a list map\r\n * @returns the next Id asociated with a DuiFIle list\r\n */\r\n public static removeFileListMap(id?: number | string): number | string {\r\n if (!id) {\r\n return 0;\r\n } else {\r\n try {\r\n ExtFileManager.fileLists[id] = undefined;\r\n return id;\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"development\")\r\n console.error(\"Error on remove\", error);\r\n return 0;\r\n }\r\n }\r\n }\r\n /**\r\n * \r\n * @param id the id of the dropzone\r\n * @returns \r\n */\r\n public static getExtFileInstanceList(\r\n id?: number | string\r\n ): ExtFileInstance[] | undefined {\r\n try {\r\n if (!id) {\r\n return undefined;\r\n }\r\n return ExtFileManager.fileLists[id];\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"development\")\r\n console.error(\"Error on getExtFileInstanceList\", error);\r\n return undefined;\r\n }\r\n }\r\n /**\r\n * Updates(replaces) the extFile list on preparing stage and returns the new array.\r\n * Removes the non valid files if cleanOnUpload is true and validateFiles is also true\r\n * Then sets on preparing stage all files according to the following creiteria:\r\n * If theuploadStatus is diferent than \"sucess\" AND\r\n * then, update the files on preparing stage. Otherwise keep the extFile props.\r\n * Finally, updates the ExtFileInstance list on ExtFileManager.\r\n * @param dropzoneId the id to access the right list\r\n * @param localFiles the list of extFiles\r\n * @param validateFiles flag that indicates that validation is active or o¿not\r\n * @param cleanOnUpload flag to determine whther to clena the list oof non valid files or not\r\n * @returns a list of ExtFileInstance\r\n */\r\n public static setFileListMapPreparing(\r\n dropzoneId: number | string,\r\n localFiles: ExtFile[],\r\n validateFiles: boolean,\r\n cleanOnUpload: boolean\r\n ): ExtFileInstance[] | undefined {\r\n //console.log(\"setFileListMapPreparing before if\", dropzoneId, localFiles, cleanOnUpload);\r\n\r\n if (!(typeof dropzoneId === \"number\" || typeof dropzoneId === \"string\")) return undefined;\r\n\r\n //console.log(\"setFileListMapPreparing before try\", localFiles, cleanOnUpload);\r\n try {\r\n\r\n let resultExtList: ExtFileInstance[] = [];\r\n\r\n //initializes the extFileLInstance list\r\n let temLocalFiles: ExtFile[] = [...localFiles];\r\n\r\n //remove non valids if cleanOnUpload is true and validateFiles is also true\r\n if (cleanOnUpload && validateFiles) {\r\n // clean on Upload is true, so non valid files must be removed\r\n temLocalFiles = temLocalFiles.filter(extFile => extFile.valid)\r\n //console.log(\"temLocalFiles filter\", temLocalFiles);\r\n }\r\n\r\n //console.log(\"setFileListMapPreparing after remove non valids\", temLocalFiles);\r\n\r\n if (validateFiles) {\r\n // validation flag was set to true, so only valid=true files will be set to \"preparing\"\r\n\r\n //so, only valid files was kept in the temLocalfiles array\r\n //now set the preparing state only for files with uploadStatus !== \"success\"\r\n temLocalFiles =\r\n temLocalFiles\r\n .map(extFile => {\r\n if (extFile.uploadStatus !== \"success\" && extFile.valid) {\r\n return { ...extFile, uploadStatus: \"preparing\" }\r\n } else {\r\n return { ...extFile }\r\n }\r\n });\r\n } else {\r\n // all files will be set to \"preparing\" whether the valid value\r\n // except those files with uploadStatus ===\"success\"\r\n temLocalFiles =\r\n temLocalFiles\r\n .map(extFile => {\r\n if (extFile.uploadStatus !== \"success\") {\r\n return { ...extFile, uploadStatus: \"preparing\" }\r\n } else {\r\n return { ...extFile }\r\n }\r\n });\r\n }\r\n\r\n //console.log(\"setFileListMapPreparing result\", temLocalFiles);\r\n\r\n //converto to Object instances\r\n resultExtList = temLocalFiles.map(F => new ExtFileInstance(F));\r\n //console.log(\"setFileListMapPreparing RESULT resultExtList\", resultExtList);\r\n\r\n const resultSet = ExtFileManager.setFileList(dropzoneId, resultExtList);\r\n //console.log(\"setFileListMapPreparing RESULT resultSet\", resultSet);\r\n\r\n return resultExtList;\r\n // return ExtFileManager.fileLists[dropzoneId];\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"development\")\r\n console.error(\"setFileListMapPreparing Error on get List\", error);\r\n return undefined;\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n /**\r\n * Updates(replaces) the extFile list on preparing stage and returns the new array.\r\n * Removes the non valid files if cleanOnUpload is true and validateFiles is also true\r\n * Then sets on preparing stage all files according to the following creiteria:\r\n * If theuploadStatus is diferent than \"sucess\" AND\r\n * then, update the files on preparing stage. Otherwise keep the extFile props.\r\n * Finally, updates the ExtFileInstance list on ExtFileManager.\r\n * @param dropzoneId the id to access the right list\r\n * @param localFiles the list of extFiles\r\n * @param validateFiles flag that indicates that validation is active or o¿not\r\n * @param cleanOnUpload flag to determine whther to clena the list oof non valid files or not\r\n * @returns a list of ExtFileInstance\r\n */\r\n public static setFileListMapPreparing2(\r\n dropzoneId: number | string,\r\n localFiles: ExtFile[],\r\n validateFiles: boolean,\r\n cleanOnUpload: boolean\r\n ): ExtFileInstance[] | undefined {\r\n\r\n ExtFileManager.setFileList(dropzoneId, localFiles.map(F => new ExtFileInstance({ ...F, uploadStatus: \"preparing\" })));\r\n\r\n return ExtFileManager.getExtFileInstanceList(dropzoneId);\r\n }\r\n\r\n\r\n\r\n /**\r\n * \r\n * @param dropzoneId \r\n * @param index \r\n * @param incommingDuiFile \r\n * @returns \r\n */\r\n /* public static updateFileListMapPreparingById(\r\n dropzoneId: number,\r\n index: number,\r\n incommingDuiFile: ExtFileInstance\r\n ): ExtFileInstance[] | undefined {\r\n if (!(typeof dropzoneId === \"number\") || !(typeof index === \"number\") || index > 0) return undefined;\r\n const extFileList: ExtFileInstance[] | undefined = ExtFileManager.fileLists[dropzoneId];\r\n\r\n if (!(extFileList && extFileList.length > 0)) return undefined;\r\n extFileList[index]=\r\n try {\r\n ExtFileManager.setFileList(dropzoneId, [\r\n ...localFiles.map(\r\n (x) =>\r\n new ExtFileInstance({ ...x, uploadStatus: \"preparing\" })\r\n ),\r\n ]);\r\n return ExtFileManager.fileLists[dropzoneId];\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"development\")\r\n console.error(\"Error on get List\", error);\r\n return undefined;\r\n }\r\n\r\n } */\r\n}","\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}\r\n///////////////////// SHORTCUTS\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/**\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 * An id generator for FileItems\r\n */\r\n export abstract class FileIdGenerator {\r\n static nextId = 0;\r\n /**\r\n * Increases the id counter 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 * Random integer between min (included) and max (excluded)\r\n * @param min the min number\r\n * @param max the max number\r\n * @returns a random number between min (included) and max (excluded)\r\n */\r\nexport function getRandomInt(min: number = 0, max: number = 0): number {\r\n return Math.floor(Math.random() * (max - min)) + min;\r\n}\r\n","/**\r\n * Cleans the input.value attribute\r\n * @param inputElement \r\n */\r\nexport const cleanInput = (inputElement?: HTMLInputElement | null) => {\r\n if (!inputElement) return;\r\n inputElement.value = \"\";\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}","import { getExt } from \"../utils/getExt\";\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\n export 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}","import { ValidateErrorLocalizerSelector } from \"../localization\";\r\nimport { ExtFile, FunctionLabel, Localization, LocalLabels } from \"../types\";\r\nimport { ValidateFileResponse, FileValidatorProps } from \"../types/validation\";\r\nimport { FileIdGenerator } from \"../utils/IdGenerator\";\r\nimport { separateAccept } from \"./separateAccept\";\r\nimport { validateAccept } from \"./validateAccept\";\r\n\r\n/**\r\n * \r\n * @param preValidatedFiles FileList \r\n * @param remainingValids The number of remaining valid files\r\n * @param localValidator \r\n * @param validator \r\n * @param maxFiles \r\n * @param localization \r\n * @returns \r\n */\r\nexport const fileListvalidator = (\r\n preValidatedFiles: FileList,\r\n remainingValids: number,\r\n localValidator: FileValidatorProps,\r\n validator?: ((f: File) => ValidateFileResponse) ,\r\n maxFiles?: number,\r\n localization?: Localization\r\n): ExtFile[] => {\r\n const output: ExtFile[] = [];\r\n //set a countdown when there is a limit on files\r\n let countdown: number = remainingValids;\r\n // get localized labels\r\n const ValidationErrorLocalizer: LocalLabels =\r\n ValidateErrorLocalizerSelector(localization);\r\n //Iterate the File list\r\n for (let i = 0, f: File; (f = preValidatedFiles[i]); i++) {\r\n // Validate the file list with\r\n let validatedFile: ExtFile = validateFile(f, validator, localValidator, ValidationErrorLocalizer);\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 = ValidationErrorLocalizer.maxFileCount as FunctionLabel;\r\n validatedFile.errors = validatedFile.errors\r\n ? [...validatedFile.errors, maxFileErrorMessenger(maxFiles || Infinity)]\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\r\n\r\n/**\r\n * For each ExtFile sets the valid prop of ExtFile to \"true\" or \"false\"\r\n * depending on the result of the individual validation. \r\n * It also add the list of errors.\r\n * @param extFileList \r\n * @param remainingValids \r\n * @param localValidatorProps \r\n * @param validator \r\n * @param maxFiles \r\n * @param localization \r\n * @returns a new ExtFile list with each item validated\r\n */\r\nexport const validateExtFileList = (\r\n extFileList: ExtFile[],\r\n remainingValids: number,\r\n localValidatorProps: FileValidatorProps,\r\n validator?: ((f: File) => ValidateFileResponse) ,\r\n maxFiles?: number,\r\n localization?: Localization\r\n): ExtFile[] => {\r\n //console.log(\"remaning valids\", remainingValids);\r\n let fileListResult: ExtFile[] = [];\r\n if (!remainingValids) return fileListResult;\r\n let remaining: number = remainingValids;\r\n const ValidationErrorLocalizer: LocalLabels =\r\n ValidateErrorLocalizerSelector(localization);\r\n const maxFileErrorMessenger: FunctionLabel = ValidationErrorLocalizer.maxFileCount as FunctionLabel;\r\n for (let i = 0; i < extFileList.length; i++) {\r\n let currentExtFile: ExtFile = extFileList[i];\r\n\r\n currentExtFile = validateExtFile(currentExtFile, validator, localValidatorProps, ValidationErrorLocalizer);\r\n //console.log(\"validateExtFileList after validation\", currentExtFile);\r\n\r\n if (currentExtFile.valid) {\r\n //not valid due to file count limit\r\n const valid = remaining > 0;\r\n currentExtFile.valid = valid;\r\n //add error about amount\r\n if (!valid) {\r\n currentExtFile.errors = currentExtFile.errors\r\n ? [...currentExtFile.errors, maxFileErrorMessenger(maxFiles || Infinity)]\r\n : [maxFileErrorMessenger(maxFiles || Infinity)];\r\n }\r\n remaining--;\r\n }\r\n fileListResult.push(currentExtFile);\r\n\r\n }\r\n return fileListResult;\r\n}\r\n\r\n/**\r\n * \r\n * @param extFile \r\n * @param validator \r\n * @param validatorProps \r\n * @param localErrors \r\n * @returns \r\n */\r\nexport const validateExtFile = (\r\n extFile: ExtFile,\r\n validator: ((f: File) => ValidateFileResponse) | undefined,\r\n validatorProps: FileValidatorProps,\r\n localErrors: LocalLabels\r\n): ExtFile => {\r\n let extFileResult: ExtFile = { ...extFile };\r\n let errors: string[] = [];\r\n //TO-DO: Add extra validation for individual props even if FIle object was not given\r\n if (!extFile.file) {\r\n return { ...extFileResult }\r\n }\r\n\r\n //TO-DO: add \"overrideValidation\" prop to ignore the rest of validators like accept and maxFileSize\r\n if (validator) {\r\n const resultCustomValidation: ValidateFileResponse = validator(extFileResult.file as File);\r\n const { errors: errorsResult } = resultCustomValidation;\r\n if (errorsResult)\r\n errors.push(...errorsResult)\r\n //return { ...extFileResult, ...validator(extFileResult.file as File) };\r\n }\r\n\r\n const { maxFileSize, accept } = validatorProps;\r\n //console.log(\"Validation\", maxFileSize, accept);\r\n //check file size\r\n const file: File = extFile.file;\r\n\r\n\r\n if (maxFileSize && file.size > maxFileSize) {\r\n const maxFileSizeErrorMessenger: FunctionLabel = localErrors.maxSizeError as FunctionLabel;\r\n\r\n //console.log(\"Size error\", maxFileSizeErrorMessenger(maxFileSize));\r\n\r\n errors.push(maxFileSizeErrorMessenger(maxFileSize));\r\n }\r\n //check file type\r\n if (accept && !validateAccept(separateAccept(accept), file)) {\r\n errors.push(localErrors.acceptError as string);\r\n }\r\n const isValid: boolean = errors.length === 0;\r\n extFileResult = { ...extFileResult, valid: isValid, errors: !isValid ? errors : undefined };\r\n //console.log(\"validation extFileResult\", extFileResult);\r\n return extFileResult;\r\n\r\n}\r\n\r\n\r\n\r\n/**\r\n * Function that validate whether a file is valid, or not\r\n * according to the Filevalidator properties\r\n * @param file a File object to be evaluated\r\n * @param validatorProps the validator object \r\n * @returns a FileValidated object\r\n */\r\nexport const validateFile = (\r\n file: File,\r\n validator: undefined | ((f: File) => ValidateFileResponse),\r\n validatorProps: FileValidatorProps,\r\n localErrors: LocalLabels\r\n): ExtFile => {\r\n\r\n const idGenerated = FileIdGenerator.getNextId();\r\n let errors: string[] = [];\r\n if (validator) {\r\n return { id: idGenerated, file, ...validator(file) };\r\n }\r\n\r\n const { maxFileSize, accept } = validatorProps;\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: ExtFile = {\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\n * list of dumy errors in english\r\n */\r\nexport const listOfErrors: string[] =\r\n [\r\n \"File is too big. Max file size allowed is 80mb.\",\r\n \"File's type is not allowed.\",\r\n \"Max amount of files (28) has been reached.\"\r\n ];","export default function addExtraData(\r\n formData: FormData,\r\n extraData: Record<string, string> | undefined\r\n) {\r\n //headers\r\n const extraDataKeys: string[] = Object.keys(extraData || {});\r\n //const headerValues: string[] = Object.values(headers);\r\n for (let i = 0; i < extraDataKeys.length && extraData; i++) {\r\n //console.log(\"uploadFile extraData\", extraDataKeys[i], extraData[extraDataKeys[i]]);\r\n formData.append(extraDataKeys[i], extraData[extraDataKeys[i]]);\r\n }\r\n\r\n formData.append(\"otherValue\", \"HAAAAAAAAAAAAAAa\");\r\n\r\n}","export default function addHeaders(\r\n xhr: XMLHttpRequest,\r\n headers: Record<string, string> | undefined\r\n) {\r\n //headers\r\n const headerKeys: string[] = Object.keys(headers || {});\r\n //const headerValues: string[] = Object.values(headers);\r\n for (let i = 0; i < headerKeys.length && headers; i++) {\r\n //console.log(\"uploadFile headers\", headerKeys[i], headers[headerKeys[i]]);\r\n xhr.setRequestHeader(\r\n headerKeys[i],\r\n headers[headerKeys[i]]\r\n );\r\n }\r\n\r\n\r\n}","import { ExtFile, UploadResponse } from \"../types\";\r\n\r\nexport const TIMEOUT_ERROR_RESPONSE = {\r\n success: false,\r\n message: \"Timeout error\",\r\n payload: {}\r\n};\r\nexport const ABORTED_ERROR_RESPONSE = {\r\n success: false,\r\n message: \"Upload aborted\",\r\n payload: {}\r\n}\r\nexport const JSON_PARSE_ERROR_RESPONSE = {\r\n success: false,\r\n message: \"Error when parsing JSON response\",\r\n payload: {}\r\n}\r\n\r\nexport const UNEXPECTED_ERROR_RESPONSE = {\r\n success: false,\r\n message: \"Unexpected error\",\r\n payload: {}\r\n}\r\n\r\nexport const NO_XHR_PROVIDED_ERROR = (extFile: ExtFile): ExtFile => {\r\n return {\r\n\r\n ...extFile,\r\n uploadMessage: \"Unable to upload. xhr object was not provided\",\r\n uploadStatus: \"error\",\r\n\r\n serverResponse: { success: false, }\r\n }\r\n}","import { ExtFile, ServerResponse, UploadResponse } from \"../types\";\r\nimport { JSON_PARSE_ERROR_RESPONSE } from \"./errors.upload\";\r\n\r\nexport const makeServerResponse = (success: any, message: string, payload: any): ServerResponse => {\r\n const result: ServerResponse = { success: success, message: message, payload: payload } as ServerResponse;\r\n return result;\r\n}\r\nexport const JsonParseResponse = (xhr: XMLHttpRequest): ServerResponse => {\r\n try {\r\n const jsonResponse = JSON.parse(xhr.response);\r\n const success: any = jsonResponse.success;\r\n const message: string = jsonResponse.message;\r\n const payload: any = jsonResponse.payload;\r\n\r\n const fuiResponse: ServerResponse = {\r\n success: typeof success === \"boolean\" ? success : false,\r\n message: typeof message === \"string\" ? message : \"Error on message response\",\r\n payload: payload || {}\r\n }\r\n return fuiResponse\r\n } catch (error) {\r\n //console.log(\"FuiUpload ERROR\", error);\r\n return JSON_PARSE_ERROR_RESPONSE;\r\n }\r\n}\r\n\r\n\r\n\r\nexport const makeSuccessUploadResponse = (\r\n extFile: ExtFile,\r\n responseFui: ServerResponse\r\n): ExtFile => {\r\n return {\r\n ...extFile,\r\n serverResponse: responseFui,\r\n uploadMessage: responseFui.message,\r\n uploadStatus: \"success\"\r\n\r\n }\r\n}\r\n\r\n\r\nexport const makeErrorUploadResponse = (\r\n extFile: ExtFile,\r\n responseFui: ServerResponse\r\n): ExtFile => {\r\n //console.log(\"makeErrorUploadResponse\", extFile, responseFui);\r\n return {\r\n ...extFile,\r\n uploadMessage: responseFui.message,\r\n uploadStatus: \"error\", \r\n serverResponse: responseFui,\r\n }\r\n}\r\n\r\n","import { ExtFile, Method, UPLOADSTATUS } from \"../types\";\r\nimport { ServerResponse, UploadResponse } from \"../types/uploadTypes\";\r\nimport addExtraDataUpload from \"./addExtraData.upload\";\r\nimport addHeaders from \"./addheaders.upload\";\r\nimport { ABORTED_ERROR_RESPONSE, NO_XHR_PROVIDED_ERROR, TIMEOUT_ERROR_RESPONSE, UNEXPECTED_ERROR_RESPONSE } from \"./errors.upload\";\r\nimport { JsonParseResponse, makeErrorUploadResponse, makeSuccessUploadResponse } from \"./response.upload\";\r\nimport { completeUploadResult, unableToUploadResult } from \"./utils.upload\";\r\n\r\n\r\n/**\r\n * Uploads one formData object to a given endpoint in a promisified way\r\n * @param xhr XMLHTTPrequest object\r\n * @param method method for uploading\r\n * @param endpoint endpoint to upload the file\r\n * @param data FromData object to perform multipart form data upload\r\n * @param headers the set of headers\r\n * @returns a server response that consists on {status, payload, message}\r\n */\r\nexport const uploadFormData = (\r\n xhr: XMLHttpRequest,\r\n method: Method | undefined = \"POST\",\r\n endpoint: string,\r\n data: FormData,\r\n headers: Record<string, string> | undefined\r\n) => {\r\n return new Promise<ServerResponse>((resolve, reject) => {\r\n //console.log(\"Fui_uploadFormData uploadFile\", xhr, method, endpoint, data, headers);\r\n\r\n const finalMethod: Method = [\"POST\", \"PUT\", \"PATCH\"].includes(method.toUpperCase()) ? method : \"POST\";\r\n\r\n let lastLastState: number = -1;\r\n let lastState: number = 0;\r\n let jumped: boolean = false;\r\n\r\n xhr.upload.onload = () => {\r\n //console.log(\"Fui_uploadFormData uploadFile onLoad\", xhr.readyState, xhr.response);\r\n };\r\n xhr.upload.ontimeout = () => resolve(TIMEOUT_ERROR_RESPONSE);\r\n xhr.upload.onabort = () => {\r\n //console.log(\"Fui_uploadFormData ABORTEEEEDDDD\");\r\n resolve(ABORTED_ERROR_RESPONSE);\r\n };\r\n xhr.onloadend = async (e) => {\r\n //console.log(\"onloadend loaded\", e.loaded);\r\n //console.log(\"onloadend total\", e.total);\r\n //console.log(\"onloadend lengthComputable\", e.lengthComputable);\r\n\r\n }\r\n // listen for `progress` event\r\n //currently listening on FileItem component hook\r\n xhr.onreadystatechange = async (e) => {\r\n //console.log(\"Finished\", xhr);\r\n\r\n //console.log(\"Fui_uploadFormData uploadFile onreadystatechange e.type\", e.type);\r\n //console.log(\"Fui_uploadFormData uploadFile onreadystatechange\", xhr.readyState, xhr.response);\r\n\r\n lastLastState = lastState;\r\n lastState = xhr.readyState;\r\n\r\n if (xhr.readyState === 4) {\r\n if (xhr.response !== \"\") {\r\n //there is th answer\r\n resolve(JsonParseResponse(xhr));\r\n } else {\r\n //error unexpected\r\n // console.log(\"Fui_uploadFormData EMPTY status\", xhr.status);\r\n // console.log(\"Fui_uploadFormData EMPTY readyState\", xhr.readyState);\r\n // console.log(\"Fui_uploadFormData EMPTY upload\", xhr.upload);\r\n //console.log(\"Fui_uploadFormData EMPTY abort\", xhr.abort);\r\n //const jumped = lastLastState - lastLastState !== 1;\r\n resolve(ABORTED_ERROR_RESPONSE);\r\n\r\n }\r\n } else {\r\n //console.log(\"Fui_uploadFormData FuiUpload NOT YET\" + xhr.readyState);\r\n }\r\n };\r\n // open request\r\n xhr.open(finalMethod, endpoint, true);\r\n\r\n //add header to request\r\n addHeaders(xhr, headers);\r\n //start uploading\r\n xhr.send(data);\r\n });\r\n\r\n};\r\n\r\n/**\r\n * \r\n * @param file the extended file to be uploaded\r\n * @param url the endpoint\r\n * @param method the method for uploading\r\n * @param headers headers for request\r\n * @returns \r\n */\r\nexport const uploadExtFile = async (\r\n extFile: ExtFile,\r\n url: string,\r\n method?: Method,\r\n headers?: Record<string, string>,\r\n uploadLabel?: string,\r\n): Promise<ExtFile> => {\r\n return new Promise(async (resolve, reject) => {\r\n try {\r\n const uploader: XMLHttpRequest | undefined = extFile.xhr;\r\n\r\n if (!uploader) {\r\n resolve(NO_XHR_PROVIDED_ERROR(extFile));\r\n return;\r\n }\r\n\r\n const localMethod: Method = method || \"POST\";\r\n const fileToUpload: File = extFile.file as File;\r\n\r\n const formData = new FormData();\r\n\r\n formData.append(uploadLabel || \"file\", fileToUpload);\r\n\r\n // add extra data to upload\r\n const finalExtraData: Record<string, any> =\r\n { otherValue: \"other valueee haaaa\", param2: { tecnica: \"KIKOHUUUU\", friend: \"Chaos\", age: 25 }, ...extFile.extraUploadData };\r\n\r\n addExtraDataUpload(formData, finalExtraData);\r\n //console.log(\"FORMDATA\", formData);\r\n\r\n let responseFui: ServerResponse;\r\n responseFui = await uploadFormData(\r\n uploader,\r\n localMethod,\r\n url,\r\n formData,\r\n headers || {});\r\n\r\n if (responseFui.success) {\r\n // status is true\r\n resolve(makeSuccessUploadResponse(extFile, responseFui));\r\n } else {\r\n // status is false\r\n resolve(makeErrorUploadResponse(extFile, responseFui));\r\n }\r\n } catch (error) {\r\n // on error\r\n //console.log(\"uploadPromiseXHR uploadPromiseXHR ERROR\", error);\r\n resolve(\r\n makeErrorUploadResponse(extFile, UNEXPECTED_ERROR_RESPONSE)\r\n );\r\n }\r\n });\r\n};\r\n\r\n\r\n\r\n\r\nexport function uploadFile(\r\n file: File,\r\n url: string,\r\n method?: Method,\r\n label?: string,\r\n headers?: Record<string, string>\r\n): Promise<ServerResponse> {\r\n return new Promise(async (resolve, reject) => {\r\n\r\n\r\n //start uploading\r\n const formData = new FormData();\r\n\r\n formData.append(label || \"file\", file);\r\n\r\n try {\r\n const serverResponse: ServerResponse = await uploadFormData(new XMLHttpRequest(), method, url, formData, headers);\r\n resolve(serverResponse);\r\n } catch (error) {\r\n // on error\r\n //console.log(\"uploadPromiseXHR uploadPromiseXHR ERROR\", error);\r\n resolve(UNEXPECTED_ERROR_RESPONSE);\r\n }\r\n });\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * @deprecated\r\n * Uploads one formData object to a given endpoint in a promisified way\r\n * @param xhr XMLHTTPrequest object\r\n * @param method method for uploading\r\n * @param endpoint endpoint to upload the file\r\n * @param data FromData object to perform multipart form data\r\n * @param headers the set of headers\r\n * @returns a dui server response that consists on {success, payload, message}\r\n */\r\nexport const FuiUpload = (\r\n xhr: XMLHttpRequest,\r\n method: Method,\r\n endpoint: string,\r\n data: FormData,\r\n headers: Record<string, string>\r\n) => {\r\n return new Promise<ServerResponse>((resolve, reject) => {\r\n //console.log(\"FuiUpload params\", xhr, method, endpoint, data, headers);\r\n\r\n xhr.upload.onload = () => {\r\n //console.log(\"FuiUpload onLoad\", xhr.readyState, xhr.response);\r\n };\r\n\r\n xhr.upload.ontimeout = () => resolve(TIMEOUT_ERROR_RESPONSE);\r\n xhr.upload.onabort = () => resolve(ABORTED_ERROR_RESPONSE);\r\n\r\n // listen for `progress` event\r\n //currently listening on FileMosaic component hook\r\n\r\n xhr.onreadystatechange = async (e) => {\r\n //console.log(\"Finished\", xhr);\r\n //console.log(\"FuiUpload onreadystatechange\", xhr.readyState, xhr.response, xhr);\r\n\r\n if (xhr.readyState === 4) {\r\n if (xhr.response !== \"\") {\r\n //there is th answer\r\n resolve(JsonParseResponse(xhr));\r\n } else {\r\n //error unexpected\r\n resolve(UNEXPECTED_ERROR_RESPONSE);\r\n }\r\n } else {\r\n //console.log(\"FuiUpload NOT YET\" + xhr.readyState);\r\n }\r\n };\r\n // open request\r\n xhr.open(method, endpoint, true);\r\n const headerKeys: string[] = Object.keys(headers);\r\n //const headerValues: string[] = Object.values(headers);\r\n for (let i = 0; i < headerKeys.length; i++) {\r\n //console.log(\"FuiUpload headers\", headerKeys[i], headers[headerKeys[i]]);\r\n xhr.setRequestHeader(\r\n headerKeys[i],\r\n headers[headerKeys[i]]\r\n );\r\n }\r\n //start uploading\r\n xhr.send(data);\r\n });\r\n\r\n};\r\n\r\n\r\n","import { NamedColor } from \"../types/NamedColor\";\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\nexport const NAMED_COLORS: NamedColor =\r\n{\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}","import { NAMED_COLORS } from \"./namedColors\";\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\nexport const darkerColor = (colorInput: string, percentage = 25): string => {\r\n let darkedColor = \"\";\r\n const reduce = (100 - percentage) / 100;\r\n let component1: number = 0;\r\n let component2: number = 0;\r\n let component3: number = 0;\r\n if (isHexColor(colourNameToHex(colorInput))) {\r\n\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\r\n darkedColor = `rgb(${component1 * reduce}, ${component2 * reduce},${component3 * reduce})`;\r\n } else {\r\n if (colorInput.includes(\"rgba\")) {\r\n let slicer = colorInput.replace(\"rgba(\", \"\");\r\n let components: string[] = 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 } else if (colorInput.includes(\"rgb\")) {\r\n\r\n let slicer = colorInput.replace(\"rgb(\", \"\");\r\n let components: string[] = 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\r\n return darkedColor;\r\n}\r\n/**\r\n * Make the color into a brighted color\r\n * @param colorInput \r\n * @returns the brighted color \r\n */\r\nexport const brighterColor = (colorInput: string, percentage = 25): string => {\r\n let brightedColor = \"\";\r\n const increase = (100 + percentage) / 100;\r\n let component1: number = 0;\r\n let component2: number = 0;\r\n let component3: number = 0;\r\n if (isHexColor(colourNameToHex(colorInput))) {\r\n\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\r\n brightedColor = `rgb(${component1 * increase}, ${component2 * increase},${component3 * increase})`;\r\n } else {\r\n if (colorInput.includes(\"rgba\")) {\r\n let slicer = colorInput.replace(\"rgba(\", \"\");\r\n let components: string[] = slicer.split(\",\");\r\n brightedColor = `rgb(${parseInt(components[0], 10) * increase}, ${parseInt(components[1], 10) * increase},${parseInt(components[2], 10) * increase})`;\r\n //return darkedColor;\r\n } else if (colorInput.includes(\"rgb\")) {\r\n\r\n let slicer = colorInput.replace(\"rgb(\", \"\");\r\n let components: string[] = slicer.split(\",\");\r\n brightedColor = `rgb(${parseInt(components[0], 10) * increase}, ${parseInt(components[1], 10) * increase},${parseInt(components[2], 10) * increase})`;\r\n // return darkedColor;\r\n }\r\n }\r\n\r\n return brightedColor;\r\n}\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\nexport const hexColorToRGB = (colorInput: string | undefined, perc = 0, defaultColor?: string): string => {\r\n let resultDefault: string = 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 const color: string = colorInput.toUpperCase();\r\n // is already a rgba color\r\n if (color.includes(\"RGBA\")) {\r\n return color;\r\n }\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\r\n // if is a hex color or named color\r\n if (!isHexColor(colourNameToHex(color))) {\r\n return resultDefault;\r\n }\r\n let resultOk: string = \"\";\r\n //let strVar: string = \"\";\r\n let component1: number = 0;\r\n let component2: number = 0;\r\n let component3: number = 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/**\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\nexport const isHexColor = (colorInput: string): boolean => {\r\n\r\n // if first element is no '#' return default background color\r\n if (colorInput.charAt(0) !== '#') {\r\n\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\r\n\r\n return false;\r\n }\r\n // if one of the letters is not included in hex array return default\r\n for (let i = 1; i < colorInput.length; i++) {\r\n if (!hexArray.includes(colorInput.charAt(i))) {\r\n\r\n\r\n return false;\r\n }\r\n }\r\n\r\n return true;\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\nexport function colourNameToHex(colour: string | undefined): string {\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 (NAMED_COLORS[colour.toLocaleLowerCase()] !== undefined) {\r\n return NAMED_COLORS[colour.toLocaleLowerCase()];\r\n }\r\n /**\r\n * When the named color was not found\r\n */\r\n\r\n return colour;\r\n}\r\n\r\n/**\r\n * hexArray & decArray\r\n * \r\n * arrays of numbers used to convert hexadecimal numbers into decimal and viceversa\r\n */\r\nconst hexArray = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];\r\nconst decArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];\r\n\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\nexport const hexTodec = (letter: string): number => {\r\n if (hexArray.includes(letter)) {\r\n return decArray[hexArray.indexOf(letter)];\r\n } else {\r\n return 0;\r\n }\r\n}\r\n\r\n\r\n/** \r\n * Asure a base color. 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\nexport const asureColor = (color?: string): string => {\r\n if (color !== undefined && color !== \"\") {\r\n return color;\r\n } else {\r\n return DEFAULT_FONT_COLOR;\r\n }\r\n}\r\n/** \r\n * Asure a base color. 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\nexport const completeAsureColor = (color?: string, perc = 1): string => {\r\n\r\n return hexColorToRGB(asureColor(colourNameToHex(color)), perc);\r\n\r\n}\r\n\r\n\r\n\r\nexport const DEFAULT_FONT_COLOR = \"#646c7f\";","/**\r\n * If className is given, adds class name in string format to a base class name\r\n * @param baseClassName the base class name\r\n * @param className the class name to be added\r\n * @returns a new class name obtained by adding the second paramater\r\n */\r\nexport const addClassName = (\r\n baseClassName: string,\r\n className: string | undefined\r\n): string => {\r\n if (className)\r\n return `${baseClassName} ${className}`;\r\n return baseClassName;\r\n}","\r\nimport { ExtFile, ExtFileInstance, ServerResponse, UploadResponse, UPLOADSTATUS } from \"../types\"\r\n\r\nexport const unexpectedErrorUploadResult = (extFile: ExtFile): ExtFile => {\r\n return {\r\n ...extFile,\r\n uploadMessage: \"Unexpected error\",\r\n uploadStatus: \"error\",\r\n serverResponse: {\r\n success: false,\r\n message: \"Error on upload: unexpected error \",\r\n payload: {},\r\n }\r\n }\r\n}\r\nexport const unableToUploadResult = (\r\n extFile: ExtFile\r\n): UploadResponse => {\r\n return {\r\n id: extFile.id,\r\n uploadedFile: {\r\n ...extFile,\r\n uploadMessage: \"Unable to upload. XHR was not provided\",\r\n uploadStatus: \"error\"\r\n },\r\n serverResponse: {\r\n success: false,\r\n message: \"Error on upload: Unable to upload. XHR was not provided \",\r\n payload: {},\r\n }\r\n }\r\n}\r\nexport const completeUploadResult = (\r\n extFile: ExtFile,\r\n serverResponse: ServerResponse,\r\n uploadStatusresult: UPLOADSTATUS\r\n): UploadResponse => {\r\n return {\r\n id: extFile.id,\r\n uploadedFile: {\r\n ...extFile,\r\n uploadMessage: serverResponse.message,\r\n uploadStatus: uploadStatusresult\r\n },\r\n serverResponse: serverResponse\r\n }\r\n}\r\n\r\n/**\r\n * Initializes the xhr attribute for performing uploads\r\n * @param extFileList the list of extended files\r\n * @returns the array of extFiles with the xhr attribute initialized\r\n */\r\nexport const toUploadableExtFileList = (\r\n extFileList: ExtFile[] | ExtFileInstance[]\r\n): ExtFile[] => {\r\n if (!extFileList) return [];\r\n return extFileList.map(extFile => {\r\n return { ...extFile, xhr: new XMLHttpRequest() }\r\n });\r\n}\r\n\r\n/**\r\n * Updates the uploadStatus of the given extFile \r\n * from \"preparing\" to \"uploading\"\r\n * @param extFile the extended file\r\n * @returns the extended file with uploadStatus updated to \"uploading\"\r\n */\r\nexport const instantPreparingToUploadOne = (\r\n extFile: ExtFileInstance | ExtFile\r\n): ExtFileInstance | ExtFile => {\r\n if (extFile.uploadStatus === \"preparing\") {\r\n //for ExtFile instance\r\n extFile.uploadStatus = \"uploading\";\r\n //for ExtFile type\r\n return {\r\n ...extFile,\r\n uploadStatus: \"uploading\",\r\n };\r\n }\r\n return extFile;\r\n};\r\n\r\n/**\r\n * \r\n * @param extFile the extended file\r\n * @returns \r\n */\r\nexport const preparingToUploadOne = (\r\n extFile: ExtFileInstance | ExtFile\r\n): Promise<ExtFileInstance | ExtFile> => {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n if (extFile.uploadStatus === \"preparing\") {\r\n //for ExtFile instance\r\n extFile.uploadStatus = \"uploading\";\r\n //for ExtFile type\r\n resolve({\r\n ...extFile,\r\n uploadStatus: \"uploading\",\r\n });\r\n } else\r\n resolve(extFile);\r\n }, 1500);\r\n });\r\n};\r\n/**\r\n * Sleeps for 1200 miliseconds for showing a better transition\r\n * on uploading\r\n * @param time the time to sleep in miliseconds\r\n * @returns true is everything is ok\r\n */\r\nexport const sleepTransition = (time = 1500\r\n): Promise<boolean> => {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve(true);\r\n }, time);\r\n });\r\n}\r\n/**\r\n * Removes the deleted files and updates the aborted ones with a message\r\n * @param arrExtFile incomming arr of extFle instances\r\n * @returns an array of ExtFle objects\r\n */\r\nexport const sanitizeArrExtFile = (arrExtFile: ExtFileInstance[]): ExtFile[] => {\r\n \r\n return arrExtFile.filter((extFileInstance: ExtFileInstance) =>\r\n !extFileInstance.extraData?.deleted)\r\n\r\n .map((extFileInstance: ExtFileInstance) => {\r\n if (extFileInstance.uploadStatus === \"aborted\"\r\n && !extFileInstance.uploadMessage) {\r\n // TO-DO: ad localization for this message\r\n extFileInstance.uploadMessage = \"Upload aborted by user\";\r\n //extFileInstance.uploadStatus = \"error\";\r\n }\r\n return ExtFileInstance.toExtFile(extFileInstance) as ExtFile\r\n });\r\n}\r\n/**\r\n * \r\n * @param extFileInstance \r\n * @param extFileobj \r\n */\r\nexport const setNextUploadStatus = (\r\n extFileInstance: ExtFileInstance,\r\n extFileobj: ExtFile) => {\r\n\r\n const prevStatus: UPLOADSTATUS | undefined = extFileInstance.uploadStatus;\r\n const nextStstaus: UPLOADSTATUS | undefined = extFileobj.uploadStatus;\r\n\r\n //console.log(\"setNextUploadStatus\", prevStatus, nextStstaus);\r\n //console.log(\"setNextUploadStatus\", extFileInstance.uploadMessage, extFileobj.uploadMessage);\r\n if (\r\n prevStatus === \"preparing\" &&\r\n [\"aborted\", undefined].includes(nextStstaus)\r\n ) {\r\n extFileInstance.uploadStatus = undefined;\r\n extFileInstance.uploadMessage = extFileobj.uploadMessage;\r\n\r\n } else if (\r\n prevStatus === \"uploading\" &&\r\n [\"aborted\", undefined].includes(nextStstaus)\r\n ) {\r\n extFileInstance.uploadStatus = \"aborted\";\r\n extFileInstance.uploadMessage = extFileobj.uploadMessage;\r\n\r\n }\r\n\r\n}\r\n\r\n","import { Method } from \"./method\"\r\n\r\nexport type UploadConfig = {\r\n /**\r\n * The url endpoint to upload the file.\r\n * e.g. https://www.myasomwbackend/uploads/file\r\n */\r\n url?: string;\r\n /**\r\n * upload method, can be POST | PUT | PATCH\r\n * @default \"POST\"\r\n */\r\n method?: Method;\r\n /**\r\n * Request headers for http request.\r\n * e.g.\r\n * ```jsx\r\n * headers = { \r\n * \"content-type\": \"multipart/form-data\",\r\n * Authorization: \"Bearer YOUR_BEARER_TOKEN_GOES_HERE\",\r\n * } \r\n * ```\r\n */\r\n headers?: Record<string, string>;\r\n /**\r\n * the label to use in request\r\n * On server this must be the label to get the file.\r\n * @default \"file\"\r\n */\r\n uploadLabel?: string;\r\n /**\r\n * Flag for indicating whther to remove the non-valid files\r\n * before starting the upload process.\r\n * This flag is valid only if validation is enable\r\n */\r\n cleanOnUpload?: boolean;\r\n /**\r\n * If true, onDrop event or file selection not only will make Dropzone to return the list of files, but also\r\n * it will start the upload stage for the files if at least url was set\r\n * By default is false\r\n */\r\n autoUpload?: boolean;\r\n /**\r\n * The time that will last the \"preparing\" stage\r\n * By default is 1500 miliseconds = 1.5 seconds\r\n */\r\n preparingTime?: number;\r\n /**\r\n * A message to show in the footer when the uploading process takes place.\r\n */\r\n uploadingMessage?: string;\r\n}\r\n\r\nexport const createUploadConfig = (\r\n url?: string,\r\n method?: Method,\r\n headers?: Record<string, string>,\r\n uploadLabel?: string,\r\n cleanonUpload?: boolean\r\n) => {\r\n return {\r\n url,\r\n method,\r\n headers,\r\n uploadLabel,\r\n cleanonUpload\r\n }\r\n}","import { createSyntheticFile } from \"../synthetic-file\"\r\nimport { ExtFile } from \"../types\"\r\nimport { FileIdGenerator } from \"../utils\"\r\nimport { listOfErrors } from \"../validation\"\r\n\r\nexport const extFileMock = (id?: number): ExtFile => {\r\n return {\r\n id: id || FileIdGenerator.getNextId(),\r\n name: \"fileName.ext\",\r\n size: 28 * 1024 * 1024,\r\n type: \"files-ui/mock\",\r\n file: createSyntheticFile(\"fileName.ext\", 28 * 1024 * 1024, \"files-ui/mock\"),\r\n errors: listOfErrors,\r\n uploadMessage: \"uploaded\",\r\n uploadStatus: \"preparing\",\r\n valid: false,\r\n progress: 28,\r\n xhr: new XMLHttpRequest(),\r\n extraData: {\r\n extraData1: \"files-ui is the best\",\r\n extraData2: {\r\n id: 1,\r\n name: \"files-ui.mock\"\r\n },\r\n deleted: true\r\n },\r\n downloadUrl: \"https://www.files-ui.com/mock/file-download\"\r\n }\r\n}","import { ExtFile, ExtFileInstance, ExtFileManager } from \"../types\";\r\n\r\nexport const extFileReconcilation = (\r\n dropzoneId: number | string | undefined,\r\n extFileIncomming: ExtFile[]\r\n): ExtFile[] | undefined => {\r\n let result: ExtFile[] = [];\r\n\r\n let arrOfExtFiles: ExtFileInstance[] | undefined =\r\n ExtFileManager.getExtFileInstanceList(dropzoneId);\r\n\r\n // continue only if arrOfExtFiles exists\r\n if (arrOfExtFiles) {\r\n //different sizes means there was deleted files\r\n //also can be new files to be uploaded\r\n //needed an extra flag to allow add files in the middle of uploading process\r\n // if new files are added, they are added to the Manager\r\n // outside they were already added to the UI\r\n // inside Dropzone, will be needed a .next() method for manager\r\n\r\n // 1st allow deleted files and ignore new ones\r\n // reduce the arrOfExtFileInstances array\r\n // parecido a listas ligadas, iterar hasta encontrar null XD\r\n let incommingTemp: ExtFile[] = [...extFileIncomming];\r\n incommingTemp = incommingTemp.filter(\r\n (F) => arrOfExtFiles?.findIndex(I => I.id === F.id) === -1\r\n );\r\n\r\n //console.log(\"reconciliation incommingTemp\", incommingTemp);\r\n \r\n\r\n //different sizes not allowed\r\n if (arrOfExtFiles.length !== extFileIncomming.length || extFileIncomming.length === 0) {\r\n return undefined;\r\n }\r\n for (let i = 0; i < arrOfExtFiles.length; i++) {\r\n if (\r\n (extFileIncomming[i].uploadStatus === undefined)\r\n &&\r\n (arrOfExtFiles[i].uploadStatus === \"preparing\")\r\n ) {\r\n //console.log(\"useDropzoneFileListUpdater onCancel i\", i);\r\n arrOfExtFiles[i].uploadStatus = undefined;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n}","\r\nimport { DropzoneLocalizerSelector } from \"../localization\";\r\nimport { ExtFile, ExtFileInstance, UploadResponse } from \"../types\";\r\n\r\n/**\r\n * Updates a extFile and sets its uploadStatus to \"uploading\"\r\n * @param extFile the extended file object\r\n * @returns the extended file with the uploadStatus attribute modified\r\n */\r\nexport const setPrepToUploading = (\r\n extFile: ExtFile\r\n): Promise<ExtFile> => {\r\n //console.log(\"prepToUpload One\", extFile);\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve({\r\n ...extFile,\r\n uploadStatus: \"uploading\",\r\n });\r\n }, 1500);\r\n\r\n });\r\n};\r\n/**\r\n * Updates a extFile and sets its uploadStatus to \"success\"\r\n * @param extFile the extended file object\r\n * @returns the extended file with the uploadStatus attribute modified\r\n */\r\nexport const uploadOne = (\r\n extFile: ExtFile\r\n): Promise<ExtFile> => {\r\n //console.log(\"upload One\", extFile);\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve({\r\n ...extFile,\r\n uploadStatus: \"success\",\r\n });\r\n }, 2000);\r\n });\r\n};\r\n/**\r\n * Awaits the given time before start uploading\r\n * @param preparingTime the time in miliseconds, by default it will wait 1.5 secs\r\n * @returns an empty object\r\n */\r\nexport const sleepPreparing = (\r\n preparingTime: number = 5000\r\n): Promise<void> => {\r\n //console.log(\"uploadfiles preparingTime One\", preparingTime);\r\n return new Promise((resolve, reject) => {\r\n\r\n setTimeout(() => {\r\n resolve();\r\n }, preparingTime);\r\n\r\n });\r\n}\r\n\r\n/**\r\n * \r\n * @param extFileInstance \r\n * @returns \r\n */\r\nexport const prepToUploadOne = (\r\n extFileInstance: ExtFileInstance | ExtFile\r\n): Promise<ExtFileInstance | ExtFile> => {\r\n //console.log(\"prepToUpload One\", extFileInstance);\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n extFileInstance.uploadStatus = \"uploading\";\r\n resolve({\r\n ...extFileInstance,\r\n uploadStatus: \"uploading\",\r\n });\r\n }, 1500);\r\n\r\n });\r\n};\r\n\r\n/**\r\n * \r\n * @param extFileInstance \r\n * @returns \r\n */\r\nexport const uploadOneExtFile = (\r\n extFileInstance: ExtFileInstance\r\n): Promise<Object> => {\r\n //console.log(\"upload One\", extFileInstance);\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n extFileInstance.uploadStatus = \"success\";\r\n resolve({\r\n ...extFileInstance,\r\n uploadStatus: \"success\",\r\n });\r\n }, 2000);\r\n });\r\n};\r\n\r\n\r\n/**\r\n * \r\n * @param extFile the extFile to upload \r\n * @param DropzoneLocalizer the localization\r\n * @returns a duiUploadResponse object that describes the result\r\n */\r\nexport const fakeFuiUpload = (\r\n extFileInstance: ExtFileInstance,\r\n DropzoneLocalizer = DropzoneLocalizerSelector(\"EN-en\")\r\n): Promise<ExtFile> => {\r\n \r\n const extFile:ExtFile = extFileInstance.toExtFile();\r\n \r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n const randomNumber: number = Math.floor(Math.random() * 10);\r\n if (randomNumber % 2 === 0) {\r\n const success = true;\r\n const message = DropzoneLocalizer.fakeuploadsuccess as string;\r\n const payload = { url: \"\" };\r\n resolve({\r\n ...extFile,\r\n serverResponse: { success, message, payload },\r\n uploadStatus: \"success\",\r\n uploadMessage: message,\r\n\r\n });\r\n } else {\r\n const success = false;\r\n const message = DropzoneLocalizer.fakeUploadError as string;\r\n const payload = {};\r\n resolve({\r\n ...extFile,\r\n serverResponse: { success, message, payload },\r\n uploadStatus: \"error\",\r\n uploadMessage: message,\r\n });\r\n }\r\n }, 1700);\r\n });\r\n};\r\n\r\n\r\n/**\r\n * \r\n * @param extFile the extFile to upload \r\n * @param DropzoneLocalizer the localization\r\n * @returns a duiUploadResponse object that describes the result\r\n */\r\nexport const fakeFuiUploadExtFile = (\r\n extFileInstance: ExtFileInstance,\r\n DropzoneLocalizer = DropzoneLocalizerSelector(\"EN-en\")\r\n): Promise<UploadResponse> => {\r\n \r\n const extFile:ExtFile = extFileInstance.toExtFile();\r\n \r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n const randomNumber: number = 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\r\n resolve({\r\n id: extFile.id,\r\n serverResponse: { status, message, payload },\r\n uploadedFile: {\r\n ...extFile,\r\n uploadStatus: \"success\",\r\n uploadMessage: message,\r\n progress: 100\r\n }\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 id: extFile.id,\r\n serverResponse: { status, message, payload },\r\n uploadedFile: {\r\n ...extFile,\r\n uploadStatus: \"error\",\r\n uploadMessage: message,\r\n progress: 60\r\n },\r\n });\r\n }\r\n }, 1700);\r\n });\r\n};\r\n","import { ExtFile, ExtFileInstance } from \"../types\";\r\nimport { FileIdGenerator } from \"./IdGenerator\";\r\n\r\n\r\n/**\r\n * Converts the fileList into an array of separated ExtFile objects\r\n * @param fileList the FileList object given by input(event.target.files) or drop operation (event.dataTransfer)\r\n * @returns an array of ExtFile objects\r\n */\r\nexport const fileListToExtFileArray = (fileList: FileList): ExtFile[] => {\r\n let extFileArray: ExtFile[] = [];\r\n for (let i = 0, f: File; (f = fileList[i]); i++) {\r\n extFileArray.push({ id: FileIdGenerator.getNextId(), file: f, name: f.name, size: f.size, type: f.type });\r\n }\r\n return extFileArray;\r\n};\r\n\r\n/**\r\n * Converts the fileList into an array of separated ExtFile instances\r\n * @param fileList the FileList object given by input (event.target.files) or drop operation (event.dataTransfer)\r\n * @returns an array of ExtFile instances\r\n */\r\nexport const fileListToExtFileInstanceArray = (fileList: FileList): ExtFileInstance[] => {\r\n let extFileArray: ExtFileInstance[] = [];\r\n for (let i = 0, f: File; (f = fileList[i]); i++) {\r\n extFileArray.push(new ExtFileInstance({ id: FileIdGenerator.getNextId(), file: f, name: f.name, size: f.size, type: f.type }));\r\n }\r\n return extFileArray;\r\n};","/**\r\n * Resize an image resolution given maxWidth and maxHeight\r\n * \r\n * Should be called with await\r\n * @param base64Str a string representation of an imae file\r\n * @param maxWidth the max width of he image\r\n * @param maxHeight the max height of he image\r\n * @returns the resized image\r\n */\r\nexport function getImageOrientation(\r\n imageSource: string | undefined,\r\n): Promise<\"landscape\" | \"portrait\"> {\r\n return new Promise((resolve, reject) => {\r\n //console.log(\"getImageOrientation imageSource\", imageSource);\r\n if (!imageSource || imageSource.length === 0) {\r\n // console.log(\"getImageOrientation rejected\", imageSource);\r\n\r\n reject(\"landscape\");\r\n return;\r\n }\r\n try {\r\n //console.log(\"getImageOrientation try ini\", imageSource);\r\n\r\n let img: HTMLImageElement = new Image();\r\n img.src = imageSource;\r\n img.onerror = (ev: string | Event) => {\r\n //console.log(\"getImageOrientation There was a ne error reading\", ev);\r\n reject(\"landscape\");\r\n }\r\n img.onload = () => {\r\n let width: number = img.width;\r\n let height: number = img.height;\r\n if (width > height) {\r\n resolve(\"landscape\");\r\n } else {\r\n resolve(\"portrait\");\r\n }\r\n }\r\n } catch (error) {\r\n //console.error(\"An error ocurred when trying to get the image orientation\");\r\n\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.error(\"An error ocurred when trying to get the image orientation\");\r\n }\r\n reject(\"landscape\");\r\n }\r\n });\r\n}\r\n\r\n","/**\r\n * \r\n * @param file \r\n * @param name \r\n * @param type \r\n * @param size \r\n * @returns the file name, type and size\r\n */\r\nexport const getLocalFileItemData = (\r\n file: File | undefined,\r\n name: string | undefined,\r\n type: string | undefined,\r\n size: number | undefined\r\n): [string, string | undefined, number | undefined] => {\r\n\r\n let localFileName: string = \"\";\r\n let localFileType: string | undefined = undefined;\r\n let localFileSize: number | undefined = undefined;\r\n\r\n // if file object is valid, obtain metadata from it\r\n // otherwise try to get file data from individual props in string format\r\n if (file && typeof file.name === \"string\") {\r\n localFileName = file.name;\r\n localFileType = file.type;\r\n localFileSize = file.size;\r\n } else if (name && typeof name === \"string\") {\r\n localFileName = name;\r\n localFileType = type;\r\n localFileSize = size;\r\n }\r\n return [localFileName, localFileType, localFileSize]\r\n}","import { ExtFile } from \"../types\";\r\n\r\nexport const isUploadAbleExtFile = (extFile: ExtFile, validateFilesFlag: boolean) => {\r\n return (!validateFilesFlag || (validateFilesFlag && extFile.valid)) && extFile.uploadStatus !== \"success\";\r\n}","export const isValidateActive = (\r\n accept: string | undefined,\r\n maxFileSize: number | undefined,\r\n maxFiles: number | undefined,\r\n validator: Function | undefined\r\n ): boolean => {\r\n return (\r\n (accept !== undefined && accept !== null) ||\r\n (maxFileSize !== undefined && maxFileSize !== null) ||\r\n (maxFiles !== undefined && maxFiles !== null) ||\r\n (validator !== undefined && validator !== null)\r\n );\r\n };\r\n ","import { ExtFile, UPLOADSTATUS } from \"../types\";\r\nimport { FileIdGenerator, getRandomInt } from \"../utils\";\r\nimport { getRandomUploadStatus, listOfErrors } from \"../validation\";\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\n export const makeSyntheticExtFile = (\r\n file?: File ,\r\n valid = (Math.ceil(Math.random() * 28) % 2 === 0),\r\n uploadStatus?: UPLOADSTATUS,\r\n uploadMessage?: string\r\n): ExtFile => {\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 \"error\": customUploadMessage = \"Upload failed. There was an error\"; break;\r\n case \"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: ExtFile = {\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","import { UPLOADSTATUS } from \"../types\";\r\nimport { getRandomInt } from \"../utils/randomInt\";\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\n export const getRandomUploadStatus = (): UPLOADSTATUS | undefined => {\r\n const result: number = getRandomInt(0, 4);\r\n switch (result) {\r\n case 0: return \"error\";\r\n case 1: return \"uploading\";\r\n case 2: return \"success\";\r\n default:\r\n return undefined;\r\n }\r\n}","/**\r\n * Reads an image (or other type) file as data URL in a promise way, \r\n * so you can use await.\r\n * It will return a string that contains the URL representation\r\n * @param file File or Blob object\r\n * @returns data URL of the file\r\n */\r\nexport const readAsDataURL = (file: File | Blob, onProgress?: Function, onError?: Function): Promise<string | undefined> => {\r\n return new Promise<string | undefined>((resolve, reject) => {\r\n try {\r\n const reader = new FileReader();\r\n reader.onprogress = () => {\r\n onProgress?.();\r\n }\r\n reader.onerror = function () {\r\n onError?.();\r\n }\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\r\n\r\n/**\r\n * Reads a file as Text 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 or Blob object\r\n * @param encoding The type of encoding such as \"base64\"\r\n * @returns data text of the file\r\n */\r\nexport const readAsText = (file: File | Blob, encoding?: string, onProgress?: Function, onError?: Function): 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.onprogress = () => {\r\n onProgress?.();\r\n }\r\n reader.onerror = function () {\r\n onError?.();\r\n }\r\n reader.readAsText(file, encoding ? encoding : \"base64\");\r\n } catch (error) {\r\n reject(undefined);\r\n }\r\n });\r\n}\r\n\r\n\r\n\r\n/**\r\n * Reads a file and return the raw binary data from the file. \r\n * @param file File or Blob object\r\n * @param encoding The type of encoding such as \"base64\"\r\n * @returns raw binary data of the file\r\n */\r\nexport const readAsBinaryString = (file: File | Blob, onProgress?: Function, onError?: Function): 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.onprogress = () => {\r\n onProgress?.();\r\n }\r\n reader.onerror = function () {\r\n onError?.();\r\n }\r\n reader.readAsBinaryString(file);\r\n } catch (error) {\r\n reject(undefined);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Reads a file and returns an ArrayBuffer representing the file's data \r\n * @param file File or blob object\r\n * @param encoding The type of encoding such as \"base64\"\r\n * @returns ArrayBuffer representation of the file\r\n */\r\nexport const readAsArrayBuffer = (file: File | Blob, onProgress?: Function, onError?: Function): 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.onprogress = () => {\r\n onProgress?.();\r\n }\r\n reader.onerror = function () {\r\n onError?.();\r\n }\r\n reader.readAsArrayBuffer(file);\r\n } catch (error) {\r\n reject(undefined);\r\n }\r\n });\r\n}","/**\r\n * Resize an image resolution given maxWidth and maxHeight\r\n * \r\n * Should be called with await\r\n * @param base64Str a string representation of an imae file\r\n * @param maxWidth the max width of he image\r\n * @param maxHeight the max height of he image\r\n * @returns the resized image\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: HTMLCanvasElement = document.createElement('canvas');\r\n const MAX_WIDTH: number = maxWidth;\r\n const MAX_HEIGHT: number = maxHeight;\r\n let width: number = img.width;\r\n let height: number = 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: CanvasRenderingContext2D | null = 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 if (process.env.NODE_ENV === \"development\") {\r\n console.error(\"An error ocurred when trying to make a thumnail\");\r\n }\r\n reject(undefined);\r\n }\r\n }\r\n } catch (error) {\r\n if (process.env.NODE_ENV === \"development\") {\r\n console.error(\"An error ocurred when trying to make a thumnail\");\r\n }\r\n reject(undefined);\r\n }\r\n });\r\n}\r\n\r\n","/**\r\n * The max size of the word in characters\r\n */\r\nexport const DEFAULT_MAX_SIZE_WORD = 30;\r\n/**\r\n * \r\n * @param word the word to be shrinked\r\n * @returns the shrinked word\r\n */\r\nexport const shrinkWord = (word = \"\", card = false): string => {\r\n let newWord = word;\r\n if (card) {\r\n if (word.length >= 20) {\r\n newWord = word.slice(0, 10) + \"...\" + word.slice(-7);\r\n }\r\n } else if (word.length >= DEFAULT_MAX_SIZE_WORD) {\r\n newWord = word.slice(0, 13) + \"...\" + word.slice(-8);\r\n }\r\n return newWord;\r\n};"],"names":["fileSizeFormater","fileSize","toFixed","DropzoneItalian","defaultLabel","uploadingMessage","amountOfFiles","uploadFinished","uploaded","rejected","concat","noFilesMessage","footer","acceptAll","acceptCustom","accept","header","uploadFilesMessage","maxSizeMessage","maxFileSize","validFilesMessage","numberOfValidFiles","maxFiles","fakeuploadsuccess","fakeUploadError","FileItemItalian","fullInfoLayer","name","size","type","status","preparing","uploading","success","valid","denied","error","aborted","ValidateErrorItalian","maxSizeError","maxSize","acceptError","maxFileCount","DropzoneFrench","FileItemFrench","ValidateErrorFrench","DropzoneEnglish","FileItemEnglish","ValidateErrorEnglish","DropzoneSpanish","FileItemSpanish","ValidateErrorSpanish","DropzoneRussian","FileItemRussian","ValidateErrorRussian","DropzonePortuguese","FileItemPortuguese","ValidateErrorPortuguese","DropzoneSimplifiedChinese","FileItemSimplifiedChinese","ValidateErrorSimplifiedChinese","DropzoneTraditionalChinese","FileItemTraditionalChinese","ValidateErrorTraditionalChinese","FileItemLocalizer","DropzoneLocalizer","DropzoneLocalizerSelector","local","ValidateErrorLocalizer","ValidateErrorLocalizerSelector","includes","sevenzip","aac","abw","accdb","avi","azw","bmp","bz","bz2","cda","csh","css","csv","docx","drawio","eot","epub","freearc","gif","gzip","html","icalendar","java","jar","javascript","jpeg","json","jsonld","midi","mp3","mp4","mpeg","mpkg","octet","odp","ods","odt","oga","ogv","ogx","opus","otf","pdf","php","png","pptx","psd","python","tar","rar","react","rtf","sass","sh","swf","text","tiff","ttf","typescript","vsd","vue","wav","webm","weba","webp","wma","wmv","woff","xlsx","xml","xul","zip","getExt","fileName","result","exec","DEF_GEN_MIME","audioSelector","tailMime","textSelector","imageSelector","fontSelector","videoSelector","applicationSelector","mimeSelector","mimeType","headerMime","split","extensionSelector","extension","genericMime","checkIsCode","mimeUrlList","arc","mp2t","xhtml","fallBack","ExtFileInstance","extFile","id","file","imageUrl","errors","uploadMessage","uploadStatus","progress","xhr","extraData","extraUploadData","serverResponse","downloadUrl","videoUrl","this","toExtFile","extFileInstance","extFileClone","extFileInstanceKeys","Object","keys","extFileInstanceValues","values","i","length","currentValue","currKey","undefined","prototype","ExtFileManager","getNextId","nextId","setFileList","extFilesInstances","fileLists","__spreadArray","createFileListMap","removeFileListMap","process","env","NODE_ENV","console","getExtFileInstanceList","setFileListMapPreparing","dropzoneId","localFiles","validateFiles","cleanOnUpload","resultExtList","temLocalFiles","filter","map","__assign","F","setFileListMapPreparing2","SyntheticFile","createFile","File","defineProperty","get","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_x_mid","create_midi","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_3gp","create_3gp2","create_3gp_a","create_3gp_v","create_7z","create_python","create_java","create_react","create_vue","createFileListMiscelanious","listFile","push","createSyntheticFile","FileIdGenerator","getRandomInt","min","max","Math","floor","random","separateAccept","acceptItem","trim","validateAccept","charAt","headerMimeFile","tailMimeFile","validateExtFile","validator","validatorProps","localErrors","extFileResult","errorsResult","apply","maxFileSizeErrorMessenger","isValid","validateFile","idGenerated","listOfErrors","addExtraData","formData","extraDataKeys","append","addHeaders","headers","headerKeys","setRequestHeader","TIMEOUT_ERROR_RESPONSE","message","payload","ABORTED_ERROR_RESPONSE","JSON_PARSE_ERROR_RESPONSE","UNEXPECTED_ERROR_RESPONSE","NO_XHR_PROVIDED_ERROR","JsonParseResponse","jsonResponse","JSON","parse","response","makeSuccessUploadResponse","responseFui","makeErrorUploadResponse","uploadFormData","method","endpoint","data","Promise","resolve","reject","finalMethod","toUpperCase","upload","onload","ontimeout","onabort","onloadend","e","__awaiter","onreadystatechange","readyState","open","send","NAMED_COLORS","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","hexColorToRGB","colorInput","perc","defaultColor","resultDefault","color","replace","isHexColor","colourNameToHex","component1","component2","component3","hexTodec","hexArray","colour","toLocaleLowerCase","decArray","letter","indexOf","asureColor","DEFAULT_FONT_COLOR","baseClassName","className","percentage","brightedColor","increase","components","parseInt","inputElement","value","uploadStatusresult","uploadedFile","url","uploadLabel","cleanonUpload","darkedColor","reduce","XMLHttpRequest","extraData1","extraData2","deleted","extFileIncomming","arrOfExtFiles","incommingTemp","findIndex","I","setTimeout","fileList","extFileArray","f","preValidatedFiles","remainingValids","localValidator","localization","output","countdown","ValidationErrorLocalizer","validatedFile","maxFileErrorMessenger","Infinity","imageSource","img_1","Image","src","onerror","ev","width","height","localFileName","localFileType","localFileSize","customIcons","mimeResume","extention","customUrl","validateFilesFlag","ceil","newUpoadStatus","getRandomUploadStatus","customUploadMessage","randInt","onProgress","onError","reader_4","FileReader","onprogress","readAsArrayBuffer","reader_3","readAsBinaryString","reader_1","readAsDataURL","encoding","reader_2","readAsText","base64Str","maxWidth","maxHeight","canvas","document","createElement","MAX_WIDTH","MAX_HEIGHT","ctx","getContext","drawImage","toDataURL","arrExtFile","_a","extFileobj","prevStatus","nextStstaus","word","card","newWord","slice","preparingTime","time","extFileList","uploader","localMethod","fileToUpload","FormData","finalExtraData","otherValue","param2","tecnica","friend","age","addExtraDataUpload","label","_this","sent","localValidatorProps","fileListResult","remaining","currentExtFile"],"mappings":"oEAIQ,IAAMA,EAAmB,SAACC,GAE9B,GAAKA,EAiBL,OAdIA,EAAW,KACFA,EAAW,SAGhBA,EAAW,SACDA,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,KAI/E,EClBaC,EAA+B,CACxCC,aAAc,2BAEdC,iBAAkB,SAACC,GAAoB,MAAO,yBAAkBA,EAAa,QAAU,EACvFC,eAAgB,SAACC,EAAUC,GAAa,MAAA,kBAAAC,OAAkBF,EAAQ,sBAAAE,OAAqBD,EAAU,EACjGE,eAAgB,kDAChBC,OAAQ,CACJC,UAAW,sCACXC,aAAc,SAACC,GAAW,MAAA,4BAA4BL,OAAAK,EAAQ,GAElEC,OAAQ,CACJC,mBAAoB,cACpBC,eAAgB,SAACC,GAAgB,MAAA,sBAAsBT,OAAAS,EAAa,EACpEC,kBAAmB,SAACC,EAAoBC,GAAa,MAAA,SAAAZ,OAASW,EAAkB,KAAAX,OAAIY,EAAU,GAElGC,kBAAmB,yCACnBC,gBAAiB,kCAMRC,EAA+B,CACxCC,cAAe,CACXC,KAAM,SACNC,KAAM,eACNC,KAAM,UAEVC,OAAQ,CACJC,UAAU,eACVC,UAAW,WACXC,QAAS,WACTC,MAAO,SACPC,OAAQ,aACRC,MAAO,SACPC,QAAQ,eAMFC,EAAoC,CAC9CC,aAAc,SAACC,GAAY,MAAA,gDAAA9B,OAAgDV,EAAiBwC,GAAoB,EAChHC,YAAa,wBACbC,aAAc,SAACpB,GAAa,MAAA,2BAA2BZ,OAAAY,EAAqB,cAAA,GC5CnEqB,EAA8B,CACvCvC,aAAc,2BAEdC,iBAAkB,SAACC,GAAoB,MAAO,mBAAYA,EAAa,YAAc,EACrFC,eAAgB,SAACC,EAAUC,GAAa,MAAA,0BAAAC,OAA0BF,EAAQ,wBAAAE,OAAuBD,EAAU,EAC3GE,eAAgB,iCAChBC,OAAQ,CACJC,UAAW,mCACXC,aAAc,SAACC,GAAW,MAAA,qBAAqBL,OAAAK,EAAQ,GAE3DC,OAAQ,CACJC,mBAAoB,UACpBC,eAAgB,SAACC,GAAgB,MAAA,mBAAmBT,OAAAS,EAAa,EACjEC,kBAAmB,SAACC,EAAoBC,GAAa,MAAA,aAAAZ,OAAaW,EAAkB,KAAAX,OAAIY,EAAU,GAEtGC,kBAAmB,0CACnBC,gBAAiB,kCAMRoB,EAA8B,CACvClB,cAAe,CACXC,KAAM,WACNC,KAAM,cACNC,KAAM,aAEVC,OAAQ,CACJC,UAAU,WACVC,UAAW,WACXC,QAAS,SACTC,MAAO,SACPC,OAAQ,SACRC,MAAO,SACPC,QAAQ,eAMFQ,EAAmC,CAC7CN,aAAc,SAACC,GAAY,MAAA,6DAAA9B,OAA6DV,EAAiBwC,GAAoB,EAC7HC,YAAa,2BACbC,aAAc,SAACpB,GAAa,MAAA,gCAAgCZ,OAAAY,EAAW,IAAA,GC5C9DwB,EAA+B,CACxC1C,aAAc,uBACdC,iBAAkB,SAACC,GAAoB,MAAO,oBAAaA,EAAa,SAAW,EACnFC,eAAgB,SAACC,EAAUC,GAAa,MAAA,mBAAAC,OAAmBF,EAAQ,sBAAAE,OAAqBD,EAAU,EAClGE,eAAgB,2CAChBC,OAAQ,CACJC,UAAW,0BACXC,aAAc,SAACC,GAAW,MAAA,kBAAkBL,OAAAK,EAAQ,GAExDC,OAAQ,CACJC,mBAAoB,eACpBC,eAAgB,SAACC,GAAgB,MAAA,kBAAkBT,OAAAS,EAAa,EAChEC,kBAAmB,SAACC,EAAoBC,GAAa,MAAA,SAAAZ,OAASW,EAAkB,KAAAX,OAAIY,EAAU,GAElGC,kBAAmB,gCACnBC,gBAAiB,+CAMRuB,EAA+B,CACxCrB,cAAe,CACXC,KAAM,SACNC,KAAM,SACNC,KAAM,UAEVC,OAAQ,CACJC,UAAU,YACVC,UAAW,YACXC,QAAS,UACTC,MAAO,QACPC,OAAQ,YACRC,MAAO,QACPC,QAAQ,YAOHW,EAAoC,CAC7CT,aAAc,SAACC,GACX,MAAA,6CAA6C9B,OAAAV,EAAiBwC,GAAoB,EACtFC,YAAa,2BACbC,aAAc,SAACpB,GACX,MAAA,wBAAAZ,OAAwBY,EAA4B,qBAAA,GC9C/C2B,EAA+B,CACxC7C,aAAc,2BAEdC,iBAAkB,SAACC,GAAoB,MAAO,mBAAYA,EAAa,YAAc,EACrFC,eAAgB,SAACC,EAAUC,GAAa,MAAA,qBAAAC,OAAqBF,EAAQ,2BAAAE,OAA0BD,EAAU,EACzGE,eAAgB,+CAChBC,OAAQ,CACJC,UAAW,uCACXC,aAAc,SAACC,GAAW,MAAA,kCAAkCL,OAAAK,EAAQ,GAExEC,OAAQ,CACJC,mBAAoB,QACpBC,eAAgB,SAACC,GAAgB,MAAA,eAAeT,OAAAS,EAAa,EAC7DC,kBAAmB,SAACC,EAAoBC,GAAa,MAAA,YAAAZ,OAAYW,EAAkB,KAAAX,OAAIY,EAAU,GAErGC,kBAAmB,oCACnBC,gBAAiB,6BAMR0B,EAA+B,CACxCxB,cAAe,CACXC,KAAM,WACNC,KAAM,WACNC,KAAM,UAEVC,OAAQ,CACJC,UAAU,aACVC,UAAW,WACXC,QAAS,QACTC,MAAO,SACPC,OAAQ,YACRC,MAAO,QACPC,QAAS,YAMJc,EAAoC,CAC7CZ,aAAc,SAACC,GAAY,MAAA,+CAAA9B,OAA+CV,EAAiBwC,GAAoB,EAC/GC,YAAa,+BACbC,aAAc,SAACpB,GAAa,MAAA,gCAAgCZ,OAAAY,EAAqB,cAAA,GC5CxE8B,EAA+B,CACxChD,aAAc,8BACdC,iBAAkB,SAACC,GAAoB,MAAO,mBAAYA,EAAa,UAAY,EACnFC,eAAgB,SAACC,EAAUC,GAAa,MAAA,qBAAAC,OAAqBF,EAAQ,0BAAAE,OAAyBD,EAAU,EACxGE,eAAgB,kDAChBC,OAAQ,CACJC,UAAW,+BACXC,aAAc,SAACC,GAAW,MAAA,oBAAoBL,OAAAK,EAAQ,GAE1DC,OAAQ,CACJC,mBAAoB,YACpBC,eAAgB,SAACC,GAAgB,MAAA,gBAAgBT,OAAAS,EAAa,EAC9DC,kBAAmB,SAACC,EAAoBC,GAAa,MAAA,SAAAZ,OAASW,EAAkB,KAAAX,OAAIY,EAAU,GAElGC,kBAAmB,4BACnBC,gBAAiB,uBAOR6B,EAA+B,CACxC3B,cAAe,CACXC,KAAM,QACNC,KAAM,WACNC,KAAM,SAEVC,OAAQ,CACJC,UAAU,aACVC,UAAW,WACXC,QAAS,QACTC,MAAO,SACPC,OAAQ,YACRC,MAAO,SACPC,QAAQ,eAOHiB,EAAoC,CAC7Cf,aAAc,SAACC,GACX,MAAA,+DAA+D9B,OAAAV,EAAiBwC,GAAoB,EACxGC,YAAa,wBACbC,aAAc,SAACpB,GACX,MAAA,8CAAAZ,OAA8CY,EAAW,IAAA,GC/CpDiC,EAAkC,CAC3CnD,aAAc,4BAEdC,iBAAkB,SAACC,GAAoB,MAAO,mBAAYA,EAAa,YAAc,EACrFC,eAAgB,SAACC,EAAUC,GAAa,MAAA,sBAAAC,OAAsBF,EAAQ,2BAAAE,OAA0BD,EAAU,EAC1GE,eAAgB,kDAChBC,OAAQ,CACJC,UAAW,wCACXC,aAAc,SAACC,GAAW,MAAA,qBAAqBL,OAAAK,EAAQ,GAE3DC,OAAQ,CACJC,mBAAoB,SACpBC,eAAgB,SAACC,GAAgB,MAAA,mBAAmBT,OAAAS,EAAa,EACjEC,kBAAmB,SAACC,EAAoBC,GAAa,MAAA,YAAAZ,OAAYW,EAAkB,KAAAX,OAAIY,EAAU,GAErGC,kBAAmB,oCACnBC,gBAAiB,kBAORgC,EAAkC,CAC3C9B,cAAe,CACXC,KAAM,SACNC,KAAM,YACNC,KAAM,UAEVC,OAAQ,CACJC,UAAU,aACVC,UAAW,WACXC,QAAS,QACTC,MAAO,SACPC,OAAQ,SACRC,MAAO,OACPC,QAAQ,aAMFoB,EAAuC,CACjDlB,aAAc,SAACC,GAAY,MAAA,qEAAA9B,OAAqEV,EAAiBwC,GAAoB,EACrIC,YAAa,qCACbC,aAAc,SAACpB,GAAa,MAAA,kCAAkCZ,OAAAY,EAAqB,cAAA,GC7C1EoC,EAAyC,CAClDtD,aAAc,YACdC,iBAAkB,SAACC,GAAoB,MAAO,aAAMA,EAAa,OAAS,EAC1EC,eAAgB,SAACC,EAAUC,GAAa,MAAA,QAAAC,OAAQF,EAAQ,UAAAE,OAASD,EAAU,EAC3EE,eAAgB,eAChBC,OAAQ,CACJC,UAAW,WACXC,aAAc,SAACC,GAAW,MAAA,UAAUL,OAAAK,EAAQ,GAEhDC,OAAQ,CACJC,mBAAoB,OACpBC,eAAgB,SAACC,GAAgB,MAAA,UAAUT,OAAAS,EAAa,EACxDC,kBAAmB,SAACC,EAAoBC,GAAa,MAAA,MAAAZ,OAAMW,EAAkB,KAAAX,OAAIY,EAAU,GAE/FC,kBAAmB,UACnBC,gBAAiB,SAMRmC,EAAyC,CAClDjC,cAAe,CACXC,KAAM,SACNC,KAAM,OACNC,KAAM,UAEVC,OAAQ,CACJC,UAAU,MACVC,UAAW,KACXC,QAAS,KACTC,MAAO,QACPC,OAAQ,SACRC,MAAO,KACPC,QAAQ,OAOHuB,EAA8C,CACvDrB,aAAc,SAACC,GACX,MAAA,oBAAoB9B,OAAAV,EAAiBwC,GAAoB,EAC7DC,YAAa,UACbC,aAAc,SAACpB,GACX,MAAA,aAAAZ,OAAaY,EAAW,IAAA,GC7CnBuC,EAA0C,CACnDzD,aAAc,aACdC,iBAAkB,SAACC,GAAoB,MAAO,YAAKA,EAAa,MAAQ,EACxEC,eAAgB,SAACC,EAAUC,GAAa,MAAA,SAAAC,OAASF,EAAQ,YAAAE,OAAWD,EAAU,EAC9EE,eAAgB,eAChBC,OAAQ,CACJC,UAAW,WACXC,aAAc,SAACC,GAAW,MAAA,SAASL,OAAAK,EAAQ,GAE/CC,OAAQ,CACJC,mBAAoB,OACpBC,eAAgB,SAACC,GAAgB,MAAA,UAAUT,OAAAS,EAAa,EACxDC,kBAAmB,SAACC,EAAoBC,GAAa,MAAA,OAAAZ,OAAOW,EAAkB,KAAAX,OAAIY,EAAU,GAEhGC,kBAAmB,UACnBC,gBAAiB,SAMRsC,EAA0C,CACnDpC,cAAe,CACXC,KAAM,SACNC,KAAM,SACNC,KAAM,UAEVC,OAAQ,CACJC,UAAW,MACXC,UAAW,KACXC,QAAS,KACTC,MAAO,OACPC,OAAQ,OACRC,MAAO,KACPC,QAAS,OAOJ0B,EAA+C,CACxDxB,aAAc,SAACC,GACX,MAAA,oBAAoB9B,OAAAV,EAAiBwC,GAAoB,EAC7DC,YAAa,UACbC,aAAc,SAACpB,GACX,MAAA,aAAAZ,OAAaY,EAAW,IAAA,GC3CnB0C,EAAwC,CACjD,QAASd,EACT,QAASH,EACT,QAASH,EACT,QAASnB,EACT,QAAS+B,EACT,QAASH,EACT,QAASM,EACT,QAASG,GCRAG,EAAwC,CACjD,QAAShB,EACT,QAASH,EACT,QAASH,EACT,QAASxC,EACT,QAASoD,EACT,QAASH,EACT,QAASM,EACT,QAASG,GAQAK,EAA4B,SAACC,GACtC,OAAQA,GACJ,IAAK,QAAS,OAAOF,EAAkB,SACvC,IAAK,QAOL,QAAS,OAAOA,EAAkB,SANlC,IAAK,QAAS,OAAOA,EAAkB,SACvC,IAAK,QAAS,OAAOA,EAAkB,SACvC,IAAK,QAAS,OAAOA,EAAkB,SACvC,IAAK,QAAS,OAAOA,EAAkB,SACvC,IAAK,QAAS,OAAOA,EAAkB,SACvC,IAAK,QAAS,OAAOA,EAAkB,SAG/C,EC5BaG,EAA6C,CACtD,QAASjB,EACT,QAASH,EACT,QAASH,EACT,QAASP,EACT,QAASmB,EACT,QAASH,EACT,QAASM,EACT,QAASG,GAOAM,EAAiC,SAACF,GAC3C,OAAKA,GAAU,CAAC,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,QAAS,SAASG,SAASH,GAG1FC,EAAuBD,GAFnBC,EAAuB,QAGtC,EC9BO,IAAMG,EAAW,wGACXC,EAAM,wGACNC,EAAM,wGACNC,EAAQ,wGACRC,EAAM,wGACNC,EAAM,wGACNC,EAAM,wGACNC,EAAK,wGACLC,EAAM,wGAENC,EAAM,wGACNC,EAAM,wGACNC,EAAM,wGACNC,EAAM,wGACNC,EAAO,wGAEPC,EAAS,wGAGTC,EAAM,wGAENC,EAAO,wGACPC,EAAU,wGACVC,EAAM,wGACNC,EAAO,wGACPC,EAAO,wGACPC,EAAY,wGAGZC,EAAO,wGACPC,EAAM,wGACNC,GAAa,wGACbC,GAAO,wGAEPC,GAAO,wGACPC,GAAS,wGACTC,GAAO,wGAEPC,GAAM,wGACNC,GAAM,wGACNC,GAAO,wGACPC,GAAO,wGACPC,GAAQ,wGACRC,GAAM,wGACNC,GAAM,wGACNC,GAAM,wGACNC,GAAM,wGACNC,GAAM,wGACNC,GAAM,wGACNC,GAAO,wGACPC,GAAM,wGACNC,GAAM,wGACNC,GAAM,wGACNC,GAAM,wGACNC,GAAO,wGAGPC,GAAM,wGAGNC,GAAS,wGACTC,GAAM,wGACNC,GAAM,wGACNC,GAAQ,wGAERC,GAAM,wGACNC,GAAO,wGAEPC,GAAK,wGACLC,GAAM,wGACNC,GAAO,wGACPC,GAAO,wGACPC,GAAM,wGACNC,GAAa,wGAEbC,GAAM,wGACNC,GAAM,wGACNC,GAAM,wGACNC,GAAO,wGACPC,GAAO,wGACPC,GAAO,wGACPC,GAAM,wGACNC,GAAM,wGACNC,GAAO,wGACPC,GAAO,wGAEPC,GAAM,wGACNC,GAAM,wGACNC,GAAM,wGCnFLC,GAAS,SAACC,GACpB,IACMC,EADK,kBACOC,KAAKF,GACvB,OAAIC,EACOA,EAAO,GAEP,EAGf,ECSME,GAA+B,QAMxBC,GAAgB,SAACC,GAC1B,OAAQA,GACJ,IAAK,MAAO,MAAO,MACnB,IAAK,OACL,IAAK,SAAU,MAAO,OACtB,IAAK,OAAQ,MAAO,OACpB,IAAK,MAAO,MAAO,MACnB,IAAK,OAAQ,MAAO,OACpB,IAAK,MAAO,MAAO,MACnB,IAAK,OAAQ,MAAO,OAIpB,IAAK,MAAO,MAAO,MACnB,QAAS,OAAOF,GAExB,EACaG,GAAe,SAACD,GACzB,OAAQA,GACJ,IAAK,MAAO,MAAO,MACnB,IAAK,MAAO,MAAO,MACnB,IAAK,OAAQ,MAAO,OACpB,IAAK,WAAY,MAAO,YACxB,IAAK,aACL,IAAK,eAAgB,MAAO,aAC5B,IAAK,QAAS,MAAO,OACrB,IAAK,MAAO,MAAO,MACnB,QAAS,OAAOF,GAGxB,EACaI,GAAgB,SAACF,GAC1B,OAAQA,GACJ,IAAK,MAAO,MAAO,MACnB,IAAK,MAAO,MAAO,MAGnB,IAAK,MACL,IAAK,OAAQ,MAAO,OACpB,IAAK,MAAO,MAAO,MAGnB,IAAK,OAAQ,MAAO,OACpB,IAAK,OAAQ,MAAO,OACpB,QAAS,OAAOF,GAGxB,EACaK,GAAe,SAACH,GACzB,OAAQA,GACJ,IAAK,MAAO,MAAO,MACnB,IAAK,MAAO,MAAO,MACnB,IAAK,OACL,IAAK,QAAS,MAAO,OACrB,QAAS,OAAOF,GAGxB,EAEaM,GAAgB,SAACJ,GAC1B,OAAQA,GACJ,IAAK,YACL,IAAK,UACL,IAAK,MAAO,MAAO,MACnB,IAAK,MAAO,MAAO,MACnB,IAAK,OAAQ,MAAO,OACpB,IAAK,MAAO,MAAO,MACnB,IAAK,OAAQ,MAAO,OACpB,IAAK,MAAO,MAAO,MAEnB,IAAK,OAAQ,MAAO,OAIpB,QAAS,OAAOF,GAExB,EAMaO,GAAsB,SAACL,GAChC,OAAQA,GACJ,IAAK,YACL,IAAK,UAAW,MAAO,MACvB,IAAK,YACL,IAAK,UAAW,MAAO,MACvB,IAAK,mBAAoB,MAAO,MAChC,IAAK,eAAgB,MAAO,QAC5B,IAAK,SAEL,IAAK,OAAQ,MAAO,KADpB,IAAK,UAEL,IAAK,QAAS,MAAO,MACrB,IAAK,QAAS,MAAO,MACrB,IAAK,WAAY,MAAO,QACxB,IAAK,MACL,IAAK,QAAS,MAAO,MACrB,IAAK,oBAAqB,MAAO,MACjC,IAAK,WAAY,MAAO,OACxB,IAAK,OAAQ,MAAO,OACpB,IAAK,eAAgB,MAAO,MAC5B,IAAK,eAAgB,MAAO,aAC5B,IAAK,OAAQ,MAAO,OACpB,IAAK,UAAW,MAAO,SACvB,IAAK,0BAA2B,MAAO,OACvC,IAAK,MAAO,MAAO,MACnB,IAAK,UAAW,MAAO,MACvB,IAAK,MAAO,MAAO,MACnB,IAAK,OACL,IAAK,KAAM,MAAO,KAClB,IAAK,oBAAqB,MAAO,MACjC,IAAK,QAAS,MAAO,MACrB,IAAK,cAAe,MAAO,MAC3B,IAAK,YAAa,MAAO,MACzB,IAAK,YAAa,MAAO,QACzB,IAAK,MAAO,MAAO,MACnB,IAAK,sBAAuB,MAAO,MACnC,IAAK,8DACL,IAAK,SAAU,MAAO,OACtB,IAAK,wDAAyD,MAAO,OACrE,IAAK,gEACL,IAAK,oBAAqB,MAAO,OACjC,IAAK,sCAAuC,MAAO,MACnD,IAAK,8BAA+B,MAAO,MAC3C,IAAK,qCAAsC,MAAO,MAClD,IAAK,MACL,IAAK,mBAAoB,MAAO,MAChC,IAAK,MAAO,MAAO,MACnB,QAAS,OAAOF,GAExB,EAOaQ,GAAe,SAACC,GAEzB,IAAKA,IAAaA,EAAStF,SAAS,KAChC,OAAO6E,GAEX,IAAIU,EAAaD,EAASE,MAAM,KAAK,GACjCT,EAAWO,EAASE,MAAM,KAAK,GAMnC,OAAQD,GACJ,IAAK,cAAe,OAAOH,GAAoBL,GAC/C,IAAK,QAAS,OAAOD,GAAcC,GACnC,IAAK,QAAS,OAAOI,GAAcJ,GACnC,IAAK,OAAQ,OAAOC,GAAaD,GACjC,IAAK,QAAS,OAAOE,GAAcF,GACnC,IAAK,OAAQ,OAAOG,GAAaH,GAEjC,QAAS,OAAOF,GAExB,EAQaY,GAAoB,SAACC,GAC9B,IAAIC,EAA8B,QA6BlC,OA3BID,GAA2B,KAAdA,IACTA,EAAU1F,SAAS,QAAU0F,EAAU1F,SAAS,OAChD2F,EAAc,MACPD,EAAU1F,SAAS,OAC1B2F,EAAc,OACPD,EAAU1F,SAAS,OAC1B2F,EAAc,OACPD,EAAU1F,SAAS,UAC1B2F,EAAc,SACPD,EAAU1F,SAAS,OAC1B2F,EAAc,MACPD,EAAU1F,SAAS,OAC1B2F,EAAc,MACO,QAAdD,EACPC,EAAc,QACO,OAAdD,EACPC,EAAc,SACO,QAAdD,EACPC,EAAc,MACO,SAAdD,EACPC,EAAc,OACO,OAAdD,EACPC,EAAc,aACO,SAAdD,GAAsC,SAAdA,IAC/BC,EAAc,SAGfA,CAEX,EAMaC,GAAc,SAACF,GACxB,IAAIC,EAA8B,OAoBlC,OAnBID,GAA2B,KAAdA,IACK,QAAdA,EACAC,EAAc,QACO,OAAdD,EACPC,EAAc,SACO,QAAdD,EACPC,EAAc,MACO,SAAdD,EACPC,EAAc,OACO,OAAdD,GAAoC,QAAdA,EAC7BC,EAAc,aACO,OAAdD,EACPC,EAAc,aACO,QAAdD,EACPC,EAAc,MACO,QAAdD,IACPC,EAAc,QAGfA,CACX,EA8FME,GAA4B,CAC9B3F,IAAKA,EACLE,MAAOA,EACPD,IAAKA,EACL2F,IAAK5E,EACLb,IAAKA,EACLC,IAAKA,EACL4B,MAAOA,GACP3B,IAAKA,EACLC,GAAIA,EACJC,IAAKA,EACLC,IAAKA,EACLC,IAAKA,EACLC,IAAKA,EACLC,IAAKA,EACLC,KAAMA,EACNC,OAAQA,EACRC,IAAKA,EACLC,KAAMA,EACNG,KAAMA,EACND,IAAKA,EACLE,KAAMA,EAENC,UAAWA,EACXE,IAAKA,EACLE,KAAMA,GACND,WAAYA,GACZE,KAAMA,GACNC,OAAQA,GACRC,KAAMA,GAENC,IAAKA,GACLC,IAAKA,GACLC,KAAMA,GACNC,KAAMA,GACN8D,KAAM7D,GACNC,IAAKA,GACLC,IAAKA,GACLC,IAAKA,GACLC,IAAKA,GACLC,IAAKA,GACLC,IAAKA,GACLC,KAAMA,GACNC,IAAKA,GACLG,IAAKA,GACLF,IAAKA,GACLC,IAAKA,GACLE,KAAMA,GACNC,IAAKA,GACLG,IAAKA,GACLE,IAAKA,GACLC,KAAMA,GACNC,GAAIA,GAEJC,IAAKA,GACLN,IAAKA,GACLQ,KAAMA,GACNC,IAAKA,GAELC,WAAYA,GACZH,KAAMA,GACNI,IAAKA,GACLE,IAAKA,GACLE,KAAMA,GACND,KAAMA,GACNE,KAAMA,GACNG,KAAMA,GACNF,IAAKA,GACLC,IAAKA,GACL6B,MAAO3E,EACPgD,KAAMA,GACNC,IAAKA,GACLC,IAAKA,GACLC,IAAKA,GAELvE,SAAUA,EACV+C,OAAQA,GACRzB,KAAMA,EACN4B,MAAOA,GACPU,IAAKA,GAGLoC,SAAU/D,ICvVdgE,GAAA,WAuEI,SAAAA,EAAYC,GAEJ,IAAAC,EAgBAD,KAfAE,EAeAF,EAAOE,KAdPhJ,EAcA8I,EAAO9I,KAbPC,EAaA6I,EAbI7I,KACJC,EAYA4I,EAZI5I,KACJ+I,EAWAH,WAVAvI,EAUAuI,QATAI,EASAJ,EAAOI,OARPC,EAQAL,EAAOK,cAPPC,EAOAN,EAPYM,aACZC,EAMAP,EANQO,SACRC,EAKAR,MAJAS,EAIAT,EAAOS,UAHPC,EAGAV,EAAOU,gBAFPC,EAEAX,EAFcW,eACdC,EACAZ,EADWY,YAAEC,EACbb,WAEJc,KAAKb,GAAKA,EACVa,KAAKZ,KAAOA,EACZY,KAAK5J,KAAOA,EACZ4J,KAAK3J,KAAOA,EACZ2J,KAAK1J,KAAOA,EACZ0J,KAAKX,SAAWA,EAEhBW,KAAKrJ,MAAQA,EACbqJ,KAAKV,OAASA,EACdU,KAAKR,aAAeA,EACpBQ,KAAKT,cAAgBA,EACrBS,KAAKP,SAAWA,EAChBO,KAAKN,IAAMA,EAEXM,KAAKL,UAAYA,EACjBK,KAAKJ,gBAAkBA,EACvBI,KAAKH,eAAiBA,EAEtBG,KAAKF,YAAcA,EACnBE,KAAKD,SAAWA,CACnB,CA+CL,OAlCWd,EAASgB,UAAhB,SAAiBC,GAOb,IAJA,IAAIC,EAAwB,CAAA,EACtBC,EAAsBC,OAAOC,KAAKJ,GAClCK,EAAwBF,OAAOG,OAAON,GAEnCO,EAAI,EAAGA,EAAIF,EAAsBG,OAAQD,IAAK,CACnD,IAAME,EAAuCJ,EAAsBE,GAG7DG,EAAUR,EAAoBK,QACfI,IAAjBF,IAEAR,EAAaS,GAAWD,EAE/B,CAGD,OAAOR,GAMXlB,EAAA6B,UAAAb,UAAA,WACI,OAAOhB,EAAgBgB,UAAUD,OAQxCf,CAAD,2vDCtPA,IAAA8B,GAAA,WAAA,SAAAA,IAkOC,CAAD,OA3NkBA,EAAAC,UAAd,WAEI,OADAD,EAAeE,SACRF,EAAeE,QAQZF,EAAAG,YAAd,SACI/B,EACAgC,GAEA,OAAKhC,GAGD4B,EAAeK,UAAUjC,GAAUkC,GAAA,GAAAF,MAE5BhC,GAJA,GAYD4B,EAAAO,kBAAd,WACI,IAAML,EAAiBF,EAAeC,YAGtC,OAFAD,EAAeK,UAAUH,GAAU,GAE5BA,GAOGF,EAAiBQ,kBAA/B,SAAgCpC,GAC5B,IAAKA,EACD,OAAO,EAEP,IAEI,OADA4B,EAAeK,UAAUjC,QAAM0B,EACxB1B,CACV,CAAC,MAAOtI,GAGL,MAF6B,gBAAzB2K,QAAQC,IAAIC,UACZC,QAAQ9K,MAAM,kBAAmBA,GAC9B,CACV,GAQKkK,EAAsBa,uBAApC,SACIzC,GAEA,IACI,IAAKA,EACD,OAEJ,OAAO4B,EAAeK,UAAUjC,EACnC,CAAC,MAAOtI,GAGL,YAF6B,gBAAzB2K,QAAQC,IAAIC,UACZC,QAAQ9K,MAAM,kCAAmCA,GAExD,GAeSkK,EAAuBc,wBAArC,SACIC,EACAC,EACAC,EACAC,GAIA,GAA4B,iBAAfH,GAAiD,iBAAfA,EAG/C,IAEI,IAAII,EAGAC,EAAad,GAAA,GAAkBU,GAAU,GAGzCE,GAAiBD,IAEjBG,EAAgBA,EAAcC,QAAO,SAAAlD,GAAW,OAAAA,EAAQvI,KAAR,KAqCpDuL,GA1BIC,EALAH,EAMIG,EACKE,KAAI,SAAAnD,GACD,MAA6B,YAAzBA,EAAQM,cAA8BN,EAAQvI,MAC9C2L,GAAAA,GAAA,GAAYpD,GAAO,CAAEM,aAAc,cAEnC8C,GAAA,GAAYpD,EAEpB,IAKJiD,EACKE,KAAI,SAAAnD,GACD,MAA6B,YAAzBA,EAAQM,aACR8C,GAAAA,GAAA,GAAYpD,GAAO,CAAEM,aAAc,cAEnC8C,GAAA,GAAYpD,EAEpB,KAMkBmD,KAAI,SAAAE,GAAK,OAAA,IAAItD,GAAgBsD,EAApB,IAGrBxB,EAAeG,YAAYY,EAAYI,GAGzD,OAAOA,CAEV,CAAC,MAAOrL,GAGL,YAF6B,gBAAzB2K,QAAQC,IAAIC,UACZC,QAAQ9K,MAAM,4CAA6CA,GAElE,GAmBSkK,EAAwByB,yBAAtC,SACIV,EACAC,EACAC,EACAC,GAKA,OAFAlB,EAAeG,YAAYY,EAAYC,EAAWM,KAAI,SAAAE,GAAK,OAAA,IAAItD,GAAeqD,GAAAA,GAAA,CAAA,EAAMC,GAAC,CAAE/C,aAAc,cAAc,KAE5GuB,EAAea,uBAAuBE,IA5LlCf,EAAME,OAAW,EACzBF,EAASK,UAA2D,GAgO9EL,CAAA,IC/ND0B,GAAA,WAAA,SAAAA,IAmyBC,CAAD,OA3xBWA,EAAAC,WAAa,SAACtM,EAAcC,EAAcC,GAC7C,IAAM8I,EAAO,IAAIuD,KAAK,GAAIvM,EAAM,CAAEE,KAAIA,IAMtC,OALA+J,OAAOuC,eAAexD,EAAM,OAAQ,CAChCyD,IAAG,WACC,OAAOxM,CACV,IAEE+I,CACX,EAMOqD,EAAUK,WAAG,SAACzM,GACjB,OAAOoM,EAAcC,WAAW,qCAAsCrM,GAAc,QAAS,YACjG,EAMOoM,EAAUM,WAAG,SAAC1M,GACjB,OAAOoM,EAAcC,WAAW,mCAAoCrM,GAAc,QAAS,wBAC/F,EAMOoM,EAAcO,eAAG,SAAC3M,GACrB,OAAOoM,EAAcC,WAAW,mCAAoCrM,GAAc,QAAS,wBAC/F,EAMOoM,EAAUQ,WAAG,SAAC5M,GACjB,OAAOoM,EAAcC,WAAW,+BAAgCrM,GAAc,QAAS,kBAC3F,EAMOoM,EAAUS,WAAG,SAAC7M,GACjB,OAAOoM,EAAcC,WAAW,+CAAgDrM,GAAc,QAAS,+BAC3G,EAMOoM,EAAYU,aAAG,SAAC9M,GACnB,OAAOoM,EAAcC,WAAW,+CAAgDrM,GAAc,QAAS,2BAC3G,EAMOoM,EAAUW,WAAG,SAAC/M,GACjB,OAAOoM,EAAcC,WAAW,mCAAoCrM,GAAc,QAAS,YAC/F,EAMOoM,EAASY,UAAG,SAAChN,GAChB,OAAOoM,EAAcC,WAAW,iCAAkCrM,GAAc,QAAS,qBAC7F,EAMOoM,EAAUa,WAAG,SAACjN,GACjB,OAAOoM,EAAcC,WAAW,oCAAqCrM,GAAc,QAAS,sBAChG,EAMOoM,EAAUc,WAAG,SAAClN,GACjB,OAAOoM,EAAcC,WAAW,oCAAqCrM,GAAc,QAAS,oBAChG,EAMOoM,EAAUe,WAAG,SAACnN,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,oBAC5F,EAMOoM,EAAUgB,WAAG,SAACpN,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,WAC5F,EAMOoM,EAAUiB,WAAG,SAACrN,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,WAC5F,EAMOoM,EAAUkB,WAAG,SAACtN,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,qBAC5F,EAMOoM,EAAWmB,YAAG,SAACvN,GAClB,OAAOoM,EAAcC,WAAW,iCAAkCrM,GAAc,QAAS,0EAC7F,EAMOoM,EAAUoB,WAAG,SAACxN,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,gCAC5F,EAMOoM,EAAWqB,YAAG,SAACzN,GAClB,OAAOoM,EAAcC,WAAW,iCAAkCrM,GAAc,QAAS,uBAC7F,EAMOoM,EAAWsB,YAAG,SAAC1N,GAClB,OAAOoM,EAAcC,WAAW,+BAAgCrM,GAAc,QAAS,mBAC3F,EAMOoM,EAAUuB,WAAG,SAAC3N,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,YAC5F,EAMOoM,EAAUwB,WAAG,SAAC5N,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,YAC5F,EAMOoM,EAAWyB,YAAG,SAAC7N,GAClB,OAAOoM,EAAcC,WAAW,iCAAkCrM,GAAc,QAAS,YAC7F,EAMOoM,EAAU0B,WAAG,SAAC9N,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,2BAC5F,EAMOoM,EAAgB2B,iBAAG,SAAC/N,GACvB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,gBAC5F,EAMOoM,EAAU4B,WAAG,SAAChO,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,2BAC5F,EAMOoM,EAAW6B,YAAG,SAACjO,GAClB,OAAOoM,EAAcC,WAAW,iCAAkCrM,GAAc,QAAS,aAC7F,EAMOoM,EAAU8B,WAAG,SAAClO,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,aAC5F,EAMOoM,EAAS+B,UAAG,SAACnO,GAChB,OAAOoM,EAAcC,WAAW,+BAAgCrM,GAAc,QAAS,kBAC3F,EAMOoM,EAAWgC,YAAG,SAACpO,GAClB,OAAOoM,EAAcC,WAAW,iCAAkCrM,GAAc,QAAS,mBAC7F,EAMOoM,EAAaiC,cAAG,SAACrO,GACpB,OAAOoM,EAAcC,WAAW,mCAAoCrM,GAAc,QAAS,sBAC/F,EAMOoM,EAAUkC,WAAG,SAACtO,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,aAC5F,EAMOoM,EAAYmC,aAAG,SAACvO,GACnB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,eAC5F,EAMOoM,EAAWoC,YAAG,SAACxO,GAClB,OAAOoM,EAAcC,WAAW,iCAAkCrM,GAAc,QAAS,eAC7F,EAMOoM,EAAaqC,cAAG,SAACzO,GACpB,OAAOoM,EAAcC,WAAW,iCAAkCrM,GAAc,QAAS,eAC7F,EAMOoM,EAAUsC,WAAG,SAAC1O,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,kBAC5F,EAMOoM,EAAUuC,WAAG,SAAC3O,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,aAC5F,EAMOoM,EAAUwC,WAAG,SAAC5O,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,YAC5F,EAMOoM,EAAWyC,YAAG,SAAC7O,GAClB,OAAOoM,EAAcC,WAAW,iCAAkCrM,GAAc,QAAS,aAC7F,EAMOoM,EAAW0C,YAAG,SAAC9O,GAClB,OAAOoM,EAAcC,WAAW,iCAAkCrM,GAAc,QAAS,sCAC7F,EAMOoM,EAAU2C,WAAG,SAAC/O,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,kDAC5F,EAMOoM,EAAU4C,WAAG,SAAChP,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,iDAC5F,EAMOoM,EAAU6C,WAAG,SAACjP,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,0CAC5F,EAMOoM,EAAU8C,WAAG,SAAClP,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,YAC5F,EAMOoM,EAAU+C,WAAG,SAACnP,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,YAC5F,EAMOoM,EAAUgD,WAAG,SAACpP,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,kBAC5F,EAMOoM,EAAWiD,YAAG,SAACrP,GAClB,OAAOoM,EAAcC,WAAW,iCAAkCrM,GAAc,QAAS,aAC7F,EAMOoM,EAAUkD,WAAG,SAACtP,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,WAC5F,EAMOoM,EAAUmD,WAAG,SAACvP,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,YAC5F,EAMOoM,EAAUoD,WAAG,SAACxP,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,kBAC5F,EAMOoM,EAAUqD,WAAG,SAACzP,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,0BAC5F,EAMOoM,EAAUsD,WAAG,SAAC1P,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,gCAC5F,EAMOoM,EAAWuD,YAAG,SAAC3P,GAClB,OAAOoM,EAAcC,WAAW,iCAAkCrM,GAAc,QAAS,4EAC7F,EAMOoM,EAAUwD,WAAG,SAAC5P,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,sBAC5F,EAMOoM,EAAUyD,WAAG,SAAC7P,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,kBAC5F,EAMOoM,EAAS0D,UAAG,SAAC9P,GAChB,OAAOoM,EAAcC,WAAW,+BAAgCrM,GAAc,QAAS,mBAC3F,EAMOoM,EAAU2D,WAAG,SAAC/P,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,gBAC5F,EAMOoM,EAAU4D,WAAG,SAAChQ,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,gCAC5F,EAMOoM,EAAU6D,WAAG,SAACjQ,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,oBAC5F,EAMOoM,EAAU8D,WAAG,SAAClQ,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,aAC5F,EAMOoM,EAAW+D,YAAG,SAACnQ,GAClB,OAAOoM,EAAcC,WAAW,iCAAkCrM,GAAc,QAAS,aAC7F,EAMOoM,EAASgE,UAAG,SAACpQ,GAChB,OAAOoM,EAAcC,WAAW,qCAAsCrM,GAAc,QAAS,aACjG,EAMOoM,EAAUiE,WAAG,SAACrQ,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,WAC5F,EAMOoM,EAAWkE,YAAG,SAACtQ,GAClB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,aAC5F,EAMOoM,EAAiBmE,kBAAG,SAACvQ,GACxB,OAAOoM,EAAcC,WAAW,qCAAsCrM,GAAc,QAAS,aACjG,EAMOoM,EAAUoE,WAAG,SAACxQ,GACjB,OAAOoM,EAAcC,WAAW,oCAAqCrM,GAAc,QAAS,wBAChG,EAMOoM,EAAUqE,WAAG,SAACzQ,GACjB,OAAOoM,EAAcC,WAAW,qCAAsCrM,GAAc,QAAS,YACjG,EAMOoM,EAAWsE,YAAG,SAAC1Q,GAClB,OAAOoM,EAAcC,WAAW,sCAAuCrM,GAAc,QAAS,aAClG,EAMOoM,EAAWuE,YAAG,SAAC3Q,GAClB,OAAOoM,EAAcC,WAAW,sCAAuCrM,GAAc,QAAS,aAClG,EAMOoM,EAAWwE,YAAG,SAAC5Q,GAClB,OAAOoM,EAAcC,WAAW,sCAAuCrM,GAAc,QAAS,aAClG,EAMOoM,EAAWyE,YAAG,SAAC7Q,GAClB,OAAOoM,EAAcC,WAAW,iCAAkCrM,GAAc,QAAS,YAC7F,EAMOoM,EAAY0E,aAAG,SAAC9Q,GACnB,OAAOoM,EAAcC,WAAW,kCAAmCrM,GAAc,QAAS,aAC9F,EAMOoM,EAAY2E,aAAG,SAAC/Q,GACnB,OAAOoM,EAAcC,WAAW,kCAAmCrM,GAAc,QAAS,wBAC9F,EAMOoM,EAAW4E,YAAG,SAAChR,GAClB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,2BAC5F,EAMOoM,EAAU6E,WAAG,SAACjR,GACjB,OAAOoM,EAAcC,WAAW,iCAAkCrM,GAAc,QAAS,oEAC7F,EAMOoM,EAAU8E,WAAG,SAAClR,GACjB,OAAOoM,EAAcC,WAAW,+BAAgCrM,GAAc,QAAS,kBAC3F,EAMOoM,EAAc+E,eAAG,SAACnR,GACrB,OAAOoM,EAAcC,WAAW,0CAA2CrM,GAAc,QAAS,kBACtG,EAMOoM,EAAUgF,WAAG,SAACpR,GACjB,OAAOoM,EAAcC,WAAW,gCAAiCrM,GAAc,QAAS,kCAC5F,EAMOoM,EAAUiF,WAAG,SAACrR,GACjB,OAAOoM,EAAcC,WAAW,+BAAgCrM,GAAc,QAAS,kBAC3F,EAMOoM,EAAUkF,WAAG,SAACtR,GACjB,OAAOoM,EAAcC,WAAW,qCAAsCrM,GAAc,QAAS,aACjG,EAMOoM,EAAWmF,YAAG,SAACvR,GAClB,OAAOoM,EAAcC,WAAW,sCAAuCrM,GAAc,QAAS,cAClG,EAMOoM,EAAYoF,aAAG,SAACxR,GACnB,OAAOoM,EAAcC,WAAW,qCAAsCrM,GAAc,QAAS,aACjG,EAMOoM,EAAYqF,aAAG,SAACzR,GACnB,OAAOoM,EAAcC,WAAW,sCAAuCrM,GAAc,QAAS,cAClG,EAMOoM,EAASsF,UAAG,SAAC1R,GAChB,OAAOoM,EAAcC,WAAW,oCAAqCrM,GAAc,QAAS,8BAChG,EAMOoM,EAAauF,cAAG,SAAC3R,GACpB,OAAOoM,EAAcC,WAAW,iCAAkCrM,GAAc,QAAS,aAC7F,EAMOoM,EAAWwF,YAAG,SAAC5R,GAClB,OAAOoM,EAAcC,WAAW,iCAAkCrM,GAAc,QAAS,aAC7F,EAMOoM,EAAYyF,aAAG,SAAC7R,GACnB,OAAOoM,EAAcC,WAAW,qCAAsCrM,GAAc,QAAS,aACjG,EAMOoM,EAAU0F,WAAG,SAAC9R,GACjB,OAAOoM,EAAcC,WAAW,+BAAgCrM,GAAc,QAAS,aAC3F,EAMOoM,EAA0B2F,2BAAG,SAAC/R,GAEjC,IAAIgS,EAAmB,GAyFvB,OAvFAA,EAASC,KAAK7F,EAAcK,WAAWzM,IACvCgS,EAASC,KAAK7F,EAAcM,WAAW1M,IACvCgS,EAASC,KAAK7F,EAAcO,eAAe3M,IAC3CgS,EAASC,KAAK7F,EAAcQ,WAAW5M,IACvCgS,EAASC,KAAK7F,EAAcS,WAAW7M,IACvCgS,EAASC,KAAK7F,EAAcU,aAAa9M,IACzCgS,EAASC,KAAK7F,EAAcW,WAAW/M,IACvCgS,EAASC,KAAK7F,EAAcY,UAAUhN,IACtCgS,EAASC,KAAK7F,EAAca,WAAWjN,IACvCgS,EAASC,KAAK7F,EAAcc,WAAWlN,IACvCgS,EAASC,KAAK7F,EAAce,WAAWnN,IACvCgS,EAASC,KAAK7F,EAAcgB,WAAWpN,IACvCgS,EAASC,KAAK7F,EAAciB,WAAWrN,IACvCgS,EAASC,KAAK7F,EAAckB,WAAWtN,IACvCgS,EAASC,KAAK7F,EAAcmB,YAAYvN,IACxCgS,EAASC,KAAK7F,EAAcoB,WAAWxN,IACvCgS,EAASC,KAAK7F,EAAcqB,YAAYzN,IACxCgS,EAASC,KAAK7F,EAAcsB,YAAY1N,IACxCgS,EAASC,KAAK7F,EAAcuB,WAAW3N,IACvCgS,EAASC,KAAK7F,EAAcwB,WAAW5N,IACvCgS,EAASC,KAAK7F,EAAcyB,YAAY7N,IACxCgS,EAASC,KAAK7F,EAAc0B,WAAW9N,IACvCgS,EAASC,KAAK7F,EAAc2B,iBAAiB/N,IAC7CgS,EAASC,KAAK7F,EAAc4B,WAAWhO,IACvCgS,EAASC,KAAK7F,EAAc6B,YAAYjO,IACxCgS,EAASC,KAAK7F,EAAc8B,WAAWlO,IACvCgS,EAASC,KAAK7F,EAAc+B,UAAUnO,IACtCgS,EAASC,KAAK7F,EAAcgC,YAAYpO,IACxCgS,EAASC,KAAK7F,EAAciC,cAAcrO,IAC1CgS,EAASC,KAAK7F,EAAckC,WAAWtO,IACvCgS,EAASC,KAAK7F,EAAcoC,YAAYxO,IACxCgS,EAASC,KAAK7F,EAAcmC,aAAavO,IACzCgS,EAASC,KAAK7F,EAAcqC,cAAczO,IAC1CgS,EAASC,KAAK7F,EAAcsC,WAAW1O,IACvCgS,EAASC,KAAK7F,EAAcuC,WAAW3O,IACvCgS,EAASC,KAAK7F,EAAcwC,WAAW5O,IACvCgS,EAASC,KAAK7F,EAAcyC,YAAY7O,IACxCgS,EAASC,KAAK7F,EAAc0C,YAAY9O,IACxCgS,EAASC,KAAK7F,EAAc2C,WAAW/O,IACvCgS,EAASC,KAAK7F,EAAc4C,WAAWhP,IACvCgS,EAASC,KAAK7F,EAAc6C,WAAWjP,IACvCgS,EAASC,KAAK7F,EAAc8C,WAAWlP,IACvCgS,EAASC,KAAK7F,EAAc+C,WAAWnP,IACvCgS,EAASC,KAAK7F,EAAcgD,WAAWpP,IACvCgS,EAASC,KAAK7F,EAAciD,YAAYrP,IACxCgS,EAASC,KAAK7F,EAAckD,WAAWtP,IACvCgS,EAASC,KAAK7F,EAAcmD,WAAWvP,IACvCgS,EAASC,KAAK7F,EAAcoD,WAAWxP,IACvCgS,EAASC,KAAK7F,EAAcqD,WAAWzP,IACvCgS,EAASC,KAAK7F,EAAcsD,WAAW1P,IACvCgS,EAASC,KAAK7F,EAAcuD,YAAY3P,IACxCgS,EAASC,KAAK7F,EAAcwD,WAAW5P,IACvCgS,EAASC,KAAK7F,EAAcyD,WAAW7P,IACvCgS,EAASC,KAAK7F,EAAc0D,UAAU9P,IACtCgS,EAASC,KAAK7F,EAAc2D,WAAW/P,IACvCgS,EAASC,KAAK7F,EAAc4D,WAAWhQ,IACvCgS,EAASC,KAAK7F,EAAc6D,WAAWjQ,IACvCgS,EAASC,KAAK7F,EAAc8D,WAAWlQ,IACvCgS,EAASC,KAAK7F,EAAc+D,YAAYnQ,IACxCgS,EAASC,KAAK7F,EAAcgE,UAAUpQ,IACtCgS,EAASC,KAAK7F,EAAciE,WAAWrQ,IACvCgS,EAASC,KAAK7F,EAAckE,YAAYtQ,IACxCgS,EAASC,KAAK7F,EAAcmE,kBAAkBvQ,IAC9CgS,EAASC,KAAK7F,EAAcoE,WAAWxQ,IACvCgS,EAASC,KAAK7F,EAAcqE,WAAWzQ,IACvCgS,EAASC,KAAK7F,EAAcsE,YAAY1Q,IACxCgS,EAASC,KAAK7F,EAAcuE,YAAY3Q,IACxCgS,EAASC,KAAK7F,EAAcwE,YAAY5Q,IACxCgS,EAASC,KAAK7F,EAAcyE,YAAY7Q,IACxCgS,EAASC,KAAK7F,EAAc0E,aAAa9Q,IACzCgS,EAASC,KAAK7F,EAAc2E,aAAa/Q,IACzCgS,EAASC,KAAK7F,EAAc4E,YAAYhR,IACxCgS,EAASC,KAAK7F,EAAc6E,WAAWjR,IACvCgS,EAASC,KAAK7F,EAAc8E,WAAWlR,IACvCgS,EAASC,KAAK7F,EAAc+E,eAAenR,IAC3CgS,EAASC,KAAK7F,EAAcgF,WAAWpR,IACvCgS,EAASC,KAAK7F,EAAciF,WAAWrR,IAMvCgS,EAASC,KAAK7F,EAAcuF,cAAc3R,IAC1CgS,EAASC,KAAK7F,EAAcwF,YAAY5R,IACxCgS,EAASC,KAAK7F,EAAcyF,aAAa7R,IACzCgS,EAASC,KAAK7F,EAAc0F,WAAW9R,IAEhCgS,CACX,EACH5F,CAAA,IAmBY8F,GAAsB,SAC/BnS,EACAC,EACAC,GAEA,YAJA,IAAAF,IAAAA,EAA2C,2CAC3C,IAAAC,IAAAA,EAAa,aACb,IAAAC,IAAAA,EAAkB,aAEXmM,GAAcC,WAAWtM,EAAMC,EAAMC,EAChD,EC9zBCkS,GAAA,WAAA,SAAAA,IAUA,CAAD,OAJWA,EAAAxH,UAAP,WAEI,OADAwH,EAAgBvH,SACTuH,EAAgBvH,QAPpBuH,EAAMvH,OAAG,EASnBuH,CAAA,ICPe,SAAAC,GAAaC,EAAiBC,GAC1C,YADyB,IAAAD,IAAAA,EAAe,QAAE,IAAAC,IAAAA,EAAe,GAClDC,KAAKC,MAAMD,KAAKE,UAAYH,EAAMD,IAAQA,CACrD,CCJO,ICCMK,GAAiB,SAACvT,GAC3B,OAAKA,GAA4B,IAAlBA,EAAOkL,OAGiBlL,EAAO+I,MAAM,KAAK8D,KAAI,SAAC2G,GAAe,OAAAA,EAAWC,MAAM,IAFnF,EAIf,ECFcC,GAAiB,SAAC1T,EAAkB4J,GAI9C,IAHA,IACQhJ,EAAegJ,EAAIhJ,KAAbE,EAAS8I,EAAI9I,KAElBmK,EAAI,EAAGA,EAAIjL,EAAOkL,OAAQD,IAAK,CACpC,IAAMuI,EAAqBxT,EAAOiL,GAElC,GAA0B,IAAtBuI,EAAWtI,OAAc,CAEzB,GAA6B,MAAzBsI,EAAWG,OAAO,IACdH,EAAWjQ,SAASyE,GAAOpH,IAC3B,OAAO,EAKf,GAAIE,GAAQA,EAAKoK,OAAS,GAAKsI,EAAWjQ,SAAS,MAAQzC,EAAKyC,SAAS,KAAM,CAC3E,IAAIuF,EAAa0K,EAAWzK,MAAM,KAAK,GACnCT,EAAWkL,EAAWzK,MAAM,KAAK,GAEjC6K,EAAiB9S,EAAKiI,MAAM,KAAK,GACjC8K,EAAe/S,EAAKiI,MAAM,KAAK,GAEnC,GAAID,IAAe8K,EAAgB,CAE/B,GAAiB,MAAbtL,EACA,OAAO,EACJ,GAAIA,IAAauL,EACpB,OAAO,CAEd,CACJ,CACJ,CACJ,CACD,OAjCqB,CAkCzB,ECqEaC,GAAkB,SAC3BpK,EACAqK,EACAC,EACAC,GAEA,IAAIC,EAAapH,GAAA,CAAA,EAAiBpD,GAC9BI,EAAmB,GAEvB,IAAKJ,EAAQE,KACT,OAAAkD,GAAA,GAAYoH,GAIhB,GAAIH,EAAW,CACX,IACgBI,EADqCJ,EAAUG,EAActK,MACtBE,OACnDqK,GACArK,EAAOgJ,KAAIsB,MAAXtK,EAAeqK,EAEtB,CAEO,IAAA/T,EAAwB4T,EAAc5T,YAAzBJ,EAAWgU,EAAchU,OAGxC4J,EAAaF,EAAQE,KAG3B,GAAIxJ,GAAewJ,EAAK/I,KAAOT,EAAa,CACxC,IAAMiU,EAA2CJ,EAAYzS,aAI7DsI,EAAOgJ,KAAKuB,EAA0BjU,GACzC,CAEGJ,IAAW0T,GAAeH,GAAevT,GAAS4J,IAClDE,EAAOgJ,KAAKmB,EAAYvS,aAE5B,IAAM4S,EAAqC,IAAlBxK,EAAOoB,OAGhC,OAFAgJ,EAAapH,GAAAA,GAAA,CAAA,EAAQoH,GAAe,CAAA/S,MAAOmT,EAASxK,OAASwK,OAAmBjJ,EAATvB,GAI3E,EAWayK,GAAe,SACxB3K,EACAmK,EACAC,EACAC,GAGA,IAAMO,EAAcxB,GAAgBxH,YAChC1B,EAAmB,GACvB,GAAIiK,EACA,OAASjH,GAAA,CAAAnD,GAAI6K,EAAa5K,KAAIA,GAAKmK,EAAUnK,IAGzC,IAAAxJ,EAAwB4T,EAAc5T,YAAzBJ,EAAWgU,EAAchU,OAG9C,GAAII,GAAewJ,EAAK/I,KAAOT,EAAa,CACxC,IAAMiU,EAA2CJ,EAAYzS,aAC7DsI,EAAOgJ,KAAKuB,EAA0BjU,GACzC,CAgBD,OAZIJ,IAAW0T,GAAeH,GAAevT,GAAS4J,IAClDE,EAAOgJ,KAAKmB,EAAYvS,aAIA,CACxBiI,GAAI6K,EACJ5K,KAAMA,EACNzI,MAAyB,IAAlB2I,EAAOoB,OACdpB,OAAQA,EAIhB,ECzMa2K,GACT,CACI,kDACA,8BACA,8CCPM,SAAUC,GACpBC,EACAxK,GAKA,IAFA,IAAMyK,EAA0B/J,OAAOC,KAAKX,GAAa,CAAE,GAElDc,EAAI,EAAGA,EAAI2J,EAAc1J,QAAUf,EAAWc,IAEnD0J,EAASE,OAAOD,EAAc3J,GAAId,EAAUyK,EAAc3J,KAG9D0J,EAASE,OAAO,aAAc,mBAElC,CCdc,SAAUC,GACpB5K,EACA6K,GAKA,IAFA,IAAMC,EAAuBnK,OAAOC,KAAKiK,GAAW,CAAE,GAE7C9J,EAAI,EAAGA,EAAI+J,EAAW9J,QAAU6J,EAAS9J,IAE9Cf,EAAI+K,iBACAD,EAAW/J,GACX8J,EAAQC,EAAW/J,IAK/B,CCda,IAAAiK,GAAyB,CAClChU,SAAS,EACTiU,QAAS,gBACTC,QAAS,CAAE,GAEFC,GAAyB,CAClCnU,SAAS,EACTiU,QAAS,iBACTC,QAAS,CAAE,GAEFE,GAA4B,CACrCpU,SAAS,EACTiU,QAAS,mCACTC,QAAS,CAAE,GAGFG,GAA4B,CACrCrU,SAAS,EACTiU,QAAS,mBACTC,QAAS,CAAE,GAGFI,GAAwB,SAAC9L,GAClC,OAAAoD,GAAAA,GAAA,CAAA,EAEOpD,GACH,CAAAK,cAAe,gDACfC,aAAc,QAEdK,eAAgB,CAAEnJ,SAAS,IAEnC,EC1BauU,GAAoB,SAACvL,GAC9B,IACI,IAAMwL,EAAeC,KAAKC,MAAM1L,EAAI2L,UAC9B3U,EAAewU,EAAaxU,QAC5BiU,EAAkBO,EAAaP,QAQrC,MALoC,CAChCjU,QAA4B,kBAAZA,GAAwBA,EACxCiU,QAA4B,iBAAZA,EAAuBA,EAAU,4BACjDC,QALiBM,EAAaN,SAKV,CAAE,EAG7B,CAAC,MAAO/T,GAEL,OAAOiU,EACV,CACL,EAIaQ,GAA4B,SACrCpM,EACAqM,GAEA,OAAAjJ,GAAAA,GAAA,CAAA,EACOpD,GAAO,CACVW,eAAgB0L,EAChBhM,cAAegM,EAAYZ,QAC3BnL,aAAc,WAGtB,EAGagM,GAA0B,SACnCtM,EACAqM,GAGA,OAAAjJ,GAAAA,GAAA,CAAA,EACOpD,GAAO,CACVK,cAAegM,EAAYZ,QAC3BnL,aAAc,QACdK,eAAgB0L,GAExB,ECnCaE,GAAiB,SAC1B/L,EACAgM,EACAC,EACAC,EACArB,GAEA,YALA,IAAAmB,IAAAA,EAAmC,QAK5B,IAAIG,SAAwB,SAACC,EAASC,GAGzC,IAAMC,EAAsB,CAAC,OAAQ,MAAO,SAASjT,SAAS2S,EAAOO,eAAiBP,EAAS,OAM/FhM,EAAIwM,OAAOC,OAAS,WAEpB,EACAzM,EAAIwM,OAAOE,UAAY,WAAM,OAAAN,EAAQpB,KACrChL,EAAIwM,OAAOG,QAAU,WAEjBP,EAAQjB,GACZ,EACAnL,EAAI4M,UAAY,SAAOC,GAAC,OAAAC,QAAA,OAAA,OAAA,GAAA,wDAQxB9M,EAAI+M,mBAAqB,SAAOF,GAAC,OAAAC,QAAA,OAAA,OAAA,GAAA,8CAOjB9M,EAAIgN,WAEO,IAAnBhN,EAAIgN,aACiB,KAAjBhN,EAAI2L,SAEJS,EAAQb,GAAkBvL,IAQ1BoM,EAAQjB,gBAQpBnL,EAAIiN,KAAKX,EAAaL,GAAU,GAGhCrB,GAAW5K,EAAK6K,GAEhB7K,EAAIkN,KAAKhB,EACb,GAEJ,EA8GO,IC9LMiB,GACb,CAEIC,UAAW,UACXC,WAAY,UACZC,OAAQ,UACRC,WAAY,UACZC,YAAa,UACbC,QAAS,UACTC,IAAK,UACLC,UAAW,UACXC,QAAS,UAETC,KAAM,UACNC,UAAW,UACXC,QAAS,UACTC,SAAU,UACVC,gBAAiB,UACjBC,cAAe,UAGfC,MAAO,UACPC,OAAQ,UACRC,UAAW,UACXC,WAAY,UACZC,OAAQ,UAERC,KAAM,UACNC,OAAQ,UACRC,YAAa,UACbC,aAAc,UACdC,qBAAsB,UACtBC,WAAY,UACZC,SAAU,UACVC,UAAW,UACXC,cAAe,UACfC,MAAO,UACPC,UAAW,UAEXC,SAAU,UACVC,QAAS,UACTC,KAAM,UACNC,OAAQ,UACRC,OAAQ,UACRC,QAAS,UACTC,QAAS,UACTC,aAAc,UACdC,aAAc,UACdC,cAAe,UACfC,WAAY,UACZC,WAAY,UACZC,WAAY,UACZC,YAAa,UACbC,OAAQ,UACRC,OAAQ,UACRC,UAAW,UACXC,cAAe,UACfC,gBAAiB,UAEjBC,YAAa,UACbC,WAAY,UACZC,UAAW,UACXC,KAAM,UACNC,UAAW,UACXC,UAAW,UACXC,WAAY,UACZC,kBAAmB,UACnBC,YAAa,UACbC,eAAgB,UAChBC,SAAU,UACVC,YAAa,UACbC,MAAO,UACPC,UAAW,UACXC,YAAa,UACbC,UAAW,UACXC,MAAO,UACPC,eAAgB,UAChBC,iBAAkB,UAClBC,aAAc,UACdC,cAAe,UACfC,SAAU,UACVC,KAAM,UAENC,KAAM,UACNC,KAAM,UACNC,UAAW,UACXC,cAAe,UACfC,WAAY,UACZC,UAAW,UACXC,gBAAiB,UACjBC,cAAe,UACfC,UAAW,UACXC,UAAW,UACXC,eAAgB,UAChBC,WAAY,UACZC,UAAW,UACXC,QAAS,UACTC,aAAc,UACdC,YAAa,UACbC,WAAY,UACZC,eAAgB,UAEhBC,UAAW,UACXC,KAAM,UACNC,WAAY,UACZC,SAAU,UACVC,KAAM,UACNC,aAAc,UAEdC,SAAU,UACVC,eAAgB,UAChBC,OAAQ,UACRC,YAAa,UACbC,MAAO,UACPC,UAAW,UACXC,IAAK,UACLC,UAAW,UACXC,WAAY,UACZC,UAAW,UACXC,cAAe,UACfC,KAAM,UACNC,UAAW,UACXC,YAAa,UACbC,OAAQ,UACRC,MAAO,UACPC,OAAQ,UAERC,MAAO,UACPC,KAAM,UACNC,SAAU,UACVC,UAAW,UACXC,MAAO,UACPC,UAAW,UACXC,WAAY,UACZC,WAAY,UACZC,SAAU,UACVC,MAAO,UACPC,QAAS,UACTC,YAAa,UACbC,MAAO,UACPC,aAAc,UACdC,MAAO,UACPC,cAAe,UACfC,UAAW,UAEXC,UAAW,UACXC,UAAW,UACXC,OAAQ,UACRC,SAAU,UACVC,KAAM,UACNC,QAAS,UACTC,eAAgB,UAChBC,UAAW,UACXC,cAAe,UACfC,MAAO,WC9EEC,GAAgB,SAACC,EAAgCC,EAAUC,QAAV,IAAAD,IAAAA,EAAQ,GAClE,IAAIE,EAAwBD,GAA8B,2BAC1D,IAAKF,EACD,OAAOG,EAGX,IAAMC,EAAgBJ,EAAW3J,cAEjC,GAAI+J,EAAMjd,SAAS,QACf,OAAOid,EAIX,GAAIA,EAAMjd,SAAS,OACf,OAAOid,EAAMC,QAAQ,MAAO,QAAQA,QAAQ,IAAK,YAAKJ,EAAI,MAI9D,IAAKK,GAAWC,GAAgBH,IAC5B,OAAOD,EAEX,IAEIK,EACAC,EACAC,EAMJ,OAJAF,EAAyC,GAA5BG,GAASP,EAAM7M,OAAO,IAAWoN,GAASP,EAAM7M,OAAO,IACpEkN,EAAyC,GAA5BE,GAASP,EAAM7M,OAAO,IAAWoN,GAASP,EAAM7M,OAAO,IACpEmN,EAAyC,GAA5BC,GAASP,EAAM7M,OAAO,IAAWoN,GAASP,EAAM7M,OAAO,IACzD,QAAQhU,OAAAihB,EAAe,MAAAjhB,OAAAkhB,cAAcC,EAAU,OAAAnhB,OAAM0gB,EAAI,IAExE,EAUaK,GAAa,SAACN,GAGvB,GAA6B,MAAzBA,EAAWzM,OAAO,GAElB,OAAO,EAGX,GAA0B,IAAtByM,EAAWlV,OAGX,OAAO,EAGX,IAAK,IAAID,EAAI,EAAGA,EAAImV,EAAWlV,OAAQD,IACnC,IAAK+V,GAASzd,SAAS6c,EAAWzM,OAAO1I,IAGrC,OAAO,EAIf,OAAO,CACX,EAUM,SAAU0V,GAAgBM,GAI5B,OAAKA,OAM4C5V,IAA7CgM,GAAa4J,EAAOC,qBACb7J,GAAa4J,EAAOC,qBAMxBD,EAZI,EAaf,CAOA,IAAMD,GAAW,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACvFG,GAAW,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IASvDJ,GAAW,SAACK,GACrB,OAAIJ,GAASzd,SAAS6d,GACXD,GAASH,GAASK,QAAQD,IAE1B,CAEf,EAUaE,GAAa,SAACd,GACvB,YAAcnV,IAAVmV,GAAiC,KAAVA,EAChBA,EAEAe,EAEf,EAgBaA,GAAqB,8iBtB5MO,SAACne,GACtC,OAAQA,GACJ,IAAK,QAAS,OAAOH,EAAkB,SACvC,IAAK,QAOL,QAAS,OAAOA,EAAkB,SANlC,IAAK,QAAS,OAAOA,EAAkB,SACvC,IAAK,QAAS,OAAOA,EAAkB,SACvC,IAAK,QAAS,OAAOA,EAAkB,SACvC,IAAK,QAAS,OAAOA,EAAkB,SACvC,IAAK,QAAS,OAAOA,EAAkB,SACvC,IAAK,QAAS,OAAOA,EAAkB,SAG/C,8KoB8JyB,SACrBiH,EACAgM,EACAC,EACAC,EACArB,GAEA,OAAO,IAAIsB,SAAwB,SAACC,EAASC,GAGzCrM,EAAIwM,OAAOC,OAAS,WAEpB,EAEAzM,EAAIwM,OAAOE,UAAY,WAAM,OAAAN,EAAQpB,KACrChL,EAAIwM,OAAOG,QAAU,WAAM,OAAAP,EAAQjB,KAKnCnL,EAAI+M,mBAAqB,SAAOF,GAAC,OAAAC,QAAA,OAAA,OAAA,GAAA,8CAIN,IAAnB9M,EAAIgN,aACiB,KAAjBhN,EAAI2L,SAEJS,EAAQb,GAAkBvL,IAG1BoM,EAAQf,gBAOpBrL,EAAIiN,KAAKjB,EAAQC,GAAU,GAG3B,IAFA,IAAMnB,EAAuBnK,OAAOC,KAAKiK,GAEhC9J,EAAI,EAAGA,EAAI+J,EAAW9J,OAAQD,IAEnCf,EAAI+K,iBACAD,EAAW/J,GACX8J,EAAQC,EAAW/J,KAI3Bf,EAAIkN,KAAKhB,EACb,GAEJ,unBGjP4B,SACxBoL,EACAC,GAEA,OAAIA,EACO,GAAG9hB,OAAA6hB,EAAiB,KAAA7hB,OAAA8hB,GACxBD,CACX,8LD6B6B,SAACpB,EAAoBsB,QAAA,IAAAA,IAAAA,EAAe,IAC7D,IAAIC,EAAgB,GACdC,GAAY,IAAMF,GAAc,IAClCd,EAAqB,EACrBC,EAAqB,EACrBC,EAAqB,EACzB,GAAIJ,GAAWC,GAAgBP,IAE3BQ,EAA8C,GAAjCG,GAASX,EAAWzM,OAAO,IAAWoN,GAASX,EAAWzM,OAAO,IAC9EkN,EAA8C,GAAjCE,GAASX,EAAWzM,OAAO,IAAWoN,GAASX,EAAWzM,OAAO,IAC9EmN,EAA8C,GAAjCC,GAASX,EAAWzM,OAAO,IAAWoN,GAASX,EAAWzM,OAAO,IAE9EgO,EAAgB,OAAAhiB,OAAOihB,EAAagB,EAAa,MAAAjiB,OAAAkhB,EAAae,EAAY,KAAAjiB,OAAAmhB,EAAac,YAEvF,GAAIxB,EAAW7c,SAAS,QAAS,CAC7B,IACIse,EADSzB,EAAWK,QAAQ,QAAS,IACP1X,MAAM,KACxC4Y,EAAgB,OAAOhiB,OAAAmiB,SAASD,EAAW,GAAI,IAAMD,eAAaE,SAASD,EAAW,GAAI,IAAMD,EAAQ,KAAAjiB,OAAImiB,SAASD,EAAW,GAAI,IAAMD,MAE7I,MAAM,GAAIxB,EAAW7c,SAAS,OAAQ,CAG/Bse,EADSzB,EAAWK,QAAQ,OAAQ,IACN1X,MAAM,KACxC4Y,EAAgB,OAAOhiB,OAAAmiB,SAASD,EAAW,GAAI,IAAMD,eAAaE,SAASD,EAAW,GAAI,IAAMD,EAAQ,KAAAjiB,OAAImiB,SAASD,EAAW,GAAI,IAAMD,MAE7I,CAGL,OAAOD,CACX,qFXnE0B,SAACI,GAClBA,IACLA,EAAaC,MAAQ,GACzB,wDWuNkC,SAACxB,EAAgBH,GAE/C,YAF+C,IAAAA,IAAAA,EAAQ,GAEhDF,GAAcmB,GAAWX,GAAgBH,IAASH,EAE7D,+BElMoC,SAChC3W,EACAW,EACA4X,GAEA,MAAO,CACHtY,GAAID,EAAQC,GACZuY,aACOpV,GAAAA,GAAA,CAAA,EAAApD,GACH,CAAAK,cAAeM,EAAe8K,QAC9BnL,aAAciY,IAElB5X,eAAgBA,EAExB,oChBiwByC,SAACxJ,GACtC,OAAOoM,GAAc2F,2BAA2B/R,EACpD,4DiB5vBkC,SAC9BshB,EACAjM,EACAnB,EACAqN,EACAC,GAEA,MAAO,CACHF,IAAGA,EACHjM,OAAMA,EACNnB,QAAOA,EACPqN,YAAWA,EACXC,cAAaA,EAErB,gEH5D2B,SAACjC,EAAoBsB,QAAA,IAAAA,IAAAA,EAAe,IAC3D,IAAIY,EAAc,GACZC,GAAU,IAAMb,GAAc,IAChCd,EAAqB,EACrBC,EAAqB,EACrBC,EAAqB,EACzB,GAAIJ,GAAWC,GAAgBP,IAE3BQ,EAA8C,GAAjCG,GAASX,EAAWzM,OAAO,IAAWoN,GAASX,EAAWzM,OAAO,IAC9EkN,EAA8C,GAAjCE,GAASX,EAAWzM,OAAO,IAAWoN,GAASX,EAAWzM,OAAO,IAC9EmN,EAA8C,GAAjCC,GAASX,EAAWzM,OAAO,IAAWoN,GAASX,EAAWzM,OAAO,IAE9E2O,EAAc,OAAA3iB,OAAOihB,EAAa2B,EAAW,MAAA5iB,OAAAkhB,EAAa0B,EAAU,KAAA5iB,OAAAmhB,EAAayB,YAEjF,GAAInC,EAAW7c,SAAS,QAAS,CAC7B,IACIse,EADSzB,EAAWK,QAAQ,QAAS,IACP1X,MAAM,KACxCuZ,EAAc,OAAO3iB,OAAAmiB,SAASD,EAAW,GAAI,IAAMU,eAAWT,SAASD,EAAW,GAAI,IAAMU,EAAM,KAAA5iB,OAAImiB,SAASD,EAAW,GAAI,IAAMU,MAEvI,MAAM,GAAInC,EAAW7c,SAAS,OAAQ,CAG/Bse,EADSzB,EAAWK,QAAQ,OAAQ,IACN1X,MAAM,KACxCuZ,EAAc,OAAO3iB,OAAAmiB,SAASD,EAAW,GAAI,IAAMU,eAAWT,SAASD,EAAW,GAAI,IAAMU,EAAM,KAAA5iB,OAAImiB,SAASD,EAAW,GAAI,IAAMU,MAEvI,CAGL,OAAOD,CACX,mFI/B2B,SAAC3Y,GACxB,MAAO,CACHA,GAAIA,GAAMqJ,GAAgBxH,YAC1B5K,KAAM,eACNC,KAAM,SACNC,KAAM,gBACN8I,KAAMmJ,GAAoB,eAAgB,SAAkB,iBAC5DjJ,OAAQ2K,GACR1K,cAAe,WACfC,aAAc,YACd7I,OAAO,EACP8I,SAAU,GACVC,IAAK,IAAIsY,eACTrY,UAAW,CACPsY,WAAY,uBACZC,WAAY,CACR/Y,GAAI,EACJ/I,KAAM,iBAEV+hB,SAAS,GAEbrY,YAAa,8CAErB,+BC1BoC,SAChCgC,EACAsW,GAEA,IAEIC,EACAtX,GAAea,uBAAuBE,GAG1C,GAAIuW,EAAe,CAWf,IAAIC,EAAajX,GAAA,GAAkB+W,GAAgB,GASnD,GARAE,EAAgBA,EAAclW,QAC1B,SAACG,GAAM,OAAkD,KAAlD8V,eAAAA,EAAeE,WAAU,SAAAC,GAAK,OAAAA,EAAErZ,KAAOoD,EAAEpD,EAAX,IAAqB,IAO1DkZ,EAAc3X,SAAW0X,EAAiB1X,QAAsC,IAA5B0X,EAAiB1X,OACrE,OAEJ,IAAK,IAAID,EAAI,EAAGA,EAAI4X,EAAc3X,OAAQD,SAEII,IAArCuX,EAAiB3X,GAAGjB,cAEc,cAAlC6Y,EAAc5X,GAAGjB,eAGlB6Y,EAAc5X,GAAGjB,kBAAeqB,EAG3C,CAED,MAzCwB,EA0C5B,qDC2D6B,SACzBX,EACAxH,QAAA,IAAAA,IAAAA,EAAoBC,EAA0B,UAG9C,IAAMuG,EAAkBgB,EAAgBD,YAExC,OAAO,IAAI4L,SAAQ,SAACC,EAASC,GACzB0M,YAAW,WAEP,GAD6B7P,KAAKC,MAAsB,GAAhBD,KAAKE,UAC1B,GAAM,EAAG,CACxB,IAAMpS,GAAU,EACViU,EAAUjS,EAAkB1C,kBAC5B4U,EAAU,CAAE+M,IAAK,IACvB7L,EAAOxJ,GAAAA,GAAA,CAAA,EACApD,GAAO,CACVW,eAAgB,CAAEnJ,QAAOA,EAAEiU,QAAOA,EAAEC,QAAOA,GAC3CpL,aAAc,UACdD,cAAeoL,IAGtB,KAAM,CACGjU,GAAU,EACViU,EAAUjS,EAAkBzC,gBAC5B2U,EAAU,CAAA,EAChBkB,EAAOxJ,GAAAA,GAAA,CAAA,EACApD,GAAO,CACVW,eAAgB,CAAEnJ,QAAOA,EAAEiU,QAAOA,EAAEC,QAAOA,GAC3CpL,aAAc,QACdD,cAAeoL,IAEtB,CACJ,GAAE,KACP,GACJ,iCCpIsC,SAAC+N,GAEnC,IADA,IAAIC,EAA0B,GACrBlY,EAAI,EAAGmY,SAAUA,EAAIF,EAASjY,GAAKA,IACxCkY,EAAarQ,KAAK,CAAEnJ,GAAIqJ,GAAgBxH,YAAa5B,KAAMwZ,EAAGxiB,KAAMwiB,EAAExiB,KAAMC,KAAMuiB,EAAEviB,KAAMC,KAAMsiB,EAAEtiB,OAEtG,OAAOqiB,CACX,yCAO8C,SAACD,GAE3C,IADA,IAAIC,EAAkC,GAC7BlY,EAAI,EAAGmY,SAAUA,EAAIF,EAASjY,GAAKA,IACxCkY,EAAarQ,KAAK,IAAIrJ,GAAgB,CAAEE,GAAIqJ,GAAgBxH,YAAa5B,KAAMwZ,EAAGxiB,KAAMwiB,EAAExiB,KAAMC,KAAMuiB,EAAEviB,KAAMC,KAAMsiB,EAAEtiB,QAE1H,OAAOqiB,CACX,4BfXiC,SAC7BE,EACAC,EACAC,EACAxP,EACAxT,EACAijB,GASA,IAPA,IAAMC,EAAoB,GAEtBC,EAAoBJ,EAElBK,EACFrgB,EAA+BkgB,GAE1BvY,EAAI,EAAGmY,SAAUA,EAAIC,EAAkBpY,GAAKA,IAAK,CAEtD,IAAI2Y,EAAyBrP,GAAa6O,EAAGrP,EAAWwP,EAAgBI,GACxE,GAAIC,EAAcziB,MAAO,CAErB,IAAMA,EAAQuiB,EAAY,EAG1B,GAFAE,EAAcziB,MAAQA,GAEjBA,EAAO,CACR,IAAM0iB,EAAuCF,EAAyBhiB,aACtEiiB,EAAc9Z,OAAS8Z,EAAc9Z,OAChC+B,GAAAA,GAAA,GAAK+X,EAAc9Z,YAAQ+Z,EAAsBtjB,GAAYujB,UAC5D,CAACD,EAAsBtjB,GAAYujB,KAC5C,CACDJ,GACH,CACDD,EAAO3Q,KAAK8Q,EACf,CACD,OAAOH,CACX,qHgB1CM,SACFM,GAEA,OAAO,IAAI1N,SAAQ,SAACC,EAASC,GAEzB,GAAKwN,GAAsC,IAAvBA,EAAY7Y,OAMhC,IAGI,IAAI8Y,EAAwB,IAAIC,MAChCD,EAAIE,IAAMH,EACVC,EAAIG,QAAU,SAACC,GAEX7N,EAAO,YACX,EACAyN,EAAIrN,OAAS,WACT,IAAI0N,EAAgBL,EAAIK,MACpBC,EAAiBN,EAAIM,OAErBhO,EADA+N,EAAQC,EACA,YAEA,WAEhB,CACH,CAAC,MAAOjjB,GAGwB,gBAAzB2K,QAAQC,IAAIC,UACZC,QAAQ9K,MAAM,6DAElBkV,EAAO,YACV,MA5BGA,EAAO,YA6Bf,GACJ,+BCvCoC,SAChC3M,EACAhJ,EACAE,EACAD,GAGA,IAAI0jB,EAAwB,GACxBC,OAAoCnZ,EACpCoZ,OAAoCpZ,EAaxC,OATIzB,GAA6B,iBAAdA,EAAKhJ,MACpB2jB,EAAgB3a,EAAKhJ,KACrB4jB,EAAgB5a,EAAK9I,KACrB2jB,EAAgB7a,EAAK/I,MACdD,GAAwB,iBAATA,IACtB2jB,EAAgB3jB,EAChB4jB,EAAgB1jB,EAChB2jB,EAAgB5jB,GAEb,CAAC0jB,EAAeC,EAAeC,EAC1C,gD1B0O6B,SACzB7a,EACA8a,GAGA,IAAIxc,EAAyB,WAE7B,IAAK0B,EAED,OADA1B,EAASE,IACLsc,aAAA,EAAAA,EAAalb,UACN,CAAE2Y,IAAKuC,aAAW,EAAXA,EAAalb,SAAUmb,WAAYzc,GAE9C,CAAEia,IAAK/Y,GAAYlB,GAASyc,WAAYzc,GAE/CA,EAASU,GAAagB,EAAK9I,MAG/B,IAAM8jB,EAAoB5c,GAAO4B,EAAKhJ,MAEvB,SAAXsH,IACAA,EAASiB,GAAYyb,IAIrB1c,IAAWE,KACXF,EAASc,GAAkB4b,IAG/B,IAAMC,EAAYH,eAAAA,EAAcxc,GAChC,YAAkBmD,IAAdwZ,EACO,CAAE1C,IAAK0C,EAAWF,WAAYzc,GAGlC,CAAEia,IAAK/Y,GAAYlB,GAASyc,WAAYzc,EACnD,uCAM4C,SACxCtH,EACAE,EACA4jB,GAGA,IAAIxc,EAAyB,QAE7B,IAAKtH,EAED,OADAsH,EAASE,IACLsc,aAAA,EAAAA,EAAalb,UACN,CAAE2Y,IAAKuC,aAAW,EAAXA,EAAalb,SAAUmb,WAAYzc,GAC9C,CAAEia,IAAK/Y,GAAYlB,GAASyc,WAAYzc,GAE/CA,EAASU,GAAa9H,GAG1B,IAAM8jB,EAAoB5c,GAAOpH,GAElB,SAAXsH,IACAA,EAASiB,GAAYyb,IAIrB1c,IAAWE,KACXF,EAASc,GAAkB4b,IAE/B,IAAMC,EAAYH,eAAAA,EAAcxc,GAChC,YAAkBmD,IAAdwZ,EACO,CAAE1C,IAAK0C,EAAWF,WAAYzc,GAElC,CAAEia,IAAK/Y,GAAYlB,GAASyc,WAAYzc,EACnD,4KmB7Q2C,SACvCwB,GAEA,MAA6B,cAAzBA,EAAQM,cAERN,EAAQM,aAAe,YAEvB8C,GAAAA,GAAA,GACOpD,GAAO,CACVM,aAAc,eAGfN,CACX,oDQ/EmC,SAACA,EAAkBob,GAClD,QAASA,GAAsBA,GAAqBpb,EAAQvI,QAAoC,YAAzBuI,EAAQM,YACnF,2BCJgC,SAC5BhK,EACAI,EACAG,EACAwT,GAEA,OACE,MAAC/T,GACD,MAACI,GACD,MAACG,GACA,MAAAwT,CAEL,qKdTgC,SAAC7S,EAAciU,EAAiBC,GAE9D,MAD+B,CAAElU,QAASA,EAASiU,QAASA,EAASC,QAASA,EAElF,oEeUqC,SACjCxL,EACAzI,EACA6I,EACAD,QAFA,IAAA5I,IAAAA,EAASiS,KAAK2R,KAAqB,GAAhB3R,KAAKE,UAAiB,GAAM,GAK/C,IAAIxJ,EAA+B,GAC/Bkb,EAAiBhb,GCZa,WAElC,OADuBiJ,GAAa,EAAG,IAEnC,KAAK,EAAG,MAAO,QACf,KAAK,EAAG,MAAO,YACf,KAAK,EAAG,MAAO,UACf,QACI,OAEZ,CDGyCgS,GAEjCC,EAA0Cnb,GAAiB,GAC/D,GAAI5I,EAAO,CAEP,IAAK4I,EACD,OAAQib,GACJ,IAAK,QAASE,EAAsB,oCAAqC,MACzE,IAAK,UAAWA,EAAsB,+BAAgC,MACtE,QAASnb,OAAgBsB,EAGjCvB,OAASuB,CACZ,KAAM,CAEH,IAAM8Z,EAAkBlS,GAAa,EAAG,GACxCnJ,EAAOgJ,KAAK2B,GAAa0Q,IACzBH,OAAiB3Z,EACjB6Z,OAAsB7Z,CACzB,CAUD,MARkC,CAC9B1B,GAAIqJ,GAAgBxH,YACpBrK,MAAOA,EACPyI,KAAMA,EACNI,aAAcgb,EACdjb,cAAemb,EACfpb,OAAQA,EAGhB,uUNU+B,SAC3BY,GAGA,OAAO,IAAI2L,SAAQ,SAACC,EAASC,GACzB0M,YAAW,WACPvY,EAAgBV,aAAe,YAC/BsM,WACO5L,GAAe,CAClBV,aAAc,cAErB,GAAE,KAEP,GACJ,+BJUoC,SAChCN,GAEA,OAAO,IAAI2M,SAAQ,SAACC,EAASC,GACzB0M,YAAW,WACsB,cAAzBvZ,EAAQM,cAERN,EAAQM,aAAe,YAEvBsM,WACO5M,GAAO,CACVM,aAAc,gBAGlBsM,EAAQ5M,EACf,GAAE,KACP,GACJ,6FYdiC,SAACE,EAAmBwb,EAAuBC,GACxE,OAAO,IAAIhP,SAA4B,SAACC,EAASC,GAC7C,IACI,IAAM+O,EAAS,IAAIC,WACnBD,EAAO3O,OAAS,WACZL,EAAQgP,EAAOpd,OACnB,EACAod,EAAOE,WAAa,WAChBJ,SAAAA,GACJ,EACAE,EAAOnB,QAAU,WACbkB,SAAAA,GACJ,EACAC,EAAOG,kBAAkB7b,EAC5B,CAAC,MAAOvI,GACLkV,OAAOlL,EACV,CACL,GACJ,6BA5CkC,SAACzB,EAAmBwb,EAAuBC,GACzE,OAAO,IAAIhP,SAA4B,SAACC,EAASC,GAC7C,IACI,IAAMmP,EAAS,IAAIH,WACnBG,EAAO/O,OAAS,WACZL,EAAQoP,EAAOxd,OACnB,EACAwd,EAAOF,WAAa,WAChBJ,SAAAA,GACJ,EACAM,EAAOvB,QAAU,WACbkB,SAAAA,GACJ,EACAK,EAAOC,mBAAmB/b,EAC7B,CAAC,MAAOvI,GACLkV,OAAOlL,EACV,CACL,GACJ,wBA5E6B,SAACzB,EAAmBwb,EAAuBC,GACpE,OAAO,IAAIhP,SAA4B,SAACC,EAASC,GAC7C,IACI,IAAMqP,EAAS,IAAIL,WACnBK,EAAOJ,WAAa,WAChBJ,SAAAA,GACJ,EACAQ,EAAOzB,QAAU,WACbkB,SAAAA,GACJ,EACAO,EAAOjP,OAAS,WACZL,EAAQsP,EAAO1d,OACnB,EACA0d,EAAOC,cAAcjc,EACxB,CAAC,MAAOvI,GACLkV,OAAOlL,EACV,CACL,GACJ,qBAY0B,SAACzB,EAAmBkc,EAAmBV,EAAuBC,GACpF,OAAO,IAAIhP,SAA4B,SAACC,EAASC,GAC7C,IACI,IAAMwP,EAAS,IAAIR,WACnBQ,EAAOpP,OAAS,WACZL,EAAQyP,EAAO7d,OACnB,EACA6d,EAAOP,WAAa,WAChBJ,SAAAA,GACJ,EACAW,EAAO5B,QAAU,WACbkB,SAAAA,GACJ,EACAU,EAAOC,WAAWpc,EAAMkc,GAAsB,SACjD,CAAC,MAAOzkB,GACLkV,OAAOlL,EACV,CACL,GACJ,+BC7CI4a,EACAC,EACAC,GAEA,YAHA,IAAAD,IAAAA,EAAc,UACd,IAAAC,IAAAA,EAAe,KAER,IAAI9P,SAAQ,SAACC,EAASC,GACzB,IACI,IAAIyN,EAAwB,IAAIC,MAChCD,EAAIE,IAAM+B,EACVjC,EAAIrN,OAAS,WACT,IAAIyP,EAA4BC,SAASC,cAAc,UACjDC,EAAoBL,EACpBM,EAAqBL,EACvB9B,EAAgBL,EAAIK,MACpBC,EAAiBN,EAAIM,OAErB4B,EAAW7B,GAAS8B,EAAY7B,EAChChO,EAAQ2P,GAEJ5B,EAAQC,EACJD,EAAQkC,IACRjC,GAAUiC,EAAYlC,EACtBA,EAAQkC,GAGRjC,EAASkC,IACTnC,GAASmC,EAAalC,EACtBA,EAASkC,GAGrBJ,EAAO/B,MAAQA,EACf+B,EAAO9B,OAASA,EAChB,IAAImC,EAAuCL,EAAOM,WAAW,MACzDD,GACAA,EAAIE,UAAU3C,EAAK,EAAG,EAAGK,EAAOC,GAChChO,EAAQ8P,EAAOQ,eAGc,gBAAzB5a,QAAQC,IAAIC,UACZC,QAAQ9K,MAAM,mDAElBkV,OAAOlL,GAEf,CACH,CAAC,MAAOhK,GACwB,gBAAzB2K,QAAQC,IAAIC,UACZC,QAAQ9K,MAAM,mDAElBkV,OAAOlL,EACV,CACL,GACJ,4CbiEkC,SAACwb,GAE/B,OAAOA,EAAWja,QAAO,SAAClC,SACtB,QAA0B,QAAzBoc,EAAApc,EAAgBP,iBAAS,IAAA2c,OAAA,EAAAA,EAAEnE,YAE3B9V,KAAI,SAACnC,GAOF,MANqC,YAAjCA,EAAgBV,cACZU,EAAgBX,gBAEpBW,EAAgBX,cAAgB,0BAG7BN,GAAgBgB,UAAUC,EACrC,GACR,wEAMmC,SAC/BA,EACAqc,GAEA,IAAMC,EAAuCtc,EAAgBV,aACvDid,EAAwCF,EAAW/c,aAKtC,cAAfgd,GACA,CAAC,eAAW3b,GAAW9H,SAAS0jB,IAEhCvc,EAAgBV,kBAAeqB,EAC/BX,EAAgBX,cAAgBgd,EAAWhd,eAG5B,cAAfid,GACA,CAAC,eAAW3b,GAAW9H,SAAS0jB,KAEhCvc,EAAgBV,aAAe,UAC/BU,EAAgBX,cAAgBgd,EAAWhd,cAInD,6BIjKkC,SAC9BL,GAGA,OAAO,IAAI2M,SAAQ,SAACC,EAASC,GACzB0M,YAAW,WACP3M,WACO5M,GAAO,CACVM,aAAc,cAErB,GAAE,KAEP,GACJ,sDUb0B,SAACkd,EAAWC,QAAX,IAAAD,IAAAA,EAAS,SAAE,IAAAC,IAAAA,GAAY,GAC9C,IAAIC,EAAUF,EAQd,OAPIC,EACID,EAAKhc,QAAU,KACfkc,EAAUF,EAAKG,MAAM,EAAG,IAAM,MAAQH,EAAKG,OAAO,IAE/CH,EAAKhc,QAZiB,KAa7Bkc,EAAUF,EAAKG,MAAM,EAAG,IAAM,MAAQH,EAAKG,OAAO,IAE/CD,CACX,yBV2B8B,SAC1BE,GAGA,YAHA,IAAAA,IAAAA,EAA4B,KAGrB,IAAIjR,SAAQ,SAACC,EAASC,GAEzB0M,YAAW,WACP3M,GACH,GAAEgR,EAEP,GACJ,0BJuD+B,SAACC,GAE5B,YAF4B,IAAAA,IAAAA,EAAW,MAEhC,IAAIlR,SAAQ,SAACC,EAASC,GACzB0M,YAAW,WACP3M,GAAQ,EACX,GAAEiR,EACP,GACJ,wHAlEuC,SACnCC,GAEA,OAAKA,EACEA,EAAY3a,KAAI,SAAAnD,GACnB,OAAAoD,GAAAA,GAAA,CAAA,EAAYpD,GAAS,CAAAQ,IAAK,IAAIsY,gBAClC,IAHyB,EAI7B,oEA7CoC,SAChC9Y,GAEA,MAAO,CACHC,GAAID,EAAQC,GACZuY,aAAYpV,GAAAA,GAAA,CAAA,EACLpD,GAAO,CACVK,cAAe,yCACfC,aAAc,UAElBK,eAAgB,CACZnJ,SAAS,EACTiU,QAAS,2DACTC,QAAS,CAAE,GAGvB,sCA5B2C,SAAC1L,GACxC,OACOoD,GAAAA,GAAA,CAAA,EAAApD,GACH,CAAAK,cAAe,mBACfC,aAAc,QACdK,eAAgB,CACZnJ,SAAS,EACTiU,QAAS,qCACTC,QAAS,CAAE,IAGvB,wBJkF6B,SACzB1L,EACAyY,EACAjM,EACAnB,EACAqN,GAAoB,OAAApL,QAAA,OAAA,OAAA,GAAA,uCAEpB,MAAA,CAAA,EAAO,IAAIX,SAAQ,SAAOC,EAASC,GAAM,OAAAS,QAAA,OAAA,OAAA,GAAA,8EAIjC,8BAFMyQ,EAAuC/d,EAAQQ,MAO/Cwd,EAAsBxR,GAAU,OAChCyR,EAAqBje,EAAQE,MAE7B+K,EAAW,IAAIiT,UAEZ/S,OAAOuN,GAAe,OAAQuF,GAGjCE,EAAc/a,GAAA,CACdgb,WAAY,sBAAuBC,OAAQ,CAAEC,QAAS,YAAaC,OAAQ,QAASC,IAAK,KAASxe,EAAQU,iBAEhH+d,GAAmBxT,EAAUkT,GAGzB9R,SACU,CAAA,EAAME,GAChBwR,EACAC,EACAvF,EACAxN,EACAI,GAAW,CAAE,MAxBbuB,EAAQd,GAAsB9L,IACvB,CAAA,kBAkBXqM,EAAc+Q,UAOE5lB,QAEZoV,EAAQR,GAA0BpM,EAASqM,IAG3CO,EAAQN,GAAwBtM,EAASqM,iCAK7CO,EACIN,GAAwBtM,EAAS6L,+BAG5C,GAAA,UACH,qBAKI,SACF3L,EACAuY,EACAjM,EACAkS,EACArT,GALJ,IAwBCsT,EAAA7d,KAjBG,OAAO,IAAI6L,SAAQ,SAAOC,EAASC,GAAM,OAAAS,GAAAqR,OAAA,OAAA,GAAA,uEAI/B1T,EAAW,IAAIiT,UAEZ/S,OAAOuT,GAAS,OAAQxe,oBAGU,6BAAA,CAAA,EAAMqM,GAAe,IAAIuM,eAAkBtM,EAAQiM,EAAKxN,EAAUI,kBAAnG1K,EAAiCyc,EAA0EwB,OACjHhS,EAAQjM,gCAIRiM,EAAQf,8BAEf,GAAA,GACL,8CQtJyB,SACrB7L,GAGA,OAAO,IAAI2M,SAAQ,SAACC,EAASC,GACzB0M,YAAW,WACP3M,WACO5M,GAAO,CACVM,aAAc,YAErB,GAAE,IACP,GACJ,2BA6CgC,SAC5BU,GAGA,OAAO,IAAI2L,SAAQ,SAACC,EAASC,GACzB0M,YAAW,WACPvY,EAAgBV,aAAe,UAC/BsM,WACO5L,GAAe,CAClBV,aAAc,YAErB,GAAE,IACP,GACJ,mFdhCmC,SAC/Bwd,EACAlE,EACAiF,EACAxU,EACAxT,EACAijB,GAGA,IAAIgF,EAA4B,GAChC,IAAKlF,EAAiB,OAAOkF,EAK7B,IAJA,IAAIC,EAAoBnF,EAClBK,EACFrgB,EAA+BkgB,GAC7BK,EAAuCF,EAAyBhiB,aAC7DsJ,EAAI,EAAGA,EAAIuc,EAAYtc,OAAQD,IAAK,CACzC,IAAIyd,EAA0BlB,EAAYvc,GAK1C,IAHAyd,EAAiB5U,GAAgB4U,EAAgB3U,EAAWwU,EAAqB5E,IAG9DxiB,MAAO,CAEtB,IAAMA,EAAQsnB,EAAY,EAC1BC,EAAevnB,MAAQA,EAElBA,IACDunB,EAAe5e,OAAS4e,EAAe5e,OAClC+B,GAAAA,GAAA,GAAK6c,EAAe5e,YAAQ+Z,EAAsBtjB,GAAYujB,UAC7D,CAACD,EAAsBtjB,GAAYujB,OAE7C2E,GACH,CACDD,EAAe1V,KAAK4V,EAEvB,CACD,OAAOF,CACX"} \ No newline at end of file diff --git a/src/files-ui/core/index.ts b/src/files-ui/core/index.ts deleted file mode 100644 index 260fef37ba46d68b848c5dd7ebcbffc7f99d8d21..0000000000000000000000000000000000000000 --- a/src/files-ui/core/index.ts +++ /dev/null @@ -1,178 +0,0 @@ -export { - DropzoneEnglish, - DropzoneFrench, - DropzoneItalian, - DropzoneLocalizer, - DropzoneLocalizerSelector, - DropzonePortuguese, - DropzoneRussian, - DropzoneSimplifiedChinese, - DropzoneSpanish, - DropzoneTraditionalChinese, - FileItemEnglish, - FileItemFrench, - FileItemItalian, - FileItemLocalizer, - FileItemLocalizerSelector, - FileItemPortuguese, - FileItemRussian, - FileItemSimplifiedChinese, - FileItemSpanish, - FileItemTraditionalChinese, - ValidateErrorEnglish, - ValidateErrorFrench, - ValidateErrorItalian, - ValidateErrorLocalizer, - ValidateErrorLocalizerSelector, - ValidateErrorPortuguese, - ValidateErrorRussian, - ValidateErrorSimplifiedChinese, - ValidateErrorSpanish, - ValidateErrorTraditionalChinese -} from "./localization"; - -export { - readAsArrayBuffer, - readAsBinaryString, - readAsDataURL, - readAsText, - resizeImage, - getImageOrientation -} from "./reader"; - -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, oga, ogv, ogx, 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, - applicationSelector, - audioSelector, - checkIsCode, - extensionSelector, - fontSelector, - getURLFileIco, - imageSelector, - mimeSelector, - textSelector, - videoSelector, -} from "./mime"; - -export type { - ExtFile, - Behaviour, - ValidateFileResponse, - ComponentLocalizer, - ExtFileListMap, - FileValidatorProps, - FunctionLabel, - LocalLabels, - Localization, - Method, - NamedColor, - ServerResponse, - UploadPromiseResponse, - UploadResponse, - UploadConfig, - UPLOADSTATUS, - IconsMap -} from "./types"; - -export { - //UPLOADSTATUS, - ExtFileInstance, ExtFileManager, extFileMock, createUploadConfig -} from "./types" - -export { - uploadExtFile, - FuiUpload, - completeUploadResult, - instantPreparingToUploadOne, - preparingToUploadOne, - sleepTransition, - toUploadableExtFileList, - unableToUploadResult, - makeServerResponse, - uploadFile, - uploadFormData, - ABORTED_ERROR_RESPONSE, - JSON_PARSE_ERROR_RESPONSE, - JsonParseResponse, - NO_XHR_PROVIDED_ERROR, - TIMEOUT_ERROR_RESPONSE, - UNEXPECTED_ERROR_RESPONSE, - makeErrorUploadResponse, - makeSuccessUploadResponse, - addExtraData, - addHeaders, - sanitizeArrExtFile, - unexpectedErrorUploadResult, - setNextUploadStatus -} from "./upload"; - -export { - FileIdGenerator, - fileListToExtFileArray, - fileListToExtFileInstanceArray, - fileSizeFormater, - getExt, - handleClickInput, - handleClickUtil, - handleDragUtil, - handleDropUtil, - isValidateActive, - shrinkWord, - fakeFuiUpload, - prepToUploadOne, - setPrepToUploading, - sleepPreparing, - uploadOne, - uploadOneExtFile, - cleanInput, addClassName, getRandomInt, isUploadAbleExtFile, getLocalFileItemData -} from "./utils"; - -export { - fileListvalidator, - separateAccept, - validateAccept, - validateExtFile, - validateExtFileList, - validateFile -} from "./validation"; - - -export { createFuiRippleFromDiv, createRippleButton } from "./ripple"; - -export { - asureColor, - brighterColor, - colourNameToHex, - darkerColor, - hexColorToRGB, - hexTodec, - isHexColor, - NAMED_COLORS, - completeAsureColor -} from "./color"; - -export { - SyntheticFile, - createListOfMultiTypeFile, - createSyntheticFile, - makeSyntheticExtFile -} from "./synthetic-file"; - -export { extFileReconcilation } from "./file-manager"; \ No newline at end of file diff --git a/src/files-ui/core/localization/Chinese-simplified/localization.simplifiedChinese.ts b/src/files-ui/core/localization/Chinese-simplified/localization.simplifiedChinese.ts deleted file mode 100644 index 2be18b6fc8b5bfb40b4278d8d421a103ff588881..0000000000000000000000000000000000000000 --- a/src/files-ui/core/localization/Chinese-simplified/localization.simplifiedChinese.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { LocalLabels } from "../../types"; -import { fileSizeFormater } from "../../utils/fileSizeFormatter"; - -/** - * English translation for Dropzone component - */ -export const DropzoneSimplifiedChinese: LocalLabels = { - defaultLabel: "将您的文件放在这里", - uploadingMessage: (amountOfFiles) => { return `上传 ${amountOfFiles} 个文件`; }, - uploadFinished: (uploaded, rejected) => `上传文件:${uploaded},拒绝文件:${rejected}`, - noFilesMessage: `没有缺少要加载的有效文件`, - footer: { - acceptAll: `接受所有文件类型`, - acceptCustom: (accept) => `允许的类型: ${accept}` - }, - header: { - uploadFilesMessage: "上传文件", - maxSizeMessage: (maxFileSize) => `最大文件大小:${maxFileSize}`, - validFilesMessage: (numberOfValidFiles, maxFiles) => `文档 ${numberOfValidFiles}/${maxFiles}` - }, - fakeuploadsuccess: "文件已成功上传", - fakeUploadError: "上传时出错", -} - -/** - * Chinnese translation for FileItem component - */ -export const FileItemSimplifiedChinese: LocalLabels = { - fullInfoLayer: { - name: `文档名称: `, - size: "尺寸: ", - type: "文件类型: " - }, - status: { - preparing:"预加载", - uploading: "上传", - success: "成功", - valid: "接受的文件", - denied: "被拒绝的文件", - error: "错误", - aborted:"中止" - }, -} - -/** - * English translation for Validation Errors - */ -export const ValidateErrorSimplifiedChinese: LocalLabels = { - maxSizeError: (maxSize) => - `文件太大。 允许的最大文件大小为 ${fileSizeFormater(maxSize as number)}`, - acceptError: `文件类型不允许`, - maxFileCount: (maxFiles) => - `已达到最大文件数 (${maxFiles})` -} \ No newline at end of file diff --git a/src/files-ui/core/localization/Chinese-traditional/localization.traditionalChinese.ts b/src/files-ui/core/localization/Chinese-traditional/localization.traditionalChinese.ts deleted file mode 100644 index 47924bee6dfc20b776e7ff4e0a8594d7d666d263..0000000000000000000000000000000000000000 --- a/src/files-ui/core/localization/Chinese-traditional/localization.traditionalChinese.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { fileSizeFormater } from "../../utils/fileSizeFormatter"; -import { LocalLabels } from "../../types"; - - -/** - * English translation for Dropzone component - */ -export const DropzoneTraditionalChinese: LocalLabels = { - defaultLabel: "把你的文件放在這裡 ", - uploadingMessage: (amountOfFiles) => { return `上傳${amountOfFiles}個文件`; }, - uploadFinished: (uploaded, rejected) => `上傳文件: ${uploaded}, 拒絕的文件:${rejected}`, - noFilesMessage: `沒有缺少要上傳的有效文件`, - footer: { - acceptAll: `接受所有文件類型`, - acceptCustom: (accept) => `允許的類型:${accept}` - }, - header: { - uploadFilesMessage: "上傳文件", - maxSizeMessage: (maxFileSize) => `最大文件大小:${maxFileSize}`, - validFilesMessage: (numberOfValidFiles, maxFiles) => ` 文件 ${numberOfValidFiles}/${maxFiles}` - }, - fakeuploadsuccess: "文件已成功上傳", - fakeUploadError: "上傳時出錯", -} - -/** - * Chinese translation for FileItem component - */ -export const FileItemTraditionalChinese: LocalLabels = { - fullInfoLayer: { - name: `文檔名稱: `, - size: "文件大小: ", - type: "文件類型: " - }, - status: { - preparing: "預加載", - uploading: "上傳", - success: "成功", - valid: "有效文件", - denied: "無效文件", - error: "錯誤", - aborted: "中止" - }, -} - -/** - * English translation for Validation Errors - */ -export const ValidateErrorTraditionalChinese: LocalLabels = { - maxSizeError: (maxSize) => - `文件太大。 允許的最大文件大小為 ${fileSizeFormater(maxSize as number)}`, - acceptError: `文件類型不允許`, - maxFileCount: (maxFiles) => - `已達到最大文件數 (${maxFiles})` -} \ No newline at end of file diff --git a/src/files-ui/core/localization/English/localization.english.ts b/src/files-ui/core/localization/English/localization.english.ts deleted file mode 100644 index e2114d27392319ceae2578df782327d6dcc96460..0000000000000000000000000000000000000000 --- a/src/files-ui/core/localization/English/localization.english.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { fileSizeFormater } from "../../utils/fileSizeFormatter"; -import { LocalLabels } from "../../types"; - -/** - * English translation for Dropzone component - */ -export const DropzoneEnglish: LocalLabels = { - defaultLabel: "Drop your files here", - uploadingMessage: (amountOfFiles) => { return `Uploading ${amountOfFiles} files`; }, - uploadFinished: (uploaded, rejected) => `Uploaded files: ${uploaded}, Rejected files: ${rejected}`, - noFilesMessage: `There is no missing valid file to upload`, - footer: { - acceptAll: `All file types accepted`, - acceptCustom: (accept) => `Allowed types: ${accept}` - }, - header: { - uploadFilesMessage: "Upload files", - maxSizeMessage: (maxFileSize) => `Max file size: ${maxFileSize}`, - validFilesMessage: (numberOfValidFiles, maxFiles) => `Files ${numberOfValidFiles}/${maxFiles}` - }, - fakeuploadsuccess: "File was successfuly uploaded", - fakeUploadError: "Error on uploading. Please try again later.", -} - -/** - * English translation for FileItem component - */ -export const FileItemEnglish: LocalLabels = { - fullInfoLayer: { - name: `Name: `, - size: "Size: ", - type: "Type: " - }, - status: { - preparing:"Preparing", - uploading: "Uploading", - success: "Success", - valid: "Valid", - denied: "Not valid", - error: "Error", - aborted:"Aborted" - }, -} - -/** - * English translation for Validation Errors - */ -export const ValidateErrorEnglish: LocalLabels = { - maxSizeError: (maxSize) => - `File is too big. Max file size allowed is ${fileSizeFormater(maxSize as number)}`, - acceptError: `File type is not allowed`, - maxFileCount: (maxFiles) => - `Max amount of files (${maxFiles}) has been reached` -} \ No newline at end of file diff --git a/src/files-ui/core/localization/FileItem.localization.ts b/src/files-ui/core/localization/FileItem.localization.ts deleted file mode 100644 index a2dd75ca1721136959aeaa02e7e5845351153de7..0000000000000000000000000000000000000000 --- a/src/files-ui/core/localization/FileItem.localization.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { FileItemRussian } from "./Russian/localization.russian"; -import { ComponentLocalizer, LocalLabels, Localization } from "../types"; -import { FileItemEnglish } from "./English/localization.english"; -import { FileItemFrench } from "./French/localization.french"; -import { FileItemPortuguese } from "./Portuguese/localization.portuguese"; -import { FileItemSpanish } from "./Spanish/localization.spanish"; -import { FileItemSimplifiedChinese } from "./Chinese-simplified/localization.simplifiedChinese"; -import { FileItemTraditionalChinese } from "./Chinese-traditional/localization.traditionalChinese"; -import { FileItemItalian } from "./Italian/localization.italian"; - -export const FileItemLocalizer: ComponentLocalizer = { - "ES-es": FileItemSpanish, - "EN-en": FileItemEnglish, - "FR-fr": FileItemFrench, - "IT-it": FileItemItalian, - "PT-pt": FileItemPortuguese, - "RU-ru": FileItemRussian, - "ZH-cn": FileItemSimplifiedChinese, - "ZH-hk": FileItemTraditionalChinese -} - -/** - * Secure translation through a selector - * @param local the Localization - * @returns a ComponentLocalizer object that contains the translation - */ -export const FileItemLocalizerSelector = (local?: Localization): LocalLabels => { - switch (local) { - case "ES-es": return FileItemLocalizer["ES-es"]; - case "EN-en": return FileItemLocalizer["EN-en"]; - case "FR-fr": return FileItemLocalizer["FR-fr"]; - case "IT-it": return FileItemLocalizer["IT-it"]; - case "PT-pt": return FileItemLocalizer["PT-pt"]; - case "RU-ru": return FileItemLocalizer["RU-ru"]; - case "ZH-cn": return FileItemLocalizer["ZH-cn"]; - case "ZH-hk": return FileItemLocalizer["ZH-hk"]; - default: return FileItemLocalizer["EN-en"]; - } -} \ No newline at end of file diff --git a/src/files-ui/core/localization/French/localization.french.ts b/src/files-ui/core/localization/French/localization.french.ts deleted file mode 100644 index 82a8d8766e86ab4b4890b831fe6ffa26caf15eb6..0000000000000000000000000000000000000000 --- a/src/files-ui/core/localization/French/localization.french.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { fileSizeFormater } from "../../utils/fileSizeFormatter"; -import { LocalLabels } from "../../types"; - -/** - * French translation for Dropzone component - */ -export const DropzoneFrench: LocalLabels = { - defaultLabel: "Déposez vos fichiers ici", - - uploadingMessage: (amountOfFiles) => { return `Envoi de ${amountOfFiles} fichiers`; }, - uploadFinished: (uploaded, rejected) => `Fichiers téléchargés : ${uploaded}, Fichiers rejetés: ${rejected}`, - noFilesMessage: `Aucun fichier valide ne manque`, - footer: { - acceptAll: `Tous types de fichiers acceptés `, - acceptCustom: (accept) => `Types de fichier: ${accept}` - }, - header: { - uploadFilesMessage: "Envoyer", - maxSizeMessage: (maxFileSize) => `Taille maximale ${maxFileSize}`, - validFilesMessage: (numberOfValidFiles, maxFiles) => `Fichiers ${numberOfValidFiles}/${maxFiles}` - }, - fakeuploadsuccess: "Le fichier a été téléchargé avec succès", - fakeUploadError: "Erreur lors du téléchargement ", -} - -/** - * French translation for FileItem component - */ -export const FileItemFrench: LocalLabels = { - fullInfoLayer: { - name: `Le nom: `, - size: "Le taille: ", - type: "Le type: " - }, - status: { - preparing:"préparer", - uploading: "En cours", - success: "Succès", - valid: "Valide", - denied: "Refusé", - error: "Erreur", - aborted:"Interrompu" - }, -} -/** - * French translation for Validation Errors - */ - export const ValidateErrorFrench: LocalLabels = { - maxSizeError: (maxSize) => `Le fichier est très volumineux. Le tam. le maximum est de ${fileSizeFormater(maxSize as number)}`, - acceptError: `Type de fichier illégal `, - maxFileCount: (maxFiles) => `Limite de fichiers atteinte (${maxFiles})` -} \ No newline at end of file diff --git a/src/files-ui/core/localization/Italian/localization.italian.ts b/src/files-ui/core/localization/Italian/localization.italian.ts deleted file mode 100644 index 1a6b53da040125c94c1d8f70a86288752cb15bbf..0000000000000000000000000000000000000000 --- a/src/files-ui/core/localization/Italian/localization.italian.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { fileSizeFormater } from "../../utils/fileSizeFormatter"; -import { LocalLabels } from "../../types"; - -/** - * Italian translation for Dropzone component - */ -export const DropzoneItalian: LocalLabels = { - defaultLabel: "Trascina qui i tuoi file", - - uploadingMessage: (amountOfFiles) => { return `Caricamento di ${amountOfFiles} file`; }, - uploadFinished: (uploaded, rejected) => `File caricati: ${uploaded}, File rifiutati: ${rejected}`, - noFilesMessage: `Nessun file valido in attesa di essere caricato`, - footer: { - acceptAll: `Tutti i tipi di file sono accettati`, - acceptCustom: (accept) => `Tipi di file consentiti: ${accept}` - }, - header: { - uploadFilesMessage: "Caricamento", - maxSizeMessage: (maxFileSize) => `Dimensione massima ${maxFileSize}`, - validFilesMessage: (numberOfValidFiles, maxFiles) => `File ${numberOfValidFiles}/${maxFiles}` - }, - fakeuploadsuccess: "Il file è stato caricato con successo ", - fakeUploadError: "Errore di caricamento del file", -} - -/** - * Italian translation for FileItem component - */ -export const FileItemItalian: LocalLabels = { - fullInfoLayer: { - name: `Nome: `, - size: "Dimensione: ", - type: "Tipo: " - }, - status: { - preparing:"preparazione", - uploading: "In corso", - success: "Successo", - valid: "Valido", - denied: "Non válido", - error: "Errore", - aborted:"Interrotto" - }, -} -/** - * Italian translation for Validation Errors - */ - export const ValidateErrorItalian: LocalLabels = { - maxSizeError: (maxSize) => `Il file è molto grande. Il tam. il massimo è ${fileSizeFormater(maxSize as number)}`, - acceptError: `Tipo di file illegale`, - maxFileCount: (maxFiles) => `Numero massimo di file (${maxFiles}) raggiunto` -} \ No newline at end of file diff --git a/src/files-ui/core/localization/Portuguese/localization.portuguese.ts b/src/files-ui/core/localization/Portuguese/localization.portuguese.ts deleted file mode 100644 index 3a21e08d9eaccb8b927006461908ee903180ed86..0000000000000000000000000000000000000000 --- a/src/files-ui/core/localization/Portuguese/localization.portuguese.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { fileSizeFormater } from "../../utils/fileSizeFormatter"; -import { LocalLabels } from "../../types"; - -/** - * Portuguese translation for Dropzone - */ -export const DropzonePortuguese: LocalLabels = { - defaultLabel: "Solte seus arquivos aqui ", - - uploadingMessage: (amountOfFiles) => { return `Enviando ${amountOfFiles} arquivos`; }, - uploadFinished: (uploaded, rejected) => `Arquivos enviados: ${uploaded}, Arquivos rejeitados: ${rejected}`, - noFilesMessage: `Nenhum arquivo válido está faltando para enviar`, - footer: { - acceptAll: `Todos os tipos de arquivo são aceitos`, - acceptCustom: (accept) => `Tipos permitidos: ${accept}` - }, - header: { - uploadFilesMessage: "Enviar", - maxSizeMessage: (maxFileSize) => `Tamanho máximo: ${maxFileSize}`, - validFilesMessage: (numberOfValidFiles, maxFiles) => `Arquivos ${numberOfValidFiles}/${maxFiles}` - }, - fakeuploadsuccess: "O arquivo foi enviado com sucesso", - fakeUploadError: "Erro ao enviar", -} - - -/** - * Portuguese translation for FileItem component - */ -export const FileItemPortuguese: LocalLabels = { - fullInfoLayer: { - name: `Nome: `, - size: "Tamanho: ", - type: "Tipo: " - }, - status: { - preparing:"Preparando", - uploading: "Enviando", - success: "Êxito", - valid: "válido", - denied: "Negado", - error: "Erro", - aborted:"Abortado" - }, -} -/** - * Portuguese translation for Validation Errors - */ - export const ValidateErrorPortuguese: LocalLabels = { - maxSizeError: (maxSize) => `O arquivo é muito grande. O tamanho máximo de arquivo permitido é ${fileSizeFormater(maxSize as number)}`, - acceptError: `O tipo de arquivo não é permitido `, - maxFileCount: (maxFiles) => `Quantidade máxima de arquivos (${maxFiles}) alcançada` -} \ No newline at end of file diff --git a/src/files-ui/core/localization/Russian/localization.russian.ts b/src/files-ui/core/localization/Russian/localization.russian.ts deleted file mode 100644 index b62ecdc1aeeb720d7da1db0b2cfe1ec0ce185207..0000000000000000000000000000000000000000 --- a/src/files-ui/core/localization/Russian/localization.russian.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { fileSizeFormater } from "../../utils/fileSizeFormatter"; -import { LocalLabels } from "../../types"; - -/** - * Russian translation for Dropzone component - */ -export const DropzoneRussian: LocalLabels = { - defaultLabel: "Перетащите сюда свои файлы.", - uploadingMessage: (amountOfFiles) => { return `Выгрузка ${amountOfFiles} файлов`; }, - uploadFinished: (uploaded, rejected) => `Загружено файлов: ${uploaded}, отклоненных файлов: ${rejected}`, - noFilesMessage: `Действительный файл не отсутствует для загрузки`, - footer: { - acceptAll: `Принимаются все типы файлов `, - acceptCustom: (accept) => `Допустимые типы: ${accept}` - }, - header: { - uploadFilesMessage: "Отправить", - maxSizeMessage: (maxFileSize) => `макс размер: ${maxFileSize}`, - validFilesMessage: (numberOfValidFiles, maxFiles) => `Файлы ${numberOfValidFiles}/${maxFiles}` - }, - fakeuploadsuccess: "Файл был успешно загружен", - fakeUploadError: "Ошибка при загрузке", -} - -/** - * Russian translation for FileItem component - * - */ -export const FileItemRussian: LocalLabels = { - fullInfoLayer: { - name: `Имя: `, - size: "Размер: ", - type: "Tип: " - }, - status: { - preparing:"подготовка", - uploading: "Загрузка", - success: "успех", - valid: "годный", - denied: "выкинутый", - error: "ошибка", - aborted:"прерванный" - }, -} - -/** - * Russian translation for Validation Errors - */ -export const ValidateErrorRussian: LocalLabels = { - maxSizeError: (maxSize) => - `Файл слишком большой. Максимально допустимый размер файла - ${fileSizeFormater(maxSize as number)}`, - acceptError: `Тип файла не разрешен`, - maxFileCount: (maxFiles) => - `Достигнуто максимальное количество файлов (${maxFiles})` -} \ No newline at end of file diff --git a/src/files-ui/core/localization/Spanish/localization.spanish.ts b/src/files-ui/core/localization/Spanish/localization.spanish.ts deleted file mode 100644 index 113989372c144236f0b932a815dc9c60a46cd4b0..0000000000000000000000000000000000000000 --- a/src/files-ui/core/localization/Spanish/localization.spanish.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { fileSizeFormater } from "../../utils/fileSizeFormatter"; -import { LocalLabels } from "../../types"; - -/** - * Spanish translation for Dropzone component - */ -export const DropzoneSpanish: LocalLabels = { - defaultLabel: "Suelta tus archivos aquí", - - uploadingMessage: (amountOfFiles) => { return `Subiendo ${amountOfFiles} archivos`; }, - uploadFinished: (uploaded, rejected) => `Archivos subidos: ${uploaded}, Archivos rechazados: ${rejected}`, - noFilesMessage: `No hay archivos válidos pendientes por subir`, - footer: { - acceptAll: `Todos los tipos de archivo aceptados`, - acceptCustom: (accept) => `Tipo(s) de archivo permitidos: ${accept}` - }, - header: { - uploadFilesMessage: "Subir", - maxSizeMessage: (maxFileSize) => `Tam. máximo ${maxFileSize}`, - validFilesMessage: (numberOfValidFiles, maxFiles) => `Archivos ${numberOfValidFiles}/${maxFiles}` - }, - fakeuploadsuccess: "El archivo se subió correctamente", - fakeUploadError: "Error al subir el archivo", -} - -/** - * Spanish translation for FileItem component - */ -export const FileItemSpanish: LocalLabels = { - fullInfoLayer: { - name: `Nombre: `, - size: "Tamaño: ", - type: "Tipo: " - }, - status: { - preparing:"Preparando", - uploading: "Subiendo", - success: "Éxito", - valid: "Válido", - denied: "No válido", - error: "Error", - aborted: "Anulado" - }, -} -/** - * Spanish translation for Validation Errors - */ -export const ValidateErrorSpanish: LocalLabels = { - maxSizeError: (maxSize) => `El archivo es muy grande. El tam. máximo es ${fileSizeFormater(maxSize as number)}`, - acceptError: `Tipo de archivo no permitido`, - maxFileCount: (maxFiles) => `Cantidad máxima de archivos (${maxFiles}) alcanzada` -} diff --git a/src/files-ui/core/localization/avatar.localization.ts b/src/files-ui/core/localization/avatar.localization.ts deleted file mode 100644 index 1f8dbafefb8bd3a80936458cb58a02e7f71f91cb..0000000000000000000000000000000000000000 --- a/src/files-ui/core/localization/avatar.localization.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { ComponentLocalizer, LocalLabels, Localization } from "../types"; -import { FileItemRussian } from "./Russian/localization.russian"; -import { FileItemEnglish } from "./English/localization.english"; -import { FileItemFrench } from "./French/localization.french"; -import { FileItemPortuguese } from "./Portuguese/localization.portuguese"; -import { FileItemSpanish } from "./Spanish/localization.spanish"; -import { FileItemSimplifiedChinese } from "./Chinese-simplified/localization.simplifiedChinese"; -import { FileItemTraditionalChinese } from "./Chinese-traditional/localization.traditionalChinese"; -import { FileItemItalian } from "./Italian/localization.italian"; -/** - * TO-DO: Add Avatar localization in next release, inthe meanwhile it accepts custom labels - */ -export const AvatarLocalizer: ComponentLocalizer = { - "ES-es": FileItemSpanish, - "EN-en": FileItemEnglish, - "FR-fr": FileItemFrench, - "IT-it": FileItemItalian, - "PT-pt": FileItemPortuguese, - "RU-ru": FileItemRussian, - "ZH-cn": FileItemSimplifiedChinese, - "ZH-hk": FileItemTraditionalChinese -} - -/** - * Secure translation through a selector - * @param local the Localization - * @returns a ComponentLocalizer object that contains the translation - */ -export const AvatarLocalizerSelector = (local?: Localization): LocalLabels => { - switch (local) { - case "ES-es": return AvatarLocalizer["ES-es"]; - case "EN-en": return AvatarLocalizer["EN-en"]; - case "FR-fr": return AvatarLocalizer["FR-fr"]; - case "IT-it": return AvatarLocalizer["IT-it"]; - case "PT-pt": return AvatarLocalizer["PT-pt"]; - case "RU-ru": return AvatarLocalizer["RU-ru"]; - case "ZH-cn": return AvatarLocalizer["ZH-cn"]; - case "ZH-hk": return AvatarLocalizer["ZH-hk"]; - default: return AvatarLocalizer["EN-en"]; - } -} \ No newline at end of file diff --git a/src/files-ui/core/localization/dropzone.localization.ts b/src/files-ui/core/localization/dropzone.localization.ts deleted file mode 100644 index 0dece64946465f76c8433025427ff6a9b4cdde9b..0000000000000000000000000000000000000000 --- a/src/files-ui/core/localization/dropzone.localization.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { DropzoneRussian } from "./Russian/localization.russian"; -import { DropzoneEnglish } from "./English/localization.english"; -import { DropzoneFrench } from "./French/localization.french"; -import { DropzonePortuguese } from "./Portuguese/localization.portuguese"; -import { DropzoneSpanish } from "./Spanish/localization.spanish"; -import { DropzoneSimplifiedChinese } from "./Chinese-simplified/localization.simplifiedChinese"; -import { DropzoneTraditionalChinese } from "./Chinese-traditional/localization.traditionalChinese"; -import { DropzoneItalian } from "./Italian/localization.italian"; -import { ComponentLocalizer, Localization, LocalLabels } from "../types"; - -export const DropzoneLocalizer: ComponentLocalizer = { - "ES-es": DropzoneSpanish, - "EN-en": DropzoneEnglish, - "FR-fr": DropzoneFrench, - "IT-it": DropzoneItalian, - "PT-pt": DropzonePortuguese, - "RU-ru": DropzoneRussian, - "ZH-cn": DropzoneSimplifiedChinese, - "ZH-hk": DropzoneTraditionalChinese - -} -/** - * Secure translation through a selector - * @param local the Localization - * @returns a ComponentLocalizer object that contains the translation - */ -export const DropzoneLocalizerSelector = (local: Localization | undefined): LocalLabels => { - switch (local) { - case "ES-es": return DropzoneLocalizer["ES-es"]; - case "EN-en": return DropzoneLocalizer["EN-en"]; - case "FR-fr": return DropzoneLocalizer["FR-fr"]; - case "IT-it": return DropzoneLocalizer["IT-it"]; - case "PT-pt": return DropzoneLocalizer["PT-pt"]; - case "RU-ru": return DropzoneLocalizer["RU-ru"]; - case "ZH-cn": return DropzoneLocalizer["ZH-cn"]; - case "ZH-hk": return DropzoneLocalizer["ZH-hk"]; - default: return DropzoneLocalizer["EN-en"]; - } -} \ No newline at end of file diff --git a/src/files-ui/core/localization/index.ts b/src/files-ui/core/localization/index.ts deleted file mode 100644 index 868112b9945c1db7841af2ba81143e0e87f752a8..0000000000000000000000000000000000000000 --- a/src/files-ui/core/localization/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { FileItemItalian, DropzoneItalian, ValidateErrorItalian } from "./Italian/localization.italian"; -import { FileItemFrench, DropzoneFrench, ValidateErrorFrench } from "./French/localization.french"; -import { FileItemEnglish, DropzoneEnglish, ValidateErrorEnglish } from "./English/localization.english"; -import { FileItemSpanish, DropzoneSpanish, ValidateErrorSpanish } from "./Spanish/localization.spanish"; -import { FileItemRussian, DropzoneRussian, ValidateErrorRussian } from "./Russian/localization.russian"; -import { FileItemPortuguese, DropzonePortuguese, ValidateErrorPortuguese } from "./Portuguese/localization.portuguese"; -import { FileItemSimplifiedChinese, DropzoneSimplifiedChinese, ValidateErrorSimplifiedChinese } from "./Chinese-simplified/localization.simplifiedChinese"; -import { FileItemTraditionalChinese, DropzoneTraditionalChinese, ValidateErrorTraditionalChinese } from "./Chinese-traditional/localization.traditionalChinese"; -import { FileItemLocalizerSelector, FileItemLocalizer, } from "./FileItem.localization"; -import { DropzoneLocalizerSelector, DropzoneLocalizer } from "./dropzone.localization"; -import { ValidateErrorLocalizer, ValidateErrorLocalizerSelector } from "./validationError.localization"; - -export { ValidateErrorLocalizerSelector, ValidateErrorLocalizer, ValidateErrorItalian, ValidateErrorFrench, ValidateErrorEnglish, ValidateErrorSpanish, ValidateErrorPortuguese, ValidateErrorRussian, ValidateErrorSimplifiedChinese, ValidateErrorTraditionalChinese }; -export { DropzoneLocalizerSelector, DropzoneLocalizer, DropzoneItalian, DropzoneFrench, DropzoneEnglish, DropzoneSpanish, DropzonePortuguese, DropzoneRussian, DropzoneSimplifiedChinese, DropzoneTraditionalChinese }; -export { FileItemLocalizerSelector, FileItemLocalizer, FileItemItalian, FileItemFrench, FileItemEnglish, FileItemSpanish, FileItemPortuguese, FileItemRussian, FileItemSimplifiedChinese, FileItemTraditionalChinese }; \ No newline at end of file diff --git a/src/files-ui/core/localization/validationError.localization.ts b/src/files-ui/core/localization/validationError.localization.ts deleted file mode 100644 index 114f37113672bfd5cd3e95f86dd732f921b516ad..0000000000000000000000000000000000000000 --- a/src/files-ui/core/localization/validationError.localization.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { ValidateErrorRussian } from "./Russian/localization.russian"; -import { ComponentLocalizer, LocalLabels, Localization } from "./../types"; -import { ValidateErrorEnglish } from "./English/localization.english"; -import { ValidateErrorFrench } from "./French/localization.french"; -import { ValidateErrorPortuguese } from "./Portuguese/localization.portuguese"; -import { ValidateErrorSpanish } from "./Spanish/localization.spanish"; -import { ValidateErrorSimplifiedChinese } from "./Chinese-simplified/localization.simplifiedChinese"; -import { ValidateErrorTraditionalChinese } from "./Chinese-traditional/localization.traditionalChinese"; -import { ValidateErrorItalian } from "./Italian/localization.italian"; - -export const ValidateErrorLocalizer: ComponentLocalizer = { - "ES-es": ValidateErrorSpanish, - "EN-en": ValidateErrorEnglish, - "FR-fr": ValidateErrorFrench, - "IT-it": ValidateErrorItalian, - "PT-pt": ValidateErrorPortuguese, - "RU-ru": ValidateErrorRussian, - "ZH-cn": ValidateErrorSimplifiedChinese, - "ZH-hk": ValidateErrorTraditionalChinese, -} -/** - * Secure translation through a selector - * @param local the Localization - * @returns a ComponentLocalizer object that contains the translation - */ -export const ValidateErrorLocalizerSelector = (local: Localization | undefined): LocalLabels => { - if (!local || !["ES-es", "EN-en", "FR-fr", "IT-it", "PT-pt", "RU-ru", "ZH-cn", "ZH-hk"].includes(local)) { - return ValidateErrorLocalizer["EN-en"]; - } - return ValidateErrorLocalizer[local]; -} \ No newline at end of file diff --git a/src/files-ui/core/mime/icons.ts b/src/files-ui/core/mime/icons.ts deleted file mode 100644 index 8eabf6336007765943f67b876ca969c0dc120be6..0000000000000000000000000000000000000000 --- a/src/files-ui/core/mime/icons.ts +++ /dev/null @@ -1,89 +0,0 @@ -export const sevenzip = "https://user-images.githubusercontent.com/43678736/132086517-72a51a12-e403-4675-bfd7-22c23affa730.png"; -export const aac = "https://user-images.githubusercontent.com/43678736/132086518-7026d4f1-ea16-4ed0-89fd-37c1aa8ac3ed.png"; -export const abw = "https://user-images.githubusercontent.com/43678736/132086519-863c63b4-917e-4471-94ff-7e15651cc14b.png"; -export const accdb = "https://user-images.githubusercontent.com/43678736/132086520-9bc6aa3b-51c9-4da2-9ef7-349162b86d0b.png"; -export const avi = "https://user-images.githubusercontent.com/43678736/132086521-dbd6cf0d-d4d7-4b92-bb26-17e8a51a9383.png"; -export const azw = "https://user-images.githubusercontent.com/43678736/132086522-070f48e8-78a8-4294-8dbb-aab81525e164.png"; -export const bmp = "https://user-images.githubusercontent.com/43678736/132086595-90ab7f90-f87e-4900-94d9-d0b26745df48.png"; -export const bz = "https://user-images.githubusercontent.com/43678736/132086597-e285ad5c-613a-4679-a270-493e5be4ffd9.png"; -export const bz2 = "https://user-images.githubusercontent.com/43678736/132086598-623c410a-084a-4395-a448-211b2ff61cfe.png"; -export const c = "https://user-images.githubusercontent.com/43678736/132086599-7a5cd692-b4df-45f5-80d9-384cb3e0c314.png"; -export const cda = "https://user-images.githubusercontent.com/43678736/132086600-8b70a007-512d-4252-9c66-eabd3ddd6573.png"; -export const csh = "https://user-images.githubusercontent.com/43678736/132086601-e62e5d1a-d8a2-4475-a14f-85922cec9272.png"; -export const css = "https://user-images.githubusercontent.com/43678736/132086602-4c772934-f608-4f01-8459-c4622cee8ad5.png"; -export const csv = "https://user-images.githubusercontent.com/43678736/132086604-b5b019fe-572e-477e-92c2-3769a48a1304.png"; -export const docx = "https://user-images.githubusercontent.com/43678736/132086606-715ccb66-4702-4f7d-9b09-ac93ba17b643.png"; -export const docx2 = "https://user-images.githubusercontent.com/43678736/132086607-a246b386-52c9-4fe1-a7e4-204894e6722d.png"; -export const drawio = "https://user-images.githubusercontent.com/43678736/132086608-bcae9d57-8e54-488c-90c4-4952ae530b5e.png"; -export const dw = "https://user-images.githubusercontent.com/43678736/132086616-0c7842d6-d20e-4ede-988b-3dd063a4de8d.png"; -export const eml = "https://user-images.githubusercontent.com/43678736/132086617-1e351075-ffaf-4b81-a1fe-0b7b338772a2.png"; -export const eot = "https://user-images.githubusercontent.com/43678736/132086618-397d6bd2-9fda-43ed-a135-cb40388c35af.png"; -export const eps = "https://user-images.githubusercontent.com/43678736/132086619-9daf0b61-dbb0-4d47-8a12-9fba13b88856.png"; -export const epub = "https://user-images.githubusercontent.com/43678736/132086620-2586ba40-c583-4589-b1a4-8bb5b258b44d.png"; -export const freearc = "https://user-images.githubusercontent.com/43678736/132086621-3b95fb64-2533-4ccc-abcd-bd2beba572e9.png"; -export const gif = "https://user-images.githubusercontent.com/43678736/132086622-af705a0c-2b25-4ba7-8ab6-bd69ec97f7e2.png"; -export const gzip = "https://user-images.githubusercontent.com/43678736/132086624-89141a46-64e4-4fa0-bf69-54a0eb4d48c9.png"; -export const html = "https://user-images.githubusercontent.com/43678736/132086625-1b8f2652-1de0-4475-8c12-7da4a9973ffb.png"; -export const icalendar = "https://user-images.githubusercontent.com/43678736/132086626-38699705-1e6f-4bca-984b-03167b236faa.png"; -export const ind = "https://user-images.githubusercontent.com/43678736/132086627-2f24067a-00bc-424a-af36-349a9ba14b6c.png"; -export const ini = "https://user-images.githubusercontent.com/43678736/132086649-20c9c9e6-8e63-4d87-9b8e-8fe8eba12ada.png"; -export const java = "https://user-images.githubusercontent.com/43678736/132086650-f1166246-b361-4c30-a04e-9781c555d14a.png"; -export const jar = "https://user-images.githubusercontent.com/43678736/132086650-f1166246-b361-4c30-a04e-9781c555d14a.png"; -export const javascript = "https://user-images.githubusercontent.com/43678736/132086652-4562942e-aaea-466c-968f-380fffabf3f9.png"; -export const jpeg = "https://user-images.githubusercontent.com/43678736/132086653-0487e7e2-1ee3-49e2-8cfe-3e20f1f7490a.png"; -export const jsf = "https://user-images.githubusercontent.com/43678736/132086654-c510bd8f-8de7-4afe-8c20-cc810b004b07.png"; -export const json = "https://user-images.githubusercontent.com/43678736/132086656-6e96c815-e4e2-4ffd-9d71-57e9cc2450bc.png"; -export const jsonld = "https://user-images.githubusercontent.com/43678736/132086658-5d27d3c2-394f-43fb-b512-9b414a257875.png"; -export const midi = "https://user-images.githubusercontent.com/43678736/132086659-98f3ef6e-b9f3-4b6d-b18f-469b5334ba27.png"; -export const mov = "https://user-images.githubusercontent.com/43678736/132086660-adcecedd-56b4-4286-8b0f-69417f77e961.png"; -export const mp3 = "https://user-images.githubusercontent.com/43678736/132086661-a5484553-06c7-4ffa-a8f9-96b57b1b0344.png"; -export const mp4 = "https://user-images.githubusercontent.com/43678736/132086662-05ad1597-d5e5-4efa-833e-2876e966a745.png"; -export const mpeg = "https://user-images.githubusercontent.com/43678736/132086663-90c58955-f7fb-4bdb-ac53-92667d16d4a3.png"; -export const mpkg = "https://user-images.githubusercontent.com/43678736/132086664-9a7530e7-6d78-4ef3-a176-20cf7f57b555.png"; -export const octet = "https://user-images.githubusercontent.com/43678736/132086666-ab3c505d-b2c0-4177-9a06-aed5d9c39ee4.png"; -export const odp = "https://user-images.githubusercontent.com/43678736/132086667-6c7dcbcc-8d83-41a2-8e0a-85b09e2791ae.png"; -export const ods = "https://user-images.githubusercontent.com/43678736/132086668-9f246e91-cf2e-49cf-9617-e1fbb71abbbb.png"; -export const odt = "https://user-images.githubusercontent.com/43678736/132086669-46113762-84d1-4b32-9441-b0138ce17a5d.png"; -export const oga = "https://user-images.githubusercontent.com/43678736/145835364-2054509d-3448-4d34-921f-73dd6e297fc7.png"; -export const ogv = "https://user-images.githubusercontent.com/43678736/145835367-19172bf8-cd5a-4cbe-b512-d0de1d91f269.png"; -export const ogx = "https://user-images.githubusercontent.com/43678736/145835373-a57ef0f5-3968-483b-9f55-6d67e7f1dcea.png"; -export const opus = "https://user-images.githubusercontent.com/43678736/132086670-0f96e770-cedc-4635-a5f9-cf97894c1d7a.png"; -export const otf = "https://user-images.githubusercontent.com/43678736/132086671-02ad35ef-ec3a-4a65-abd5-5bf794dfcf7b.png"; -export const pdf = "https://user-images.githubusercontent.com/43678736/132086672-3a856fda-823d-4997-b802-c7c640e6ef44.png"; -export const php = "https://user-images.githubusercontent.com/43678736/132086673-0c4409ab-754e-4619-8cfa-179d0ccf1bd9.png"; -export const png = "https://user-images.githubusercontent.com/43678736/132086674-fdb56d02-5845-49b7-8462-6357bc963464.png"; -export const pptx = "https://user-images.githubusercontent.com/43678736/132086675-c879645d-acb4-41a6-ab3c-4e6c2048badb.png"; -export const pptx2 = "https://user-images.githubusercontent.com/43678736/132086676-6de1bbd7-764f-4197-9aa4-405a60ce6734.png"; -export const proj = "https://user-images.githubusercontent.com/43678736/132086683-3dc0a8b8-72f8-4fa1-a08a-fcfd75b465e1.png"; -export const psd = "https://user-images.githubusercontent.com/43678736/132086685-4e327c4c-a409-4b83-b36a-8d88936b314b.png"; -export const pst = "https://user-images.githubusercontent.com/43678736/132086686-3888e43a-5abf-41f7-9940-4b86e436521f.png"; -export const publisher = "https://user-images.githubusercontent.com/43678736/132086687-d92b56ff-f7f7-4be7-bbf4-47b8a33f4c6f.png"; -export const python = "https://user-images.githubusercontent.com/43678736/132086688-8e82fae4-3a9b-49c0-bf99-77189525514c.png"; -export const tar = "https://user-images.githubusercontent.com/43678736/132086689-fe1fef9f-d2db-455b-8f4b-09acd095f571.png"; -export const rar = "https://user-images.githubusercontent.com/43678736/132086689-fe1fef9f-d2db-455b-8f4b-09acd095f571.png"; -export const react = "https://user-images.githubusercontent.com/43678736/132086691-d472576b-ec6a-4332-acd2-dd6a00b72952.png"; -export const richtextformat = "https://user-images.githubusercontent.com/43678736/132086692-df6e3518-2e6a-4553-883d-e21694980449.png"; -export const rtf = "https://user-images.githubusercontent.com/43678736/132086693-9d43571e-0c86-438f-b247-e2cb42e19e06.png"; -export const sass = "https://user-images.githubusercontent.com/43678736/132086694-4e661d6a-1118-441e-8bc3-c52fcb2133b6.png"; -export const settings = "https://user-images.githubusercontent.com/43678736/132086696-0dd21f83-b9fc-490c-9ed5-bd88151dc9bb.png"; -export const sh = "https://user-images.githubusercontent.com/43678736/132086697-1d82d724-35b6-4f06-847a-3c59a5deda6e.png"; -export const swf = "https://user-images.githubusercontent.com/43678736/132086698-19384230-dbd7-4e05-bc69-ef4537b6aae3.png"; -export const text = "https://user-images.githubusercontent.com/43678736/132086699-5993a482-04f4-4915-b105-9037f527cf61.png"; -export const tiff = "https://user-images.githubusercontent.com/43678736/132086700-c23461c8-6819-46e1-aecd-0a1f8d3507bb.png"; -export const ttf = "https://user-images.githubusercontent.com/43678736/132086701-c8044c09-8d95-4af1-9410-66761001d7da.png"; -export const typescript = "https://user-images.githubusercontent.com/43678736/132086702-59294337-ed99-4302-badd-316b2c1ff62f.png"; -export const url = "https://user-images.githubusercontent.com/43678736/132086703-86d97476-b76e-4949-b89a-31ecb03f3b6e.png"; -export const vsd = "https://user-images.githubusercontent.com/43678736/132086704-8fd51e7c-afa2-47a3-ab2f-d0bcd0ecae9f.png"; -export const vue = "https://user-images.githubusercontent.com/43678736/132086705-33294da1-5c0f-49f7-b890-e4857cec0a6d.png"; -export const wav = "https://user-images.githubusercontent.com/43678736/132086706-22f805d0-39d4-494b-824e-47dc75d05eb7.png"; -export const webm = "https://user-images.githubusercontent.com/43678736/132086707-e61a84de-d396-4dbf-8d1b-1d6ee19e1ac8.png"; -export const weba = "https://user-images.githubusercontent.com/43678736/132086707-e61a84de-d396-4dbf-8d1b-1d6ee19e1ac8.png"; -export const webp = "https://user-images.githubusercontent.com/43678736/132086708-21d096dd-7148-40aa-97f1-cbb099339740.png"; -export const wma = "https://user-images.githubusercontent.com/43678736/132086709-811d4e90-3cfa-4044-a956-aeda9c67fc92.png"; -export const wmv = "https://user-images.githubusercontent.com/43678736/132086710-c5479c6c-0249-4542-adad-48b0ef40b775.png"; -export const woff = "https://user-images.githubusercontent.com/43678736/132086711-1524a3e7-3e33-4822-a34f-ff3235404045.png"; -export const xlsx = "https://user-images.githubusercontent.com/43678736/132086712-17e2c491-f6e4-4586-aef6-06bcc5f4b0e5.png"; -export const xlsx2 = "https://user-images.githubusercontent.com/43678736/132086714-7ddf285d-2b83-4115-80a5-f02f510300a1.png"; -export const xml = "https://user-images.githubusercontent.com/43678736/132086715-204b5a8b-9c5a-4bac-8294-9237ebc16089.png"; -export const xul = "https://user-images.githubusercontent.com/43678736/132086716-64511d20-58cb-45a8-85df-f4d9408b469d.png"; -export const zip = "https://user-images.githubusercontent.com/43678736/132086718-a8499333-6282-4820-aa1f-4d133eb54648.png"; diff --git a/src/files-ui/core/mime/index.d.ts b/src/files-ui/core/mime/index.d.ts index 718296e66b951e644ba0ae5ad59f9aa3d06767d2..3549a7ae81ae96af525757254b4ea309acaceb5c 100644 --- a/src/files-ui/core/mime/index.d.ts +++ b/src/files-ui/core/mime/index.d.ts @@ -1,3 +1,3 @@ import { 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, oga, ogv, ogx, 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 } from "./icons"; 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, oga, ogv, ogx, 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 }; -export { applicationSelector, audioSelector, checkIsCode, extensionSelector, fontSelector, getURLFileIco, imageSelector, mimeSelector, textSelector, videoSelector, } from "./mime"; +export { applicationSelector, audioSelector, checkIsCode, extensionSelector, fontSelector, getURLFileIco, imageSelector, mimeSelector, textSelector, videoSelector, getURLFileIcoFromNameAndType, } from "./mime"; diff --git a/src/files-ui/core/mime/index.ts b/src/files-ui/core/mime/index.ts deleted file mode 100644 index 48bce3dffbe1ed57c0e852f8ff7bd5f6dbe6f003..0000000000000000000000000000000000000000 --- a/src/files-ui/core/mime/index.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { - 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, oga, ogv, ogx, 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 -} from "./icons"; -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, oga, ogv, ogx, 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 -} -export { - applicationSelector, - audioSelector, - checkIsCode, - extensionSelector, - fontSelector, - getURLFileIco, - imageSelector, - mimeSelector, - textSelector, - videoSelector, -} from "./mime"; \ No newline at end of file diff --git a/src/files-ui/core/mime/mime.ts b/src/files-ui/core/mime/mime.ts deleted file mode 100644 index cf8eccba71153b542505238f2473e87e28daa460..0000000000000000000000000000000000000000 --- a/src/files-ui/core/mime/mime.ts +++ /dev/null @@ -1,435 +0,0 @@ -import { - 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, oga, ogv, ogx, 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 -} from "./icons"; -import { getExt } from "../utils/getExt"; -import { IconsMap } from "../types"; - -const DEF_GEN_MIME: keyof IconsMap = "octet"; -/** - * - * @param tailMime - * @returns - */ -export const audioSelector = (tailMime: string): keyof IconsMap => { - switch (tailMime) { - case "aac": return "aac"; - case "midi": return "midi"; - case "x-midi": return "midi"; - case "mpeg": return "mpeg";//mp3 - case "ogg": return "oga"; - case "opus": return "opus"; - case "wav": return "wav"; - case "webm": return "webm"; - //case "3gpp": return "threegp"; - //case "3gpp2": return "threegp"; - //case "mp3": return "mp3"; - case "wma": return "wma"; - default: return DEF_GEN_MIME; - } -} -export const textSelector = (tailMime: string): keyof IconsMap => { - switch (tailMime) { - case "css": return "css"; - case "csv": return "csv"; - case "html": return "html"; - case "calendar": return "icalendar"; - case "javascript": return "javascript"; - case "x-javascript": return "javascript"; - case "plain": return "text"; - case "xml": return "xml"; - default: return DEF_GEN_MIME; - - } -} -export const imageSelector = (tailMime: string): keyof IconsMap => { - switch (tailMime) { - case "bmp": return "bmp"; - case "gif": return "gif"; - // case "vnd.microsoft.icon": return "ico"; - //case "ico": return "ico"; - case "jpg": return "jpeg"; - case "jpeg": return "jpeg"; - case "png": return "png"; - //case "svg+xml": return "svg"; - //case "svg": return "svg"; - case "tiff": return "tiff"; - case "webp": return "webp"; - default: return DEF_GEN_MIME; - - } -} -export const fontSelector = (tailMime: string): keyof IconsMap => { - switch (tailMime) { - case "otf": return "otf"; - case "ttf": return "ttf"; - case "woff": return "woff"; - case "woff2": return "woff"; - default: return DEF_GEN_MIME; - - } -} - -export const videoSelector = (tailMime: string): keyof IconsMap => { - switch (tailMime) { - case "x-msvideo": return "avi"; - case "msvideo": return "avi"; - case "avi": return "avi"; - case "mp4": return "mp4"; - case "mpeg": return "mpeg"; - case "ogg": return "ogv"; - case "mp2t": return "mp2t"; - case "wmv": return "wmv"; - - case "webm": return "webm"; - // case "3gpp": return "threegp"; - // case "3gpp2": return "threegp2"; - - default: return DEF_GEN_MIME; - } -} -/** - * - * @param tailMime - * @returns - */ -export const applicationSelector = (tailMime: string): keyof IconsMap => { - switch (tailMime) { - case "x-abiword": return "abw"; - case "abiword": return "abw"; - case "x-freearc": return "arc"; - case "freearc": return "arc"; - case "vnd.amazon.ebook": return "azw"; - case "octet-stream": return "octet"; - case "x-bzip": return "bz"; - case "x-bzip2": return "bz2"; - case "bzip": return "bz"; - case "bzip2": return "bz2"; - case "x-cdf": return "cda"; - case "msaccess": return "accdb"; - case "csh": return "csh"; - case "x-csh": return "csh"; - case "vnd.ms-fontobject": return "eot"; - case "epub+zip": return "epub"; - case "gzip": return "gzip"; - case "java-archive": return "jar"; - case "x-javascript": return "javascript"; - case "json": return "json"; - case "ld+json": return "jsonld"; - case "vnd.apple.installer+xml": return "mpkg"; - case "ogg": return "ogx"; - case "vnd.rar": return "rar"; - case "rtf": return "rtf"; - case "x-sh": return "sh"; - case "sh": return "sh"; - case "x-shockwave-flash": return "swf"; - case "x-tar": return "tar"; - case "x-httpd-php": return "php"; - case "vnd.visio": return "vsd"; - case "xhtml+xml": return "xhtml"; - case "xml": return "xml"; - case "vnd.mozilla.xul+xml": return "xul"; - case "vnd.openxmlformats-officedocument.wordprocessingml.document": return "docx"; - case "msword": return "docx"; - case "vnd.openxmlformats-officedocument.spreadsheetml.sheet": return "xlsx"; - case "vnd.openxmlformats-officedocument.presentationml.presentation": return "pptx"; - case "vnd.ms-powerpoint": return "pptx"; - case "vnd.oasis.opendocument.presentation": return "odp"; - case "vnd.oasis.opendocument.text": return "odt"; - case "vnd.oasis.opendocument.spreadsheet": return "ods"; - case "zip": return "zip"; - case "x-zip-compressed": return "zip"; - case "pdf": return "pdf"; - default: return DEF_GEN_MIME; - } -} -/** - * Selects to wich mime type the mime type given belongs to - * @param mimeType mime type to be searched - * @returns the generic type, -if not found it return "octet" that means generic binary file - */ -export const mimeSelector = (mimeType?: string): keyof IconsMap => { - // let genericMime: string | undefined = undefined; - if (!mimeType || !mimeType.includes("/")) { - return DEF_GEN_MIME; - } - let headerMime = mimeType.split("/")[0]; - let tailMime = mimeType.split("/")[1]; - /** - * Every mimetype that - * starts with: "application/...." - */ - - switch (headerMime) { - case "application": return applicationSelector(tailMime); - case "audio": return audioSelector(tailMime); - case "video": return videoSelector(tailMime); - case "text": return textSelector(tailMime); - case "image": return imageSelector(tailMime); - case "font": return fontSelector(tailMime); - - default: return DEF_GEN_MIME; - } -} -/** - * Selects to wich mapped extension - * the given exension belongs to - * - * @param extension - * @returns - */ -export const extensionSelector = (extension?: string): keyof IconsMap => { - let genericMime: keyof IconsMap = "octet"; - - if (extension && extension !== "") { - if (extension.includes("zip") || extension.includes("rar")) { - genericMime = "zip"; - } else if (extension.includes("doc")) { - genericMime = "docx"; - } else if (extension.includes("xls")) { - genericMime = "xlsx"; - } else if (extension.includes("drawio")) { - genericMime = "drawio"; - } else if (extension.includes("psd")) { - genericMime = "psd"; - } else if (extension.includes("csv")) { - genericMime = "csv"; - } else if (extension === "jsx") { - genericMime = "react"; - } else if (extension === "py") { - genericMime = "python"; - } else if (extension === "vue") { - genericMime = "vue"; - } else if (extension === "java") { - genericMime = "java"; - } else if (extension === "ts") { - genericMime = "typescript"; - } else if (extension === "sass" || extension === "scss") { - genericMime = "sass"; - } - } - return genericMime; - -} -/** - * Chack for extention whether the file is code os not - * @param extension - * @returns - */ -export const checkIsCode = (extension?: string): keyof IconsMap => { - let genericMime: keyof IconsMap = "text"; - if (extension && extension !== "") { - if (extension === "jsx") { - genericMime = "react"; - } else if (extension === "py") { - genericMime = "python"; - } else if (extension === "vue") { - genericMime = "vue"; - } else if (extension === "java") { - genericMime = "java"; - } else if (extension === "ts" || extension === "tsx") { - genericMime = "typescript"; - } else if (extension === "js") { - genericMime = "javascript"; - } else if (extension === "xml") { - genericMime = "xml"; - } else if (extension === "php") { - genericMime = "php"; - } - } - return genericMime; -} - -/** - * Looks for a suitable file icon - * If not found, returns octet-stream url - * @param props mime and extension from file to search - * @returns the result file ico - */ -export const getURLFileIco = ( - file: File | undefined, - customIcons: IconsMap | undefined -): ResultFileIco => { - - let result: keyof IconsMap = "fallBack"; - //if not file, return octet - if (!file) { - result = DEF_GEN_MIME; - if (customIcons?.fallBack) - return { url: customIcons?.fallBack, mimeResume: result }; - - return { url: mimeUrlList[result], mimeResume: result }; - } else { - result = mimeSelector(file.type); - } - //If plain text - const extention: string = getExt(file.name); - - if (result === "text") { - result = checkIsCode(extention); - - } - //If octet stream result, second chance: file extention - if (result === DEF_GEN_MIME) { - result = extensionSelector(extention); - } - - const customUrl = customIcons?.[result]; - if (customUrl !== undefined) - return { url: customUrl, mimeResume: result }; - - - return { url: mimeUrlList[result], mimeResume: result }; -} -/** - * Looks for a suitable file icon - * @param props mime and extension from file to search - * @returns the result file ico, if not found, turns octet-stream url - */ -export const getURLFileIcoFromNameAndType = ( - name: string | undefined, - type: string | undefined, - customIcons: IconsMap | undefined -): ResultFileIco => { - - let result: keyof IconsMap = "octet"; - //if not nam and type, return octet - if (!name) { - result = DEF_GEN_MIME; - if (customIcons?.fallBack) - return { url: customIcons?.fallBack, mimeResume: result }; - return { url: mimeUrlList[result], mimeResume: result }; - } else { - result = mimeSelector(type); - } - //If plain text - const extention: string = getExt(name); - - if (result === "text") { - result = checkIsCode(extention); - - } - //If octet stream result, second chance: file extention - if (result === DEF_GEN_MIME) { - result = extensionSelector(extention); - } - const customUrl = customIcons?.[result]; - if (customUrl !== undefined) - return { url: customUrl, mimeResume: result }; - - return { url: mimeUrlList[result], mimeResume: result }; -} -interface ResultFileIco { - url: string; - mimeResume: keyof IconsMap; -} -/** - * set of registered mimes on MDN - * https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types - * - */ -interface MimeSelector { - [mime: string]: string; -} - -const mimeUrlList: MimeSelector = { - aac: aac, - accdb: accdb, - abw: abw, - arc: freearc, - avi: avi, - azw: azw, - octet: octet, - bmp: bmp, - bz: bz, - bz2: bz2, - cda: cda, - csh: csh, - css: css, - csv: csv, - docx: docx, - drawio: drawio, - eot: eot, - epub: epub, - gzip: gzip, - gif: gif, - html: html, - //ico: ico, - icalendar: icalendar, - jar: jar, - jpeg: jpeg, - javascript: javascript, - json: json, - jsonld: jsonld, - midi: midi, - // js: js, - mp3: mp3, - mp4: mp4, - mpeg: mpeg, - mpkg: mpkg, - mp2t: octet, - odp: odp, - ods: ods, - odt: odt, - oga: oga, - ogv: ogv, - ogx: ogx, - opus: opus, - otf: otf, - png: png, - pdf: pdf, - php: php, - pptx: pptx, - psd: psd, - rar: rar, - rtf: rtf, - sass: sass, - sh: sh, - //svg: svg, - swf: swf, - tar: tar, - tiff: tiff, - ttf: ttf, - //ts: ts, - typescript: typescript, - text: text, - vsd: vsd, - wav: wav, - weba: weba, - webm: webm, - webp: webp, - woff: woff, - wma: wma, - wmv: wmv, - xhtml: html, - xlsx: xlsx, - xml: xml, - xul: xul, - zip: zip, - // threegp: threegp, - sevenzip: sevenzip, - python: python, - java: java, - react: react, - vue: vue, - - - fallBack: octet, -}; \ No newline at end of file diff --git a/src/files-ui/core/reader/imageOrientation.ts b/src/files-ui/core/reader/imageOrientation.ts deleted file mode 100644 index daf100a79aa22bf7181fd6d399b0d31535a8161a..0000000000000000000000000000000000000000 --- a/src/files-ui/core/reader/imageOrientation.ts +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Resize an image resolution given maxWidth and maxHeight - * - * Should be called with await - * @param base64Str a string representation of an imae file - * @param maxWidth the max width of he image - * @param maxHeight the max height of he image - * @returns the resized image - */ -export function getImageOrientation( - imageSource: string | undefined, -): Promise<"landscape" | "portrait"> { - return new Promise((resolve, reject) => { - console.log("getImageOrientation imageSource", imageSource); - if (!imageSource || imageSource.length === 0) { - console.log("getImageOrientation rejected", imageSource); - - reject("landscape"); - return; - } - try { - console.log("getImageOrientation try ini", imageSource); - - let img: HTMLImageElement = new Image(); - img.src = imageSource; - img.onerror = (ev: string | Event) => { - console.log("getImageOrientation There was a ne error reading", ev); - reject("landscape"); - } - img.onload = () => { - let width: number = img.width; - let height: number = img.height; - if (width > height) { - resolve("landscape"); - } else { - resolve("portrait"); - } - } - } catch (error) { - console.error("An error ocurred when trying to get the image orientation"); - - if (process.env.NODE_ENV === "development") { - console.error("An error ocurred when trying to get the image orientation"); - } - reject("landscape"); - } - }); -} - diff --git a/src/files-ui/core/reader/index.ts b/src/files-ui/core/reader/index.ts deleted file mode 100644 index f166764e80155958b50f4027e421df7e9f791036..0000000000000000000000000000000000000000 --- a/src/files-ui/core/reader/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { readAsArrayBuffer, readAsBinaryString, readAsDataURL, readAsText } from "./readers"; -export { resizeImage } from "./resizeImage"; -export { getImageOrientation } from "./imageOrientation"; \ No newline at end of file diff --git a/src/files-ui/core/reader/readers.ts b/src/files-ui/core/reader/readers.ts deleted file mode 100644 index 91ea19f3d85f98237d3f31320a6623a34a94dff3..0000000000000000000000000000000000000000 --- a/src/files-ui/core/reader/readers.ts +++ /dev/null @@ -1,110 +0,0 @@ -/** - * Reads an image (or other type) file as data URL in a promise way, - * so you can use await. - * It will return a string that contains the URL representation - * @param file File or Blob object - * @returns data URL of the file - */ -export const readAsDataURL = (file: File | Blob, onProgress?: Function, onError?: Function): Promise<string | undefined> => { - return new Promise<string | undefined>((resolve, reject) => { - try { - const reader = new FileReader(); - reader.onprogress = () => { - onProgress?.(); - } - reader.onerror = function () { - onError?.(); - } - reader.onload = function () { - resolve(reader.result as string); - } - reader.readAsDataURL(file); - } catch (error) { - reject(undefined); - } - }); -} - - - -/** - * Reads a file as Text in a promise way, so you can use await. - * If other kind of file is sent, this function will read it anyway - * and will return a string that contains the URL representation - * @param file File or Blob object - * @param encoding The type of encoding such as "base64" - * @returns data text of the file - */ -export const readAsText = (file: File | Blob, encoding?: string, onProgress?: Function, onError?: Function): Promise<string | undefined> => { - return new Promise<string | undefined>((resolve, reject) => { - try { - const reader = new FileReader(); - reader.onload = function () { - resolve(reader.result as string); - } - reader.onprogress = () => { - onProgress?.(); - } - reader.onerror = function () { - onError?.(); - } - reader.readAsText(file, encoding ? encoding : "base64"); - } catch (error) { - reject(undefined); - } - }); -} - - - -/** - * Reads a file and return the raw binary data from the file. - * @param file File or Blob object - * @param encoding The type of encoding such as "base64" - * @returns raw binary data of the file - */ -export const readAsBinaryString = (file: File | Blob, onProgress?: Function, onError?: Function): Promise<string | undefined> => { - return new Promise<string | undefined>((resolve, reject) => { - try { - const reader = new FileReader(); - reader.onload = function () { - resolve(reader.result as string); - } - reader.onprogress = () => { - onProgress?.(); - } - reader.onerror = function () { - onError?.(); - } - reader.readAsBinaryString(file); - } catch (error) { - reject(undefined); - } - }); -} - -/** - * Reads a file and returns an ArrayBuffer representing the file's data - * @param file File or blob object - * @param encoding The type of encoding such as "base64" - * @returns ArrayBuffer representation of the file - */ -export const readAsArrayBuffer = (file: File | Blob, onProgress?: Function, onError?: Function): Promise<string | undefined> => { - return new Promise<string | undefined>((resolve, reject) => { - try { - const reader = new FileReader(); - reader.onload = function () { - resolve(reader.result as string); - } - reader.onprogress = () => { - onProgress?.(); - } - reader.onerror = function () { - onError?.(); - } - reader.readAsArrayBuffer(file); - } catch (error) { - reject(undefined); - } - }); -} \ No newline at end of file diff --git a/src/files-ui/core/reader/resizeImage.ts b/src/files-ui/core/reader/resizeImage.ts deleted file mode 100644 index 47b15ab643d49d74d5792f56548a4cb17c2a4b8c..0000000000000000000000000000000000000000 --- a/src/files-ui/core/reader/resizeImage.ts +++ /dev/null @@ -1,62 +0,0 @@ -/** - * Resize an image resolution given maxWidth and maxHeight - * - * Should be called with await - * @param base64Str a string representation of an imae file - * @param maxWidth the max width of he image - * @param maxHeight the max height of he image - * @returns the resized image - */ -export function resizeImage( - base64Str: string, - maxWidth = 135, - maxHeight = 120 -): Promise<string | undefined> { - return new Promise((resolve, reject) => { - try { - let img: HTMLImageElement = new Image(); - img.src = base64Str; - img.onload = () => { - let canvas: HTMLCanvasElement = document.createElement('canvas'); - const MAX_WIDTH: number = maxWidth; - const MAX_HEIGHT: number = maxHeight; - let width: number = img.width; - let height: number = img.height; - - if (maxWidth > width && maxHeight > height) { - resolve(base64Str); - } else - if (width > height) { - if (width > MAX_WIDTH) { - height *= MAX_WIDTH / width; - width = MAX_WIDTH; - } - } else { - if (height > MAX_HEIGHT) { - width *= MAX_HEIGHT / height; - height = MAX_HEIGHT; - } - } - canvas.width = width - canvas.height = height - let ctx: CanvasRenderingContext2D | null = canvas.getContext('2d') - if (ctx) { - ctx.drawImage(img, 0, 0, width, height); - resolve(canvas.toDataURL()); - - } else { - if (process.env.NODE_ENV === "development") { - console.error("An error ocurred when trying to make a thumnail"); - } - reject(undefined); - } - } - } catch (error) { - if (process.env.NODE_ENV === "development") { - console.error("An error ocurred when trying to make a thumnail"); - } - reject(undefined); - } - }); -} - diff --git a/src/files-ui/core/ripple/index.ts b/src/files-ui/core/ripple/index.ts deleted file mode 100644 index 62b0479ebf58dffcbbed15c15c4eaed901021532..0000000000000000000000000000000000000000 --- a/src/files-ui/core/ripple/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { createFuiRippleFromDiv,createRippleButton } from "./ripple"; \ No newline at end of file diff --git a/src/files-ui/core/ripple/ripple.ts b/src/files-ui/core/ripple/ripple.ts deleted file mode 100644 index aa52e4177c1f209af8d7c165c3adb825466cbb47..0000000000000000000000000000000000000000 --- a/src/files-ui/core/ripple/ripple.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { completeAsureColor, hexColorToRGB } from "../color"; - -const asureRippleColor = (color: string): string => { - return completeAsureColor(color, - 0.4 - ); -} - - -export function createFuiRippleFromDiv - <T extends HTMLButtonElement | HTMLAnchorElement | HTMLDivElement> - ( - fuiContainerAbs: T | null, - fuiContainerRel: T | null, - color: string - ) { - if (!fuiContainerRel || !fuiContainerAbs) return; - - fuiContainerAbs.style.display = "block"; - //removeRippleIfExist(fuiContainerRel, "dui-ripple"); - // creating the span circle ripple - const circle: HTMLSpanElement = document.createElement("span"); - //for searching - circle.id = "dui-ripple"; - //for styles - circle.className = "ripple"; - // calculates the diameter - const diameter: number = Math.max( - fuiContainerRel.clientWidth, - fuiContainerRel.clientHeight - ); - - //const rippleCircleRadius: number = diameter / 2; - - //console.log("w,h", fuiContainerRel.clientWidth, fuiContainerRel.clientHeight); - - circle.style.width = circle.style.height = `${diameter}px`; - circle.style.backgroundColor = asureRippleColor(color); - - fuiContainerRel.appendChild(circle); - //remove trash - setTimeout(() => { - fuiContainerAbs.style.display = "none"; - circle?.remove(); - }, 501); -} - - -export function createRippleButton< - T extends HTMLButtonElement | HTMLAnchorElement | HTMLDivElement ->(event: React.MouseEvent<T, MouseEvent>, variant: string, color: string) { - const buttonAnchorDiv = event.currentTarget; - - const circle: HTMLSpanElement = document.createElement("span"); - - const diameter = Math.max( - buttonAnchorDiv.clientWidth, - buttonAnchorDiv.clientHeight - ); - //const radius = diameter / 2; - - circle.style.width = circle.style.height = `${diameter}px`; - /* circle.style.left = `${event.clientX - radius - }px`; - circle.style.top = `${event.clientY - radius - }px`; */ - - circle.classList.add("ripple"); - - if (variant !== "contained") { - circle.style.backgroundColor = asureRippleColor(color); - } else { - - circle.style.backgroundColor = hexColorToRGB("#ffffff", 0.4); - } - buttonAnchorDiv.appendChild(circle); - - setTimeout(() => { - circle?.remove(); - }, 501); -} \ No newline at end of file diff --git a/src/files-ui/core/synthetic-file/SyntheticFile.ts b/src/files-ui/core/synthetic-file/SyntheticFile.ts deleted file mode 100644 index 0ff5ed1f5f070edd414a9538cf449a2e0a019be1..0000000000000000000000000000000000000000 --- a/src/files-ui/core/synthetic-file/SyntheticFile.ts +++ /dev/null @@ -1,834 +0,0 @@ - -/** - * A syntetic file creator. - * Very useful for tests - */ -export abstract class SyntheticFile { - /** - * - * @param name the file name - * @param size the file size - * @param type the file type - * @returns - */ - static createFile = (name: string, size: number, type: string) => { - const file = new File([], name, { type }); - Object.defineProperty(file, "size", { - get() { - return size; - }, - }); - return file; - }; - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_aac = (size?: number): File => { - return SyntheticFile.createFile("acc_audio-file-with-large-name.aac", size ? size : 3516516, "audio/aac"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_abw = (size?: number): File => { - return SyntheticFile.createFile("abiword-file-with-large-name.abw", size ? size : 3516516, "application/x-abiword"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_freearc = (size?: number): File => { - return SyntheticFile.createFile("freearc-file-with-large-name.arc", size ? size : 3516516, "application/x-freearc"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_avi = (size?: number): File => { - return SyntheticFile.createFile("avi-file-with-large-name.avi", size ? size : 3516516, "video/x-msvideo"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_azw = (size?: number): File => { - return SyntheticFile.createFile("amazon_kindle_ebook-file-with-large-name.azw", size ? size : 3516516, "application/vnd.amazon.ebook"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_octet = (size?: number): File => { - return SyntheticFile.createFile("binary_octet_stream-file-with-large-name.bin", size ? size : 3516516, "application/octet-stream"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_bmp = (size?: number): File => { - return SyntheticFile.createFile("bit_map-file-with-large-name.bmp", size ? size : 3516516, "image/bmp"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_bz = (size?: number): File => { - return SyntheticFile.createFile("x_bzip-file-with-large-name.bz", size ? size : 3516516, "application/x-bzip"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_bz2 = (size?: number): File => { - return SyntheticFile.createFile("x_bzip_2-file-with-large-name.bz2", size ? size : 3516516, "application/x-bzip2"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_cda = (size?: number): File => { - return SyntheticFile.createFile("cd_audio-file-with-large-name.cda", size ? size : 3516516, "application/x-cdf"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_csh = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.csh", size ? size : 3516516, "application/x-csh"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_css = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.css", size ? size : 3516516, "text/css"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_csv = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.csv", size ? size : 3516516, "text/csv"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_doc = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.doc", size ? size : 3516516, "application/msword"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_docx = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.docx", size ? size : 3516516, "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_eot = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.eot", size ? size : 3516516, "application/vnd.ms-fontobject"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_epub = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.epub", size ? size : 3516516, "application/epub+zip"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_gzip = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.gz", size ? size : 3516516, "application/gzip"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_gif = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.gif", size ? size : 3516516, "image/gif"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_htm = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.htm", size ? size : 3516516, "text/html"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_html = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.html", size ? size : 3516516, "text/html"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_ico = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.ico", size ? size : 3516516, "image/vnd.microsoft.icon"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_icalendar = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.ics", size ? size : 3516516, "text/calendar"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_jar = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.jar", size ? size : 3516516, "application/java-archive"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_jpeg = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.jpeg", size ? size : 3516516, "image/jpeg"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_jpg = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.jpg", size ? size : 3516516, "image/jpeg"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_js = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.js", size ? size : 3516516, "text/javascript"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_json = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.json", size ? size : 3516516, "application/json"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_jsonld = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.jsonld", size ? size : 3516516, "application/ld+json"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_mid = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.mid", size ? size : 3516516, "audio/midi"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_x_mid = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.mid", size ? size : 3516516, "audio/x-midi"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_midi = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.midi", size ? size : 3516516, "audio/x-midi"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_x_midi = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.midi", size ? size : 3516516, "audio/x-midi"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_mjs = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.mjs", size ? size : 3516516, "text/javascript"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_mp3 = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.mp3", size ? size : 3516516, "audio/mpeg"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_mp4 = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.mp4", size ? size : 3516516, "video/mp4"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_mpeg = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.mpeg", size ? size : 3516516, "video/mpeg"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_mpkg = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.mpkg", size ? size : 3516516, "application/vnd.apple.installer+xml"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_odp = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.odp", size ? size : 3516516, "application/vnd.oasis.opendocument.presentation"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_ods = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.ods", size ? size : 3516516, "application/vnd.oasis.opendocument.spreadsheet"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_odt = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.odt", size ? size : 3516516, "application/vnd.oasis.opendocument.text"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_oga = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.oga", size ? size : 3516516, "audio/ogg"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_ogv = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.ogv", size ? size : 3516516, "video/ogg"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_ogx = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.ogx", size ? size : 3516516, "application/ogg"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_opus = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.opus", size ? size : 3516516, "audio/opus"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_otf = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.otf", size ? size : 3516516, "font/otf"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_png = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.png", size ? size : 3516516, "image/png"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_pdf = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.pdf", size ? size : 3516516, "application/pdf"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_php = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.php", size ? size : 3516516, "application/x-httpd-php"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_ppt = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.ppt", size ? size : 3516516, "application/vnd.ms-powerpoint"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_pptx = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.pptx", size ? size : 3516516, "application/vnd.openxmlformats-officedocument.presentationml.presentation"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_rar = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.rar", size ? size : 3516516, "application/vnd.rar"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_rtf = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.rtf", size ? size : 3516516, "application/rtf"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_sh = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.sh", size ? size : 3516516, "application/x-sh"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_svg = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.svg", size ? size : 3516516, "image/svg+xml"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_swf = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.swf", size ? size : 3516516, "application/x-shockwave-flash"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_tar = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.tar", size ? size : 3516516, "application/x-tar"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_tif = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.tif", size ? size : 3516516, "image/tiff"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_tiff = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.tiff", size ? size : 3516516, "image/tiff"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_ts = (size?: number): File => { - return SyntheticFile.createFile("mp2t_video-file-with-large-name.ts", size ? size : 3516516, "video/mp2t"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_ttf = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.ttf", size ? size : 3516516, "font/ttf"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_text = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.txt", size ? size : 3516516, "text/plain"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_typescript = (size?: number): File => { - return SyntheticFile.createFile("typescript-file-with-large-name.ts", size ? size : 3516516, "text/plain"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_vsd = (size?: number): File => { - return SyntheticFile.createFile("ms_visio-file-with-large-name.vsd", size ? size : 3516516, "application/vnd.visio"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_wav = (size?: number): File => { - return SyntheticFile.createFile("wav_audio-file-with-large-name.wav", size ? size : 3516516, "audio/wav"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_weba = (size?: number): File => { - return SyntheticFile.createFile("web_audio-file-with-large-name.weba", size ? size : 3516516, "audio/webm"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_webm = (size?: number): File => { - return SyntheticFile.createFile("web_video-file-with-large-name.webm", size ? size : 3516516, "video/webm"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_webp = (size?: number): File => { - return SyntheticFile.createFile("web_image-file-with-large-name.webp", size ? size : 3516516, "image/webp"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_woff = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.woff", size ? size : 3516516, "font/woff"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_woff2 = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.woff2", size ? size : 3516516, "font/woff2"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_xhtml = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.xhtml", size ? size : 3516516, "application/xhtml+xml"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_xlsx = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.xls", size ? size : 3516516, "application/vnd.ms-excel"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_xls = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.xlsx", size ? size : 3516516, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_xml = (size?: number): File => { - return SyntheticFile.createFile("xml-file-with-large-name.xml", size ? size : 3516516, "application/xml"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_xml_txt = (size?: number): File => { - return SyntheticFile.createFile("xml_plain_text-file-with-large-name.xml", size ? size : 3516516, "application/xml"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_xul = (size?: number): File => { - return SyntheticFile.createFile("test-file-with-large-name.xul", size ? size : 3516516, "application/vnd.mozilla.xul+xml"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_zip = (size?: number): File => { - return SyntheticFile.createFile("zip-file-with-large-name.zip", size ? size : 3516516, "application/zip"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_3gp = (size?: number): File => { - return SyntheticFile.createFile("3gp_video-file-with-large-name.3gp", size ? size : 3516516, "video/3gpp"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_3gp2 = (size?: number): File => { - return SyntheticFile.createFile("3gp2_video-file-with-large-name.3g2", size ? size : 3516516, "video/3gpp2"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_3gp_a = (size?: number): File => { - return SyntheticFile.createFile("3gp_audio-file-with-large-name.3gp", size ? size : 3516516, "audio/3gpp"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_3gp_v = (size?: number): File => { - return SyntheticFile.createFile("3gp_audio-file-with-large-name.3gp2", size ? size : 3516516, "audio/3gpp2"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_7z = (size?: number): File => { - return SyntheticFile.createFile("seven_zip-file-with-large-name.7z", size ? size : 3516516, "application/x-7z-compressed"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_python = (size?: number): File => { - return SyntheticFile.createFile("python-file-with-large-name.py", size ? size : 3516516, "text/plain"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_java = (size?: number): File => { - return SyntheticFile.createFile("java-file-with-large-name.java", size ? size : 3516516, "text/plain"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_react = (size?: number): File => { - return SyntheticFile.createFile("react_jsx-file-with-large-name.jsx", size ? size : 3516516, "text/plain"); - } - /** - * - * @param size the file size - * @returns a syntetic File object instance - */ - static create_vue = (size?: number): File => { - return SyntheticFile.createFile("vue-file-with-large-name.vue", size ? size : 3516516, "text/plain"); - } - /** - * Creates an array of fake (synthetic) files - * @param size the file size for all synthetic files - * @returns an array of all file icon preview supported files - */ - static createFileListMiscelanious = (size?: number): File[] => { - - let listFile: File[] = []; - - listFile.push(SyntheticFile.create_aac(size)); - listFile.push(SyntheticFile.create_abw(size)); - listFile.push(SyntheticFile.create_freearc(size)); - listFile.push(SyntheticFile.create_avi(size)); - listFile.push(SyntheticFile.create_azw(size)); - listFile.push(SyntheticFile.create_octet(size)); - listFile.push(SyntheticFile.create_bmp(size)); - listFile.push(SyntheticFile.create_bz(size)); - listFile.push(SyntheticFile.create_bz2(size)); - listFile.push(SyntheticFile.create_cda(size)); - listFile.push(SyntheticFile.create_csh(size)); - listFile.push(SyntheticFile.create_css(size)); - listFile.push(SyntheticFile.create_csv(size)); - listFile.push(SyntheticFile.create_doc(size)); - listFile.push(SyntheticFile.create_docx(size)); - listFile.push(SyntheticFile.create_eot(size)); - listFile.push(SyntheticFile.create_epub(size)); - listFile.push(SyntheticFile.create_gzip(size)); - listFile.push(SyntheticFile.create_gif(size)); - listFile.push(SyntheticFile.create_htm(size)); - listFile.push(SyntheticFile.create_html(size)); - listFile.push(SyntheticFile.create_ico(size)); - listFile.push(SyntheticFile.create_icalendar(size)); - listFile.push(SyntheticFile.create_jar(size)); - listFile.push(SyntheticFile.create_jpeg(size)); - listFile.push(SyntheticFile.create_jpg(size)); - listFile.push(SyntheticFile.create_js(size)); - listFile.push(SyntheticFile.create_json(size)); - listFile.push(SyntheticFile.create_jsonld(size)); - listFile.push(SyntheticFile.create_mid(size)); - listFile.push(SyntheticFile.create_midi(size)); - listFile.push(SyntheticFile.create_x_mid(size)); - listFile.push(SyntheticFile.create_x_midi(size)); - listFile.push(SyntheticFile.create_mjs(size)); - listFile.push(SyntheticFile.create_mp3(size)); - listFile.push(SyntheticFile.create_mp4(size)); - listFile.push(SyntheticFile.create_mpeg(size)); - listFile.push(SyntheticFile.create_mpkg(size)); - listFile.push(SyntheticFile.create_odp(size)); - listFile.push(SyntheticFile.create_ods(size)); - listFile.push(SyntheticFile.create_odt(size)); - listFile.push(SyntheticFile.create_oga(size)); - listFile.push(SyntheticFile.create_ogv(size)); - listFile.push(SyntheticFile.create_ogx(size)); - listFile.push(SyntheticFile.create_opus(size)); - listFile.push(SyntheticFile.create_otf(size)); - listFile.push(SyntheticFile.create_png(size)); - listFile.push(SyntheticFile.create_pdf(size)); - listFile.push(SyntheticFile.create_php(size)); - listFile.push(SyntheticFile.create_ppt(size)); - listFile.push(SyntheticFile.create_pptx(size)); - listFile.push(SyntheticFile.create_rar(size)); - listFile.push(SyntheticFile.create_rtf(size)); - listFile.push(SyntheticFile.create_sh(size)); - listFile.push(SyntheticFile.create_svg(size)); - listFile.push(SyntheticFile.create_swf(size)); - listFile.push(SyntheticFile.create_tar(size)); - listFile.push(SyntheticFile.create_tif(size)); - listFile.push(SyntheticFile.create_tiff(size)); - listFile.push(SyntheticFile.create_ts(size)); - listFile.push(SyntheticFile.create_ttf(size)); - listFile.push(SyntheticFile.create_text(size)); - listFile.push(SyntheticFile.create_typescript(size)); - listFile.push(SyntheticFile.create_vsd(size)); - listFile.push(SyntheticFile.create_wav(size)); - listFile.push(SyntheticFile.create_weba(size)); - listFile.push(SyntheticFile.create_webm(size)); - listFile.push(SyntheticFile.create_webp(size)); - listFile.push(SyntheticFile.create_woff(size)); - listFile.push(SyntheticFile.create_woff2(size)); - listFile.push(SyntheticFile.create_xhtml(size)); - listFile.push(SyntheticFile.create_xlsx(size)); - listFile.push(SyntheticFile.create_xls(size)); - listFile.push(SyntheticFile.create_xml(size)); - listFile.push(SyntheticFile.create_xml_txt(size)); - listFile.push(SyntheticFile.create_xul(size)); - listFile.push(SyntheticFile.create_zip(size)); - //listFile.push(SyntheticFile.create_3gp(size)); - //listFile.push(SyntheticFile.create_3gp2(size)); - //listFile.push(SyntheticFile.create_3gp_a(size)); - //listFile.push(SyntheticFile.create_3gp_v(size)); - //listFile.push(SyntheticFile.create_7z(size)); - listFile.push(SyntheticFile.create_python(size)); - listFile.push(SyntheticFile.create_java(size)); - listFile.push(SyntheticFile.create_react(size)); - listFile.push(SyntheticFile.create_vue(size)); - - return listFile; - } -} -///////////////////// SHORTCUTS -/** - * Create a list of synthetic files with different mime types - * @param size the file size for each synthetic file - * @returns a list of synthetic file - */ -export const createListOfMultiTypeFile = (size?: number): File[] => { - return SyntheticFile.createFileListMiscelanious(size); -} - -/** - * Creates a synthetic file. - * By default, creates a png image file - * @param name the file name to show. By default is set to "png-image-file-with-large-name.png" - * @param size the size in bytes of the file. By default this value is set to 455555 - * @param type the mime type of the file. By default is set to "image/png" - * @returns - */ -export const createSyntheticFile = ( - name = "png-image-file-with-large-name.png", - size = 455555, - type = "image/png", -): File => { - return SyntheticFile.createFile(name, size, type); -} \ No newline at end of file diff --git a/src/files-ui/core/synthetic-file/index.ts b/src/files-ui/core/synthetic-file/index.ts deleted file mode 100644 index 3e508f6acfa1e1f28aa8bc1eda989abecbc4f41d..0000000000000000000000000000000000000000 --- a/src/files-ui/core/synthetic-file/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { SyntheticFile, createListOfMultiTypeFile, createSyntheticFile } from "./SyntheticFile"; -export { makeSyntheticExtFile } from "./syntheticfileGenerator"; \ No newline at end of file diff --git a/src/files-ui/core/synthetic-file/syntheticfileGenerator.ts b/src/files-ui/core/synthetic-file/syntheticfileGenerator.ts deleted file mode 100644 index 3c3ea5b59c060096cd0110d8d5bf6c98d0b20079..0000000000000000000000000000000000000000 --- a/src/files-ui/core/synthetic-file/syntheticfileGenerator.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { ExtFile, UPLOADSTATUS } from "../types"; -import { FileIdGenerator, getRandomInt } from "../utils"; -import { listOfErrors } from "../validation"; -import { getRandomUploadStatus } from "../validation/randomStatus"; - -/** - * Make a validated file that is ready to be used on FileItem component, - * if valid is not set, a random operation will decide whether the file is valid or not - * If valid is false, then the natural order is not to be uploadable and wont have upload message nor upload status - * If valid is true, then file can be uploaded and can have upload message if the status is succes or error - * @param file The file - * @param valid true if it is a valid file, otherwise is false - * @param uploadStatus the current upload status. If not given a random upload status will be set - * @param uploadMessage the upload message after uploading - * @returns a Vaidated File object - */ - export const makeSyntheticExtFile = ( - file?: File , - valid = (Math.ceil(Math.random() * 28) % 2 === 0), - uploadStatus?: UPLOADSTATUS, - uploadMessage?: string -): ExtFile => { - //if valid, naturally, can be uploaded - let errors: string[] | undefined = []; - let newUpoadStatus = uploadStatus || getRandomUploadStatus(); - - let customUploadMessage: string | undefined = uploadMessage || ""; - if (valid) { - //we can decide according to upload status - if (!uploadMessage) { - switch (newUpoadStatus) { - case "error": customUploadMessage = "Upload failed. There was an error"; break; - case "success": customUploadMessage = "File was successfully upload"; break; - default: uploadMessage = undefined; - } - } - errors = undefined; - } else { - //if not valid, just show error messages - const randInt: number = getRandomInt(0, 3); - errors.push(listOfErrors[randInt]); - newUpoadStatus = undefined; - customUploadMessage = undefined; - } - //now make a File Validated instance - const newFileValidated: ExtFile = { - id: FileIdGenerator.getNextId(), - valid: valid, - file: file, - uploadStatus: newUpoadStatus, - uploadMessage: customUploadMessage, - errors: errors - }; - return newFileValidated; -} diff --git a/src/files-ui/core/types/ExtFile.ts b/src/files-ui/core/types/ExtFile.ts deleted file mode 100644 index 300dcb1a1245ab0b88546de409d531cdb82e7574..0000000000000000000000000000000000000000 --- a/src/files-ui/core/types/ExtFile.ts +++ /dev/null @@ -1,272 +0,0 @@ -import { createSyntheticFile } from "../synthetic-file"; -import { FileIdGenerator } from "../utils/IdGenerator"; -import { listOfErrors } from "../validation"; -import { UPLOADSTATUS } from "./UploadStatus"; -import { ServerResponse } from "./uploadTypes"; - -/** - * ExtFile === "Extended File". - * This object "extends" the File Object - */ -export declare type ExtFile = { - /** - * An identifier for the extFile - */ - id?: number | string | undefined; - /** - * The file object. Used mostly when user selects or drops files in the client sid. - */ - file?: File; - /** - * The name of the file. Used mostly for displaying file data from server. - */ - name?: string; - /** - * The type of the file. Used mostly for displaying file data from server. - */ - type?: string; - /** - * The size of the file. Used mostly for displaying file data from server. - */ - size?: number; - /** - * a flag that determines whether the file is valid, not valid or it is not validated. - */ - valid?: boolean; - /** - * The list of errors when the file was validated - */ - errors?: string[]; - /** - * The current upload status. (e.g. "uploading") - */ - uploadStatus?: UPLOADSTATUS | undefined; - /** - * A message that shows the result of the upload process - */ - uploadMessage?: string; - /** - * Link, URI or string representation of an image - */ - imageUrl?: string; - /** - * The XMLHttpRequest object for performing uploads to a server - */ - xhr?: XMLHttpRequest; - /** - * The current percentage of upload progress. - * This value will have a higher priority over the upload progress value calculated inside the component. - * @default undefined - */ - progress?: number; - /** - * The additional data that will be sent to the server - * when files are uploaded individually - */ - extraUploadData?: Record<string, any>; - /** - * Any kind of extra data that could be needed. - */ - extraData?: Object; - /** - * The upload response from server - */ - serverResponse?: ServerResponse; - /** - * The url to be used to perform a GET request in order to download the - file. If defined, the download icon will be shown. - */ - downloadUrl?: string; - /** - * Link, URI, FIle object or string representation of a video - */ - videoUrl?: string; -} - -/** - * A class definition for ExtFile. - * This class has the purpose to allow the creation of instances - * of an ExtFile for performing complex operations that cannot be - * accomplished just by using the ExtFile type. - * For instance, it can help in changing the value of some attributes - * across different scopes thanks to memory reference. - */ -export class ExtFileInstance { - /** - * An identifier for the extFile - */ - public id?: number | string; - /** - * The file object. Used mostly when user selects or drops files in the client sid. - */ - public file?: File; - /** - * The name of the file. Used mostly for displaying file data from server. - */ - public name?: string; - /** - * The type of the file. Used mostly for displaying file data from server. - */ - public type?: string; - /** - * The size of the file. Used mostly for displaying file data from server. - */ - public size?: number; - - public imageUrl?: string; - /** - * A flag that determines whether the file is valid, not valid or it is not validated. - */ - public valid?: boolean; - /** - * The list of errors when the file was validated - */ - public errors?: string[]; - /** - * A message that shows the result of the upload process - */ - public uploadMessage?: string; - /** - * The current upload status. (e.g. "uploading") - */ - public uploadStatus?: UPLOADSTATUS | undefined; - /** - * The current upload progress - */ - public progress?: number; - /** - * The XMLHttpRequest object for performing uploads to a server - */ - public xhr?: XMLHttpRequest; - /** - * The additional data that will be sent to the server - */ - public extraData?: Record<string, any>; - /** - * The additional data that will be sent to the server - * when filesare uploaded individually - */ - public extraUploadData?: Record<string, any>; - /** - * The upload response from server - */ - public serverResponse?: ServerResponse; - /** - * Url to perform a GET request in order to download the file. - * This action is triggered when download button is clicked or pressed. - * In case onDownload prop is given - */ - public downloadUrl?: string; - /** - * Link, URI, FIle object or string representation of a video - */ - public videoUrl?: string; - - constructor(extFile: ExtFile) { - const { - id, - file, - name, - size, - type, - imageUrl, - valid, - errors, - uploadMessage, - uploadStatus, - progress, - xhr, - extraData, - extraUploadData, - serverResponse, - downloadUrl, videoUrl - } = extFile; - - this.id = id; - this.file = file; - this.name = name; - this.size = size; - this.type = type; - this.imageUrl = imageUrl; - - this.valid = valid; - this.errors = errors; - this.uploadStatus = uploadStatus; - this.uploadMessage = uploadMessage; - this.progress = progress; - this.xhr = xhr; - - this.extraData = extraData; - this.extraUploadData = extraUploadData; - this.serverResponse = serverResponse; - - this.downloadUrl = downloadUrl; - this.videoUrl = videoUrl; - } - /** - * method under construction - */ - private static kamuiFile() { - - } - - /** - * Copies all non undefined attributes from ExtFileInstance to a new ExtFile object - * @param extFileInstance the instance of ExtFile - * @returns an ExtFile object - */ - static toExtFile(extFileInstance: ExtFileInstance): ExtFile { - console.log("before toExtFile()", extFileInstance); - - let extFileClone: ExtFile = {}; // the new empty object - const extFileInstanceKeys = Object.keys(extFileInstance) as [keyof ExtFile]; - const extFileInstanceValues = Object.values(extFileInstance); - // let's copy all user properties into it - for (let i = 0; i < extFileInstanceKeys.length; i++) { - if (extFileInstanceValues[i] !== undefined) { - extFileClone[extFileInstanceKeys[i]] = extFileInstanceValues[i]; - } - } - console.log("after toExtFile()", extFileClone); - - return extFileClone; - } - /** - * Copies all non undefined attributes from ExtFileInstance to a new ExtFile object. - * @returns an ExtFile object - */ - toExtFile(): ExtFile { - return ExtFileInstance.toExtFile(this); - } - - static mock = (): ExtFileInstance => { - return new ExtFileInstance( - extFileMock() - ); - } -} -export const extFileMock = (): ExtFile => { - return { - id: FileIdGenerator.getNextId(), - name: "fileName.ext", - size: 28 * 1024 * 1024, - type: "files-ui/mock", - file: createSyntheticFile("fileName.ext", 28 * 1024 * 1024, "files-ui/mock"), - errors: listOfErrors, - uploadMessage: "uploaded", - uploadStatus: "preparing", - valid: false, - progress: 28, - xhr: new XMLHttpRequest(), - extraData: { - extraData1: "files-ui is the best", - extraData2: { - id: 1, - name: "files-ui.mock" - }, - deleted: true - }, - downloadUrl: "https://www.files-ui.com/mock/file-download" - } -} - diff --git a/src/files-ui/core/types/ExtFileManager.ts b/src/files-ui/core/types/ExtFileManager.ts deleted file mode 100644 index 7eaa531e4dcc38162460250345048db4b0777a78..0000000000000000000000000000000000000000 --- a/src/files-ui/core/types/ExtFileManager.ts +++ /dev/null @@ -1,226 +0,0 @@ -import { ExtFileInstance, ExtFile } from "./ExtFile"; - -export class ExtFileManager { - private static nextId: number = 0; - static fileLists: Record<number | string, ExtFileInstance[] | undefined> = {}; - /** - * Increases the id counter and returns the next id available. - * @returns the next integer id available - */ - public static getNextId(): number { - ExtFileManager.nextId++; - return ExtFileManager.nextId; - } - /** - * Updates a dui file list given an id - * @param id id of the fileList - * @param extFiles list of DuiFiles forinitializing the array - * @returns the id of the fileList - */ - public static setFileList( - id: number | string | undefined, - extFilesInstances: ExtFileInstance[] - ): number | string { - if (!id) { - return 0; - } else { - ExtFileManager.fileLists[id] = [...extFilesInstances]; - - return id; - } - - } - /** - * Generates a new ID - * @returns the next Id asociated with a DuiFIle list - */ - public static createFileListMap(): number { - const nextId: number = ExtFileManager.getNextId(); - ExtFileManager.fileLists[nextId] = []; - - return nextId; - } - - /** - * Deletes a list map - * @returns the next Id asociated with a DuiFIle list - */ - public static removeFileListMap(id?: number | string): number | string { - if (!id) { - return 0; - } else { - try { - ExtFileManager.fileLists[id] = undefined; - return id; - } catch (error) { - - console.error("Error on remove", error); - return 0; - } - } - } - /** - * - * @param id the id of the dropzone - * @returns - */ - public static getExtFileInstanceList( - id?: number | string - ): ExtFileInstance[] | undefined { - try { - if (!id) { - return undefined; - } - return ExtFileManager.fileLists[id]; - } catch (error) { - console.error("Error on getExtFileInstanceList", error); - return undefined; - } - } - /** - * Updates(replaces) the extFile list on preparing stage and returns the new array. - * Removes the non valid files if cleanOnUpload is true and validateFiles is also true - * Then sets on preparing stage all files according to the following creiteria: - * If theuploadStatus is diferent than "sucess" AND - * then, update the files on preparing stage. Otherwise keep the extFile props. - * Finally, updates the ExtFileInstance list on ExtFileManager. - * @param dropzoneId the id to access the right list - * @param localFiles the list of extFiles - * @param validateFiles flag that indicates that validation is active or o¿not - * @param cleanOnUpload flag to determine whther to clena the list oof non valid files or not - * @returns a list of ExtFileInstance - */ - public static setFileListMapPreparing( - dropzoneId: number | string, - localFiles: ExtFile[], - validateFiles: boolean, - cleanOnUpload: boolean - ): ExtFileInstance[] | undefined { - console.log("setFileListMapPreparing before if", dropzoneId, localFiles, cleanOnUpload); - - if (!(typeof dropzoneId === "number" || typeof dropzoneId === "string")) return undefined; - - console.log("setFileListMapPreparing before try", localFiles, cleanOnUpload); - try { - - let resultExtList: ExtFileInstance[] = []; - - //initializes the extFileLInstance list - let temLocalFiles: ExtFile[] = [...localFiles]; - - //remove non valids if cleanOnUpload is true and validateFiles is also true - if (cleanOnUpload && validateFiles) { - // clean on Upload is true, so non valid files must be removed - temLocalFiles = temLocalFiles.filter(extFile => extFile.valid) - console.log("temLocalFiles filter", temLocalFiles); - } - - console.log("setFileListMapPreparing after remove non valids", temLocalFiles); - - if (validateFiles) { - // validation flag was set to true, so only valid=true files will be set to "preparing" - - //so, only valid files was kept in the temLocalfiles array - //now set the preparing state only for files with uploadStatus !== "success" - temLocalFiles = - temLocalFiles - .map(extFile => { - if (extFile.uploadStatus !== "success" && extFile.valid) { - return { ...extFile, uploadStatus: "preparing" } - } else { - return { ...extFile } - } - }); - } else { - // all files will be set to "preparing" whether the valid value - // except those files with uploadStatus ==="success" - temLocalFiles = - temLocalFiles - .map(extFile => { - if (extFile.uploadStatus !== "success") { - return { ...extFile, uploadStatus: "preparing" } - } else { - return { ...extFile } - } - }); - } - - console.log("setFileListMapPreparing result", temLocalFiles); - - //converto to Object instances - resultExtList = temLocalFiles.map(F => new ExtFileInstance(F)); - console.log("setFileListMapPreparing RESULT resultExtList", resultExtList); - - const resultSet = ExtFileManager.setFileList(dropzoneId, resultExtList); - console.log("setFileListMapPreparing RESULT resultSet", resultSet); - - return resultExtList; - // return ExtFileManager.fileLists[dropzoneId]; - } catch (error) { - console.error("setFileListMapPreparing Error on get List", error); - return undefined; - } - - } - - - - /** - * Updates(replaces) the extFile list on preparing stage and returns the new array. - * Removes the non valid files if cleanOnUpload is true and validateFiles is also true - * Then sets on preparing stage all files according to the following creiteria: - * If theuploadStatus is diferent than "sucess" AND - * then, update the files on preparing stage. Otherwise keep the extFile props. - * Finally, updates the ExtFileInstance list on ExtFileManager. - * @param dropzoneId the id to access the right list - * @param localFiles the list of extFiles - * @param validateFiles flag that indicates that validation is active or o¿not - * @param cleanOnUpload flag to determine whther to clena the list oof non valid files or not - * @returns a list of ExtFileInstance - */ - public static setFileListMapPreparing2( - dropzoneId: number | string, - localFiles: ExtFile[], - validateFiles: boolean, - cleanOnUpload: boolean - ): ExtFileInstance[] | undefined { - - ExtFileManager.setFileList(dropzoneId, localFiles.map(F => new ExtFileInstance({ ...F, uploadStatus: "preparing" }))); - - return ExtFileManager.getExtFileInstanceList(dropzoneId); - } - - - - /** - * - * @param dropzoneId - * @param index - * @param incommingDuiFile - * @returns - */ - /* public static updateFileListMapPreparingById( - dropzoneId: number, - index: number, - incommingDuiFile: ExtFileInstance - ): ExtFileInstance[] | undefined { - if (!(typeof dropzoneId === "number") || !(typeof index === "number") || index > 0) return undefined; - const extFileList: ExtFileInstance[] | undefined = ExtFileManager.fileLists[dropzoneId]; - - if (!(extFileList && extFileList.length > 0)) return undefined; - extFileList[index]= - try { - ExtFileManager.setFileList(dropzoneId, [ - ...localFiles.map( - (x) => - new ExtFileInstance({ ...x, uploadStatus: "preparing" }) - ), - ]); - return ExtFileManager.fileLists[dropzoneId]; - } catch (error) { - console.error("Error on get List", error); - return undefined; - } - - } */ -} \ No newline at end of file diff --git a/src/files-ui/core/types/FileListMap.ts b/src/files-ui/core/types/FileListMap.ts deleted file mode 100644 index bd02c8ee8e8a2fef59fc5c0ab85f816eb300dd42..0000000000000000000000000000000000000000 --- a/src/files-ui/core/types/FileListMap.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { ExtFileInstance } from "./ExtFile"; - -export declare type ExtFileListMap = { - [id: number | string]: ExtFileInstance[] | undefined; -} \ No newline at end of file diff --git a/src/files-ui/core/types/IconsMap.ts b/src/files-ui/core/types/IconsMap.ts deleted file mode 100644 index ab67a405b1f2b5890976e9d578498f0698a651db..0000000000000000000000000000000000000000 --- a/src/files-ui/core/types/IconsMap.ts +++ /dev/null @@ -1,79 +0,0 @@ - -export type IconsMap = { - aac?: string; - accdb?: string; - abw?: string; - arc?: string; - avi?: string; - azw?: string; - octet?: string; - bmp?: string; - bz?: string; - bz2?: string; - cda?: string; - csh?: string; - css?: string; - csv?: string; - docx?: string; - drawio?: string; - eot?: string; - epub?: string; - gzip?: string; - gif?: string; - html?: string; - icalendar?: string; - jar?: string; - jpeg?: string; - javascript?: string; - json?: string; - jsonld?: string; - midi?: string; - mp3?: string; - mp4?: string; - mpeg?: string; - mpkg?: string; - mp2t?: string; - odp?: string; - ods?: string; - odt?: string; - oga?: string; - ogv?: string; - ogx?: string; - opus?: string; - otf?: string; - png?: string; - pdf?: string; - php?: string; - pptx?: string; - psd?: string; - rar?: string; - rtf?: string; - sass?: string; - sh?: string; - swf?: string; - tar?: string; - tiff?: string; - ttf?: string; - typescript?: string; - text?: string; - vsd?: string; - wav?: string; - weba?: string; - webm?: string; - webp?: string; - woff?: string; - wma?: string; - wmv?: string; - xhtml?: string; - xlsx?: string; - xml?: string; - xul?: string; - zip?: string; - sevenzip?: string; - python?: string; - java?: string; - react?: string; - vue?: string; - //fallback when file type is not here - fallBack?: string; -} \ No newline at end of file diff --git a/src/files-ui/core/types/NamedColor.ts b/src/files-ui/core/types/NamedColor.ts deleted file mode 100644 index 3e15aa00711ca1b6b8967aae85b3cf69891122e4..0000000000000000000000000000000000000000 --- a/src/files-ui/core/types/NamedColor.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Interface to describe a named color - */ - export interface NamedColor { - [colorName: string]: string; -} \ No newline at end of file diff --git a/src/files-ui/core/types/UploadConfig.ts b/src/files-ui/core/types/UploadConfig.ts deleted file mode 100644 index e832d0043e18fb9ac20bf81ddde6957d3c0ab6ab..0000000000000000000000000000000000000000 --- a/src/files-ui/core/types/UploadConfig.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { Method } from "./method" - -export type UploadConfig = { - /** - * The url endpoint to upload the file. - * e.g. https://www.myasomwbackend/uploads/file - */ - url?: string; - /** - * upload method, can be POST | PUT | PATCH - * @default "POST" - */ - method?: Method; - /** - * Request headers for http request. - * e.g. - * ```jsx - * headers = { - * "content-type": "multipart/form-data", - * Authorization: "Bearer YOUR_BEARER_TOKEN_GOES_HERE", - * } - * ``` - */ - headers?: Record<string, string>; - /** - * the label to use in request - * On server this must be the label to get the file. - * @default "file" - */ - uploadLabel?: string; - /** - * Flag for indicating whther to remove the non-valid files - * before starting the upload process. - * This flag is valid only if validation is enable - */ - cleanOnUpload?: boolean; - /** - * If true, onDrop event or file selection not only will make Dropzone to return the list of files, but also - * it will start the upload stage for the files if at least url was set - * By default is false - */ - autoUpload?: boolean; - /** - * The time that will last the "preparing" stage - * By default is 1500 miliseconds = 1.5 seconds - */ - preparingTime?: number; - /** - * A message to show in the footer when the uploading process takes place. - */ - uploadingMessage?: string; -} - -export const createUploadConfig = ( - url?: string, - method?: Method, - headers?: Record<string, string>, - uploadLabel?: string, - cleanonUpload?: boolean -) => { - return { - url, - method, - headers, - uploadLabel, - cleanonUpload - } -} \ No newline at end of file diff --git a/src/files-ui/core/types/UploadStatus.ts b/src/files-ui/core/types/UploadStatus.ts deleted file mode 100644 index efa7f881ec5f2174803779f9287a15ea0d72668f..0000000000000000000000000000000000000000 --- a/src/files-ui/core/types/UploadStatus.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type UPLOADSTATUS = - "preparing" | - "aborted" | - "uploading" | - "success" | - "error"; diff --git a/src/files-ui/core/types/behaviur.ts b/src/files-ui/core/types/behaviur.ts deleted file mode 100644 index 651a3c3d0014dda8d129311ae7036138b7dd389c..0000000000000000000000000000000000000000 --- a/src/files-ui/core/types/behaviur.ts +++ /dev/null @@ -1,4 +0,0 @@ -/** - * View mode for File Items inside dropzone - */ - export declare type Behaviour = "add" | "replace"; \ No newline at end of file diff --git a/src/files-ui/core/types/index.ts b/src/files-ui/core/types/index.ts deleted file mode 100644 index 98e17c5b953f390c86ba9e5a89454db17f5e5bc7..0000000000000000000000000000000000000000 --- a/src/files-ui/core/types/index.ts +++ /dev/null @@ -1,27 +0,0 @@ - -export type { Behaviour } from "./behaviur"; - -export type { ExtFile } from "./ExtFile"; -export { ExtFileInstance, extFileMock } from "./ExtFile"; - -export { ExtFileManager } from "./ExtFileManager"; - -export type { ExtFileListMap } from "./FileListMap"; - -export type { Localization, FunctionLabel, ComponentLocalizer, LocalLabels } from "./localization"; - -export type { Method } from "./method"; - -export type { NamedColor } from "./NamedColor"; - -export type { UPLOADSTATUS } from "./UploadStatus"; - -export type { ServerResponse, UploadPromiseResponse, UploadResponse } from "./uploadTypes"; - -export type { ValidateFileResponse, FileValidatorProps } from "./validation"; - -export type { UploadConfig } from "./UploadConfig"; - -export { createUploadConfig } from "./UploadConfig"; - -export type { IconsMap } from "./IconsMap"; \ No newline at end of file diff --git a/src/files-ui/core/types/localization.ts b/src/files-ui/core/types/localization.ts deleted file mode 100644 index 8a97004cc8e4209aa8bf9dc7d04d7317d34799c4..0000000000000000000000000000000000000000 --- a/src/files-ui/core/types/localization.ts +++ /dev/null @@ -1,23 +0,0 @@ -export type Localization = - "EN-en" - | "ES-es" - | "FR-fr" - | "IT-it" - | "PT-pt" - | "RU-ru" - | "ZH-cn" - | "ZH-hk"; - - - -export type FunctionLabel = ((s1: string | number, s2?: string | number, s3?: string) => string); - -export type LocalLabels = { - [label: string]: string | FunctionLabel | LocalLabels; -} -//export const DropzoneLocalizer - - -export type ComponentLocalizer = { - [language in Localization]: LocalLabels; -}; \ No newline at end of file diff --git a/src/files-ui/core/types/method.ts b/src/files-ui/core/types/method.ts deleted file mode 100644 index 5078e9a6bb3439b3b0267f039cb93151504456f4..0000000000000000000000000000000000000000 --- a/src/files-ui/core/types/method.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Method to be used for request - */ -export declare type Method = "POST" | "PUT" | "PATCH"; - -/** - * - * @param method the method in string format - * @returns true if method is included in ["POST", "PUT", "PATCH"] - */ -export const idValidMethod = (method: string): boolean => { - return ["POST", "PUT", "PATCH"].includes(method.toLowerCase()); -} \ No newline at end of file diff --git a/src/files-ui/core/types/uploadTypes.ts b/src/files-ui/core/types/uploadTypes.ts deleted file mode 100644 index f2f145ca59f860f0c186b6c1644a0db10e0e9073..0000000000000000000000000000000000000000 --- a/src/files-ui/core/types/uploadTypes.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { ExtFile } from "./ExtFile"; - -export declare type UploadResponse_ = { - id: number | string | undefined; - uploadedFile: ExtFile; -} - -export declare type UploadPromiseResponse = { - uploadResponse: UploadResponse; - uploadedFile: ExtFile; -} - -///////// -export declare type UploadResponse = { - id: number | string | undefined; - serverResponse: ServerResponse | {}; - uploadedFile: ExtFile; -} - -export type ServerResponse = { - /** - * If true, it means that the request was successful. - */ - success: boolean; - /** - * A message that describes the result of the request. - */ - message?: string; - /** - * The response of the server. - */ - payload?: any; -} - diff --git a/src/files-ui/core/types/validation.ts b/src/files-ui/core/types/validation.ts deleted file mode 100644 index 453a5cc4919623134eaa53dfefa0e39194ed85ab..0000000000000000000000000000000000000000 --- a/src/files-ui/core/types/validation.ts +++ /dev/null @@ -1,24 +0,0 @@ - -export declare type FileValidatorProps = { - /** - * max file size in bytes - */ - maxFileSize?: number; - /** - * a comma separated list of mime types or file extensions. - */ - accept?: string; -} - -export declare type ValidateFileResponse = { - /** - * if true, that means the file is valid - */ - valid: boolean, - /** - * the list of erros associated with an specific file - */ - errors?: string[] -} - - diff --git a/src/files-ui/core/upload/addExtraData.upload.ts b/src/files-ui/core/upload/addExtraData.upload.ts deleted file mode 100644 index ca592499620232795f5c7a6d457579386d9a3eac..0000000000000000000000000000000000000000 --- a/src/files-ui/core/upload/addExtraData.upload.ts +++ /dev/null @@ -1,17 +0,0 @@ -export default function addExtraData( - formData: FormData, - extraData: Record<string, string> | undefined -) { - //headers - const extraDataKeys: string[] = Object.keys(extraData || {}); - //const headerValues: string[] = Object.values(headers); - for (let i = 0; i < extraDataKeys.length && extraData; i++) { - console.log("uploadFile extraData", extraDataKeys[i], extraData[extraDataKeys[i]]); - - formData.append(extraDataKeys[i], extraData[extraDataKeys[i]]); - - } - - formData.append("otherValue", "HAAAAAAAAAAAAAAa"); - -} \ No newline at end of file diff --git a/src/files-ui/core/upload/addheaders.upload.ts b/src/files-ui/core/upload/addheaders.upload.ts deleted file mode 100644 index 2ba05b769b8927862169e1a10d6ead6b2dd15496..0000000000000000000000000000000000000000 --- a/src/files-ui/core/upload/addheaders.upload.ts +++ /dev/null @@ -1,17 +0,0 @@ -export default function addHeaders( - xhr: XMLHttpRequest, - headers: Record<string, string> | undefined -) { - //headers - const headerKeys: string[] = Object.keys(headers || {}); - //const headerValues: string[] = Object.values(headers); - for (let i = 0; i < headerKeys.length && headers; i++) { - console.log("uploadFile headers", headerKeys[i], headers[headerKeys[i]]); - xhr.setRequestHeader( - headerKeys[i], - headers[headerKeys[i]] - ); - } - - -} \ No newline at end of file diff --git a/src/files-ui/core/upload/errors.upload.ts b/src/files-ui/core/upload/errors.upload.ts deleted file mode 100644 index fa7da54598ebfbb1e9f169e09bfe13eebbe5855f..0000000000000000000000000000000000000000 --- a/src/files-ui/core/upload/errors.upload.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { ExtFile, UploadResponse } from "../types"; - -export const TIMEOUT_ERROR_RESPONSE = { - success: false, - message: "Timeout error", - payload: {} -}; -export const ABORTED_ERROR_RESPONSE = { - success: false, - message: "Upload aborted", - payload: {} -} -export const JSON_PARSE_ERROR_RESPONSE = { - success: false, - message: "Error when parsing JSON response", - payload: {} -} - -export const UNEXPECTED_ERROR_RESPONSE = { - success: false, - message: "Unexpected error", - payload: {} -} - -export const NO_XHR_PROVIDED_ERROR = (extFile: ExtFile): ExtFile => { - return { - - ...extFile, - uploadMessage: "Unable to upload. xhr object was not provided", - uploadStatus: "error", - - serverResponse: { success: false, } - } -} \ No newline at end of file diff --git a/src/files-ui/core/upload/index.ts b/src/files-ui/core/upload/index.ts deleted file mode 100644 index db4a27dee64f6f27f61da69ab6a2d38979525ab4..0000000000000000000000000000000000000000 --- a/src/files-ui/core/upload/index.ts +++ /dev/null @@ -1,35 +0,0 @@ -export { - - uploadExtFile, - FuiUpload, - uploadFile, - uploadFormData, -} from "./upload"; -export { - ABORTED_ERROR_RESPONSE, - JSON_PARSE_ERROR_RESPONSE, - NO_XHR_PROVIDED_ERROR, - TIMEOUT_ERROR_RESPONSE, - UNEXPECTED_ERROR_RESPONSE, -} from "./errors.upload"; -export { - JsonParseResponse, - makeErrorUploadResponse, - makeServerResponse, - makeSuccessUploadResponse, -} from "./response.upload"; - -export { default as addExtraData } from "./addExtraData.upload"; -export { default as addHeaders } from "./addheaders.upload"; - -export { - instantPreparingToUploadOne, - preparingToUploadOne, - sleepTransition, - toUploadableExtFileList, - completeUploadResult, - sanitizeArrExtFile, - unableToUploadResult, - unexpectedErrorUploadResult, - setNextUploadStatus -} from "./utils.upload"; diff --git a/src/files-ui/core/upload/response.upload.ts b/src/files-ui/core/upload/response.upload.ts deleted file mode 100644 index 32707c4cbb64d443e652cdb4753fb738c6407eb3..0000000000000000000000000000000000000000 --- a/src/files-ui/core/upload/response.upload.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { ExtFile, ServerResponse, UploadResponse } from "../types"; -import { JSON_PARSE_ERROR_RESPONSE } from "./errors.upload"; - -export const makeServerResponse = (success: any, message: string, payload: any): ServerResponse => { - const result: ServerResponse = { success: success, message: message, payload: payload } as ServerResponse; - return result; -} -export const JsonParseResponse = (xhr: XMLHttpRequest): ServerResponse => { - try { - const jsonResponse = JSON.parse(xhr.response); - const success: any = jsonResponse.success; - const message: string = jsonResponse.message; - const payload: any = jsonResponse.payload; - - const fuiResponse: ServerResponse = { - success: typeof success === "boolean" ? success : false, - message: typeof message === "string" ? message : "Error on message response", - payload: payload || {} - } - return fuiResponse - } catch (error) { - console.log("FuiUpload ERROR", error); - return JSON_PARSE_ERROR_RESPONSE; - } -} - - - -export const makeSuccessUploadResponse = ( - extFile: ExtFile, - responseFui: ServerResponse -): ExtFile => { - return { - ...extFile, - serverResponse: responseFui, - uploadMessage: responseFui.message, - uploadStatus: "success" - - } -} - - -export const makeErrorUploadResponse = ( - extFile: ExtFile, - responseFui: ServerResponse -): ExtFile => { - console.log("makeErrorUploadResponse", extFile, responseFui); - return { - ...extFile, - uploadMessage: responseFui.message, - uploadStatus: "error", - serverResponse: responseFui, - } -} - diff --git a/src/files-ui/core/upload/upload.ts b/src/files-ui/core/upload/upload.ts deleted file mode 100644 index 10627038cb4af3c0c5eaf9a4d960a0b6ff55e7dd..0000000000000000000000000000000000000000 --- a/src/files-ui/core/upload/upload.ts +++ /dev/null @@ -1,250 +0,0 @@ -import { ExtFile, Method, UPLOADSTATUS } from "../types"; -import { ServerResponse, UploadResponse } from "../types/uploadTypes"; -import addExtraDataUpload from "./addExtraData.upload"; -import addHeaders from "./addheaders.upload"; -import { ABORTED_ERROR_RESPONSE, NO_XHR_PROVIDED_ERROR, TIMEOUT_ERROR_RESPONSE, UNEXPECTED_ERROR_RESPONSE } from "./errors.upload"; -import { JsonParseResponse, makeErrorUploadResponse, makeSuccessUploadResponse } from "./response.upload"; -import { completeUploadResult, unableToUploadResult } from "./utils.upload"; - - -/** - * Uploads one formData object to a given endpoint in a promisified way - * @param xhr XMLHTTPrequest object - * @param method method for uploading - * @param endpoint endpoint to upload the file - * @param data FromData object to perform multipart form data upload - * @param headers the set of headers - * @returns a server response that consists on {status, payload, message} - */ -export const uploadFormData = ( - xhr: XMLHttpRequest, - method: Method | undefined = "POST", - endpoint: string, - data: FormData, - headers: Record<string, string> | undefined -) => { - return new Promise<ServerResponse>((resolve, reject) => { - console.log("Fui_uploadFormData uploadFile", xhr, method, endpoint, data, headers); - - const finalMethod: Method = ["POST", "PUT", "PATCH"].includes(method.toUpperCase()) ? method : "POST"; - - let lastLastState: number = -1; - let lastState: number = 0; - let jumped: boolean = false; - - xhr.upload.onload = () => { - console.log("Fui_uploadFormData uploadFile onLoad", xhr.readyState, xhr.response); - }; - xhr.upload.ontimeout = () => resolve(TIMEOUT_ERROR_RESPONSE); - xhr.upload.onabort = () => { - console.log("Fui_uploadFormData ABORTEEEEDDDD"); - resolve(ABORTED_ERROR_RESPONSE); - }; - xhr.onloadend = async (e) => { - console.log("onloadend loaded", e.loaded); - console.log("onloadend total", e.total); - console.log("onloadend lengthComputable", e.lengthComputable); - - } - // listen for `progress` event - //currently listening on FileItem component hook - xhr.onreadystatechange = async (e) => { - //console.log("Finished", xhr); - - console.log("Fui_uploadFormData uploadFile onreadystatechange e.type", e.type); - console.log("Fui_uploadFormData uploadFile onreadystatechange", xhr.readyState, xhr.response); - - lastLastState = lastState; - lastState = xhr.readyState; - - if (xhr.readyState === 4) { - if (xhr.response !== "") { - //there is th answer - resolve(JsonParseResponse(xhr)); - } else { - //error unexpected - console.log("Fui_uploadFormData EMPTY status", xhr.status); - console.log("Fui_uploadFormData EMPTY readyState", xhr.readyState); - console.log("Fui_uploadFormData EMPTY upload", xhr.upload); - //console.log("Fui_uploadFormData EMPTY abort", xhr.abort); - //const jumped = lastLastState - lastLastState !== 1; - resolve(ABORTED_ERROR_RESPONSE); - - } - } else { - console.log("Fui_uploadFormData FuiUpload NOT YET" + xhr.readyState); - } - }; - // open request - xhr.open(finalMethod, endpoint, true); - - //add header to request - addHeaders(xhr, headers); - //start uploading - xhr.send(data); - }); - -}; - -/** - * - * @param file the extended file to be uploaded - * @param url the endpoint - * @param method the method for uploading - * @param headers headers for request - * @returns - */ -export const uploadExtFile = async ( - extFile: ExtFile, - url: string, - method?: Method, - headers?: Record<string, string>, - uploadLabel?: string, -): Promise<ExtFile> => { - return new Promise(async (resolve, reject) => { - try { - const uploader: XMLHttpRequest | undefined = extFile.xhr; - - if (!uploader) { - resolve(NO_XHR_PROVIDED_ERROR(extFile)); - return; - } - - const localMethod: Method = method || "POST"; - const fileToUpload: File = extFile.file as File; - - const formData = new FormData(); - - formData.append(uploadLabel || "file", fileToUpload); - - // add extra data to upload - const finalExtraData: Record<string, any> = - { otherValue: "other valueee haaaa", param2: { tecnica: "KIKOHUUUU", friend: "Chaos", age: 25 }, ...extFile.extraUploadData }; - - addExtraDataUpload(formData, finalExtraData); - console.log("FORMDATA", formData); - - let responseFui: ServerResponse; - responseFui = await uploadFormData( - uploader, - localMethod, - url, - formData, - headers || {}); - - if (responseFui.success) { - // status is true - resolve(makeSuccessUploadResponse(extFile, responseFui)); - } else { - // status is false - resolve(makeErrorUploadResponse(extFile, responseFui)); - } - } catch (error) { - // on error - console.log("uploadPromiseXHR uploadPromiseXHR ERROR", error); - resolve( - makeErrorUploadResponse(extFile, UNEXPECTED_ERROR_RESPONSE) - ); - } - }); -}; - - - - -export function uploadFile( - file: File, - url: string, - method?: Method, - label?: string, - headers?: Record<string, string> -): Promise<ServerResponse> { - return new Promise(async (resolve, reject) => { - - - //start uploading - const formData = new FormData(); - - formData.append(label || "file", file); - - try { - const serverResponse: ServerResponse = await uploadFormData(new XMLHttpRequest(), method, url, formData, headers); - resolve(serverResponse); - } catch (error) { - // on error - console.log("uploadPromiseXHR uploadPromiseXHR ERROR", error); - resolve(UNEXPECTED_ERROR_RESPONSE); - } - }); -} - - - - - - - -/** - * @deprecated - * Uploads one formData object to a given endpoint in a promisified way - * @param xhr XMLHTTPrequest object - * @param method method for uploading - * @param endpoint endpoint to upload the file - * @param data FromData object to perform multipart form data - * @param headers the set of headers - * @returns a dui server response that consists on {success, payload, message} - */ -export const FuiUpload = ( - xhr: XMLHttpRequest, - method: Method, - endpoint: string, - data: FormData, - headers: Record<string, string> -) => { - return new Promise<ServerResponse>((resolve, reject) => { - console.log("FuiUpload params", xhr, method, endpoint, data, headers); - - xhr.upload.onload = () => { - console.log("FuiUpload onLoad", xhr.readyState, xhr.response); - }; - - xhr.upload.ontimeout = () => resolve(TIMEOUT_ERROR_RESPONSE); - xhr.upload.onabort = () => resolve(ABORTED_ERROR_RESPONSE); - - // listen for `progress` event - //currently listening on FileMosaic component hook - - xhr.onreadystatechange = async (e) => { - //console.log("Finished", xhr); - console.log("FuiUpload onreadystatechange", xhr.readyState, xhr.response, xhr); - - if (xhr.readyState === 4) { - if (xhr.response !== "") { - //there is th answer - resolve(JsonParseResponse(xhr)); - } else { - //error unexpected - resolve(UNEXPECTED_ERROR_RESPONSE); - } - } else { - console.log("FuiUpload NOT YET" + xhr.readyState); - } - }; - // open request - xhr.open(method, endpoint, true); - const headerKeys: string[] = Object.keys(headers); - //const headerValues: string[] = Object.values(headers); - for (let i = 0; i < headerKeys.length; i++) { - console.log("FuiUpload headers", headerKeys[i], headers[headerKeys[i]]); - xhr.setRequestHeader( - headerKeys[i], - headers[headerKeys[i]] - ); - } - //start uploading - xhr.send(data); - }); - -}; - - diff --git a/src/files-ui/core/upload/utils.upload.ts b/src/files-ui/core/upload/utils.upload.ts deleted file mode 100644 index 727caa94639d86df6f81e4354cad186f9c788b8b..0000000000000000000000000000000000000000 --- a/src/files-ui/core/upload/utils.upload.ts +++ /dev/null @@ -1,171 +0,0 @@ - -import { ExtFile, ExtFileInstance, ServerResponse, UploadResponse, UPLOADSTATUS } from "../types" - -export const unexpectedErrorUploadResult = (extFile: ExtFile): ExtFile => { - return { - ...extFile, - uploadMessage: "Unexpected error", - uploadStatus: "error", - serverResponse: { - success: false, - message: "Error on upload: unexpected error ", - payload: {}, - } - } -} -export const unableToUploadResult = ( - extFile: ExtFile -): UploadResponse => { - return { - id: extFile.id, - uploadedFile: { - ...extFile, - uploadMessage: "Unable to upload. XHR was not provided", - uploadStatus: "error" - }, - serverResponse: { - success: false, - message: "Error on upload: Unable to upload. XHR was not provided ", - payload: {}, - } - } -} -export const completeUploadResult = ( - extFile: ExtFile, - serverResponse: ServerResponse, - uploadStatusresult: UPLOADSTATUS -): UploadResponse => { - return { - id: extFile.id, - uploadedFile: { - ...extFile, - uploadMessage: serverResponse.message, - uploadStatus: uploadStatusresult - }, - serverResponse: serverResponse - } -} - -/** - * Initializes the xhr attribute for performing uploads - * @param extFileList the list of extended files - * @returns the array of extFiles with the xhr attribute initialized - */ -export const toUploadableExtFileList = ( - extFileList: ExtFile[] | ExtFileInstance[] -): ExtFile[] => { - if (!extFileList) return []; - return extFileList.map(extFile => { - return { ...extFile, xhr: new XMLHttpRequest() } - }); -} - -/** - * Updates the uploadStatus of the given extFile - * from "preparing" to "uploading" - * @param extFile the extended file - * @returns the extended file with uploadStatus updated to "uploading" - */ -export const instantPreparingToUploadOne = ( - extFile: ExtFileInstance | ExtFile -): ExtFileInstance | ExtFile => { - if (extFile.uploadStatus === "preparing") { - //for ExtFile instance - extFile.uploadStatus = "uploading"; - //for ExtFile type - return { - ...extFile, - uploadStatus: "uploading", - }; - } - return extFile; -}; - -/** - * - * @param extFile the extended file - * @returns - */ -export const preparingToUploadOne = ( - extFile: ExtFileInstance | ExtFile -): Promise<ExtFileInstance | ExtFile> => { - return new Promise((resolve, reject) => { - setTimeout(() => { - if (extFile.uploadStatus === "preparing") { - //for ExtFile instance - extFile.uploadStatus = "uploading"; - //for ExtFile type - resolve({ - ...extFile, - uploadStatus: "uploading", - }); - } else - resolve(extFile); - }, 1500); - }); -}; -/** - * Sleeps for 1200 miliseconds for showing a better transition - * on uploading - * @param time the time to sleep in miliseconds - * @returns true is everything is ok - */ -export const sleepTransition = (time = 1500 -): Promise<boolean> => { - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve(true); - }, time); - }); -} - -export const sanitizeArrExtFile = (arrExtFile: ExtFileInstance[]): ExtFile[] => { - console.log( - "sanitizeArrExtFile", - arrExtFile.map((F) => { return { status: F.uploadStatus, message: F.uploadMessage } }) - ); - return arrExtFile.filter((extFileInstance: ExtFileInstance) => - !extFileInstance.extraData?.deleted) - - .map((extFileInstance: ExtFileInstance) => { - if (extFileInstance.uploadStatus === "aborted" - && !extFileInstance.uploadMessage) { - extFileInstance.uploadMessage = "Upload aborted by user"; - //extFileInstance.uploadStatus = "error"; - } - - return ExtFileInstance.toExtFile(extFileInstance) as ExtFile - }); -} -/** - * - * @param extFileInstance - * @param extFileobj - */ -export const setNextUploadStatus = ( - extFileInstance: ExtFileInstance, - extFileobj: ExtFile) => { - - const prevStatus: UPLOADSTATUS | undefined = extFileInstance.uploadStatus; - const nextStstaus: UPLOADSTATUS | undefined = extFileobj.uploadStatus; - - console.log("setNextUploadStatus", prevStatus, nextStstaus); - console.log("setNextUploadStatus", extFileInstance.uploadMessage, extFileobj.uploadMessage); - if ( - prevStatus === "preparing" && - ["aborted", undefined].includes(nextStstaus) - ) { - extFileInstance.uploadStatus = undefined; - extFileInstance.uploadMessage = extFileobj.uploadMessage; - - } else if ( - prevStatus === "uploading" && - ["aborted", undefined].includes(nextStstaus) - ) { - extFileInstance.uploadStatus = "aborted"; - extFileInstance.uploadMessage = extFileobj.uploadMessage; - - } - -} - diff --git a/src/files-ui/core/utils/IdGenerator.ts b/src/files-ui/core/utils/IdGenerator.ts deleted file mode 100644 index e978079254babf0b4669e77ca1611a16090eb5fc..0000000000000000000000000000000000000000 --- a/src/files-ui/core/utils/IdGenerator.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * An id generator for FileItems - */ - export abstract class FileIdGenerator { - static nextId = 0; - /** - * Increases the id counter and returns the next id available. - * @returns the next integer id available - */ - static getNextId(): number { - FileIdGenerator.nextId++; - return FileIdGenerator.nextId; - } -} \ No newline at end of file diff --git a/src/files-ui/core/utils/addClassName.ts b/src/files-ui/core/utils/addClassName.ts deleted file mode 100644 index 972878e5a005f6cb2a03aa78b3a592673aca3aaf..0000000000000000000000000000000000000000 --- a/src/files-ui/core/utils/addClassName.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * If className is given, adds class name in string format to a base class name - * @param baseClassName the base class name - * @param className the class name to be added - * @returns a new class name obtained by adding the second paramater - */ -export const addClassName = ( - baseClassName: string, - className: string | undefined -): string => { - if (className) - return `${baseClassName} ${className}`; - return baseClassName; -} \ No newline at end of file diff --git a/src/files-ui/core/utils/dropzone.utils.ts b/src/files-ui/core/utils/dropzone.utils.ts deleted file mode 100644 index 6ee91c87e0ddb543e61de433f58b2bd59bfa5fae..0000000000000000000000000000000000000000 --- a/src/files-ui/core/utils/dropzone.utils.ts +++ /dev/null @@ -1,14 +0,0 @@ -export const isValidateActive = ( - accept: string | undefined, - maxFileSize: number | undefined, - maxFiles: number | undefined, - validator: Function | undefined - ): boolean => { - return ( - (accept !== undefined && accept !== null) || - (maxFileSize !== undefined && maxFileSize !== null) || - (maxFiles !== undefined && maxFiles !== null) || - (validator !== undefined && validator !== null) - ); - }; - \ No newline at end of file diff --git a/src/files-ui/core/utils/fakeupload.utils.ts b/src/files-ui/core/utils/fakeupload.utils.ts deleted file mode 100644 index 13468845d5df878277419789d543d55149003639..0000000000000000000000000000000000000000 --- a/src/files-ui/core/utils/fakeupload.utils.ts +++ /dev/null @@ -1,194 +0,0 @@ - -import { DropzoneLocalizerSelector } from "../localization"; -import { ExtFile, ExtFileInstance, UploadResponse } from "../types"; - -/** - * Updates a extFile and sets its uploadStatus to "uploading" - * @param extFile the extended file object - * @returns the extended file with the uploadStatus attribute modified - */ -export const setPrepToUploading = ( - extFile: ExtFile -): Promise<ExtFile> => { - console.log("prepToUpload One", extFile); - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve({ - ...extFile, - uploadStatus: "uploading", - }); - }, 1500); - - }); -}; -/** - * Updates a extFile and sets its uploadStatus to "success" - * @param extFile the extended file object - * @returns the extended file with the uploadStatus attribute modified - */ -export const uploadOne = ( - extFile: ExtFile -): Promise<ExtFile> => { - console.log("upload One", extFile); - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve({ - ...extFile, - uploadStatus: "success", - }); - }, 2000); - }); -}; -/** - * Awaits the given time before start uploading - * @param preparingTime the time in miliseconds, by default it will wait 1.5 secs - * @returns an empty object - */ -export const sleepPreparing = ( - preparingTime: number = 5000 -): Promise<void> => { - console.log("uploadfiles preparingTime One", preparingTime); - return new Promise((resolve, reject) => { - - setTimeout(() => { - resolve(); - }, preparingTime); - - }); -} - -/** - * - * @param extFileInstance - * @returns - */ -export const prepToUploadOne = ( - extFileInstance: ExtFileInstance | ExtFile -): Promise<ExtFileInstance | ExtFile> => { - //console.log("prepToUpload One", extFileInstance); - return new Promise((resolve, reject) => { - setTimeout(() => { - extFileInstance.uploadStatus = "uploading"; - resolve({ - ...extFileInstance, - uploadStatus: "uploading", - }); - }, 1500); - - }); -}; - -/** - * - * @param extFileInstance - * @returns - */ -export const uploadOneExtFile = ( - extFileInstance: ExtFileInstance -): Promise<Object> => { - //console.log("upload One", extFileInstance); - return new Promise((resolve, reject) => { - setTimeout(() => { - extFileInstance.uploadStatus = "success"; - resolve({ - ...extFileInstance, - uploadStatus: "success", - }); - }, 2000); - }); -}; - - -/** - * - * @param extFile the extFile to upload - * @param DropzoneLocalizer the localization - * @returns a duiUploadResponse object that describes the result - */ -export const fakeFuiUpload = ( - extFileInstance: ExtFileInstance, - DropzoneLocalizer = DropzoneLocalizerSelector("EN-en") -): Promise<ExtFile> => { - - const extFile:ExtFile = extFileInstance.toExtFile(); - - return new Promise((resolve, reject) => { - setTimeout(() => { - const randomNumber: number = Math.floor(Math.random() * 10); - if (randomNumber % 2 === 0) { - const success = true; - const message = DropzoneLocalizer.fakeuploadsuccess as string; - const payload = { url: "" }; - resolve({ - ...extFile, - serverResponse: { success, message, payload }, - uploadStatus: "success", - uploadMessage: message, - - }); - } else { - const success = false; - const message = DropzoneLocalizer.fakeUploadError as string; - const payload = {}; - resolve({ - ...extFile, - serverResponse: { success, message, payload }, - uploadStatus: "error", - uploadMessage: message, - }); - } - }, 1700); - }); -}; - - -/** - * - * @param extFile the extFile to upload - * @param DropzoneLocalizer the localization - * @returns a duiUploadResponse object that describes the result - */ -export const fakeFuiUploadExtFile = ( - extFileInstance: ExtFileInstance, - DropzoneLocalizer = DropzoneLocalizerSelector("EN-en") -): Promise<UploadResponse> => { - - const extFile:ExtFile = extFileInstance.toExtFile(); - - return new Promise((resolve, reject) => { - setTimeout(() => { - const randomNumber: number = Math.floor(Math.random() * 10); - if (randomNumber % 2 === 0) { - const status = true; - const message = DropzoneLocalizer.fakeuploadsuccess as string; - const payload = { url: "" }; - - resolve({ - id: extFile.id, - serverResponse: { status, message, payload }, - uploadedFile: { - ...extFile, - uploadStatus: "success", - uploadMessage: message, - progress: 100 - } - - }); - } else { - const status = false; - const message = DropzoneLocalizer.fakeUploadError as string; - const payload = {}; - resolve({ - id: extFile.id, - serverResponse: { status, message, payload }, - uploadedFile: { - ...extFile, - uploadStatus: "error", - uploadMessage: message, - progress: 60 - }, - }); - } - }, 1700); - }); -}; diff --git a/src/files-ui/core/utils/fileListParser.ts b/src/files-ui/core/utils/fileListParser.ts deleted file mode 100644 index 46f4b4ad08d99d050434527d3eb14cc480e3e7a9..0000000000000000000000000000000000000000 --- a/src/files-ui/core/utils/fileListParser.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { ExtFile, ExtFileInstance } from "../types"; -import { FileIdGenerator } from "./IdGenerator"; - -/** - * Converts the fileList into an array of separated ExtFile objects - * @param fileList the FileList object given by input(event.target.files) or drop operation (event.dataTransfer) - * @returns an array of ExtFile objects - */ -export const fileListToExtFileArray = (fileList: FileList): ExtFile[] => { - let extFileArray: ExtFile[] = []; - for (let i = 0, f: File; (f = fileList[i]); i++) { - extFileArray.push({ id: FileIdGenerator.getNextId(), file: f, name: f.name, size: f.size, type: f.type }); - } - return extFileArray; -}; - -/** - * Converts the fileList into an array of separated ExtFile instances - * @param fileList the FileList object given by input (event.target.files) or drop operation (event.dataTransfer) - * @returns an array of ExtFile instances - */ -export const fileListToExtFileInstanceArray = (fileList: FileList): ExtFileInstance[] => { - let extFileArray: ExtFileInstance[] = []; - for (let i = 0, f: File; (f = fileList[i]); i++) { - extFileArray.push(new ExtFileInstance({ id: FileIdGenerator.getNextId(), file: f, name: f.name, size: f.size, type: f.type })); - } - return extFileArray; -}; \ No newline at end of file diff --git a/src/files-ui/core/utils/fileSizeFormatter.ts b/src/files-ui/core/utils/fileSizeFormatter.ts deleted file mode 100644 index ac23dff950338194e014311e65837ff54da70629..0000000000000000000000000000000000000000 --- a/src/files-ui/core/utils/fileSizeFormatter.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Gives a XX.XX format in Bytes KB, MB, GB or TB - * @param fileSize file size to give format in Bytes - */ - export const fileSizeFormater = (fileSize?: number | false): string| undefined => { - let result = ""; - if (!fileSize) { - return undefined; - } - if (fileSize < 1024) { - result = fileSize + " Bytes" - } else { - //KB - if (fileSize < 1024 * 1024) { - result = (fileSize / 1024).toFixed(2) + " KB"; - } else if (fileSize < 1024 * 1024 * 1024) { - result = ((fileSize / 1024) / 1024).toFixed(2) + " MB"; - } else if (fileSize < 1024 * 1024 * 1024 * 1024) { - result = (((fileSize / 1024) / 1024) / 1024).toFixed(2) + " GB"; - } else { - result = ((((fileSize / 1024) / 1024) / 1024) / 1024).toFixed(2) + " TB"; - } - } - return result; -} \ No newline at end of file diff --git a/src/files-ui/core/utils/getExt.ts b/src/files-ui/core/utils/getExt.ts deleted file mode 100644 index feb5f4839a0c5a24b0a62097bc0069a068ce24f4..0000000000000000000000000000000000000000 --- a/src/files-ui/core/utils/getExt.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Looks for the first file extension - * @param fileName file name - * @returns the file name extension - */ - export const getExt = (fileName: string): string => { - const re = /(?:\.([^.]+))?$/; - const result = re.exec(fileName); - if (result) { - return result[1]; - } else { - return ""; - } - -}; \ No newline at end of file diff --git a/src/files-ui/core/utils/getLocalFileItemData.ts b/src/files-ui/core/utils/getLocalFileItemData.ts deleted file mode 100644 index 0e8bd5630edda956c75f88eac5cba18f25349685..0000000000000000000000000000000000000000 --- a/src/files-ui/core/utils/getLocalFileItemData.ts +++ /dev/null @@ -1,32 +0,0 @@ -/** - * - * @param file - * @param name - * @param type - * @param size - * @returns the file name, type and size - */ -export const getLocalFileItemData = ( - file: File | undefined, - name: string | undefined, - type: string | undefined, - size: number | undefined -): [string, string | undefined, number | undefined] => { - - let localFileName: string = ""; - let localFileType: string | undefined = undefined; - let localFileSize: number | undefined = undefined; - - // if file object is valid, obtain metadata from it - // otherwise try to get file data from individual props in string format - if (file && typeof file.name === "string") { - localFileName = file.name; - localFileType = file.type; - localFileSize = file.size; - } else if (name && typeof name === "string") { - localFileName = name; - localFileType = type; - localFileSize = size; - } - return [localFileName, localFileType, localFileSize] -} \ No newline at end of file diff --git a/src/files-ui/core/utils/index.ts b/src/files-ui/core/utils/index.ts deleted file mode 100644 index a241cf09e7a4973eae39a8a7d704f4f5e1e209e3..0000000000000000000000000000000000000000 --- a/src/files-ui/core/utils/index.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { fileListToExtFileArray, fileListToExtFileInstanceArray } from "./fileListParser"; - -import { fileSizeFormater } from "./fileSizeFormatter"; - -import { getExt } from "./getExt"; - -import { FileIdGenerator } from "./IdGenerator"; - -export { - FileIdGenerator, - fileListToExtFileArray, - fileListToExtFileInstanceArray, - fileSizeFormater, - getExt, -}; - -export { handleDragUtil, handleDropUtil } from "./dragdrop.utils"; - -export { handleClickInput, handleClickUtil } from "./click.utils"; - -export { isValidateActive } from "./dropzone.utils"; - -export { shrinkWord } from "./shrinkWord"; - -export { - fakeFuiUpload, - prepToUploadOne, - setPrepToUploading, - sleepPreparing, - uploadOne, - uploadOneExtFile -} from "./fakeupload.utils"; - -export { getRandomInt } from "./randomInt"; - -export { cleanInput } from "./input.utils"; - - -export { addClassName } from "./addClassName"; - -export { isUploadAbleExtFile } from "./isUploadAbleExtFile"; - -export { getLocalFileItemData } from "./getLocalFileItemData" \ No newline at end of file diff --git a/src/files-ui/core/utils/input.utils.ts b/src/files-ui/core/utils/input.utils.ts deleted file mode 100644 index 0772c706873c89c3f458abcd4a3cf7ebceffb1c7..0000000000000000000000000000000000000000 --- a/src/files-ui/core/utils/input.utils.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Cleans the input.value attribute - * @param inputElement - */ -export const cleanInput = (inputElement?: HTMLInputElement | null) => { - if (!inputElement) return; - inputElement.value = ""; -} \ No newline at end of file diff --git a/src/files-ui/core/utils/isUploadAbleExtFile.ts b/src/files-ui/core/utils/isUploadAbleExtFile.ts deleted file mode 100644 index 112a345b28e1457e050097db68921163ddec2c4a..0000000000000000000000000000000000000000 --- a/src/files-ui/core/utils/isUploadAbleExtFile.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { ExtFile } from "../types"; - -export const isUploadAbleExtFile = (extFile: ExtFile, validateFilesFlag: boolean) => { - return (!validateFilesFlag || (validateFilesFlag && extFile.valid)) && extFile.uploadStatus !== "success"; -} \ No newline at end of file diff --git a/src/files-ui/core/utils/randomInt.ts b/src/files-ui/core/utils/randomInt.ts deleted file mode 100644 index 5db2ef9cb5bd0faaeae69aabad9227dc70cc4101..0000000000000000000000000000000000000000 --- a/src/files-ui/core/utils/randomInt.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Random integer between min (included) and max (excluded) - * @param min the min number - * @param max the max number - * @returns a random number between min (included) and max (excluded) - */ -export function getRandomInt(min: number = 0, max: number = 0): number { - return Math.floor(Math.random() * (max - min)) + min; -} diff --git a/src/files-ui/core/utils/shrinkWord.ts b/src/files-ui/core/utils/shrinkWord.ts deleted file mode 100644 index 7b1ddf234dd35869afa60002d1b34adbfcd261f5..0000000000000000000000000000000000000000 --- a/src/files-ui/core/utils/shrinkWord.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * The max size of the word in characters - */ -export const DEFAULT_MAX_SIZE_WORD = 30; -/** - * - * @param word the word to be shrinked - * @returns the shrinked word - */ -export const shrinkWord = (word = "", card = false): string => { - let newWord = word; - if (card) { - if (word.length >= 20) { - newWord = word.slice(0, 10) + "..." + word.slice(-7); - } - } else if (word.length >= DEFAULT_MAX_SIZE_WORD) { - newWord = word.slice(0, 13) + "..." + word.slice(-8); - } - return newWord; -}; \ No newline at end of file diff --git a/src/files-ui/core/validation/fakeerros.ts b/src/files-ui/core/validation/fakeerros.ts deleted file mode 100644 index 326ec5f5744ade6952b47c5e0fb0f7c05690dfda..0000000000000000000000000000000000000000 --- a/src/files-ui/core/validation/fakeerros.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * list of dumy errors in english - */ -export 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." - ]; \ No newline at end of file diff --git a/src/files-ui/core/validation/fileValidator.d.ts b/src/files-ui/core/validation/fileValidator.d.ts index 382f317363cbd15bc5172c6d2fa4dded54ecbef4..ca0b54e13dadd8304b585ddb000b5fbe8955b17d 100644 --- a/src/files-ui/core/validation/fileValidator.d.ts +++ b/src/files-ui/core/validation/fileValidator.d.ts @@ -10,7 +10,7 @@ import { ValidateFileResponse, FileValidatorProps } from "../types/validation"; * @param localization * @returns */ -export declare const fileListvalidator: (preValidatedFiles: FileList, remainingValids: number, localValidator: FileValidatorProps, validator: (f: File) => ValidateFileResponse, maxFiles?: number, localization?: Localization) => ExtFile[]; +export declare const fileListvalidator: (preValidatedFiles: FileList, remainingValids: number, localValidator: FileValidatorProps, validator?: (f: File) => ValidateFileResponse, maxFiles?: number, localization?: Localization) => ExtFile[]; /** * For each ExtFile sets the valid prop of ExtFile to "true" or "false" * depending on the result of the individual validation. @@ -23,7 +23,7 @@ export declare const fileListvalidator: (preValidatedFiles: FileList, remainingV * @param localization * @returns a new ExtFile list with each item validated */ -export declare const validateExtFileList: (extFileList: ExtFile[], remainingValids: number, localValidatorProps: FileValidatorProps, validator: (f: File) => ValidateFileResponse, maxFiles: number | undefined, localization?: Localization) => ExtFile[]; +export declare const validateExtFileList: (extFileList: ExtFile[], remainingValids: number, localValidatorProps: FileValidatorProps, validator?: (f: File) => ValidateFileResponse, maxFiles?: number, localization?: Localization) => ExtFile[]; /** * * @param extFile diff --git a/src/files-ui/core/validation/fileValidator.ts b/src/files-ui/core/validation/fileValidator.ts deleted file mode 100644 index 23188d47f9ee06cde82b97de9f2ebded0a18b4f0..0000000000000000000000000000000000000000 --- a/src/files-ui/core/validation/fileValidator.ts +++ /dev/null @@ -1,205 +0,0 @@ -import { ValidateErrorLocalizerSelector } from "../localization"; -import { ExtFile, FunctionLabel, Localization, LocalLabels } from "../types"; -import { ValidateFileResponse, FileValidatorProps } from "../types/validation"; -import { FileIdGenerator } from "../utils/IdGenerator"; -import { separateAccept } from "./separateAccept"; -import { validateAccept } from "./validateAccept"; - -/** - * - * @param preValidatedFiles FileList - * @param remainingValids The number of remaining valid files - * @param localValidator - * @param validator - * @param maxFiles - * @param localization - * @returns - */ -export const fileListvalidator = ( - preValidatedFiles: FileList, - remainingValids: number, - localValidator: FileValidatorProps, - validator: ((f: File) => ValidateFileResponse) | undefined, - maxFiles?: number, - localization?: Localization -): ExtFile[] => { - const output: ExtFile[] = []; - //set a countdown when there is a limit on files - let countdown: number = remainingValids; - // get localized labels - const ValidationErrorLocalizer: LocalLabels = - ValidateErrorLocalizerSelector(localization); - //Iterate the File list - for (let i = 0, f: File; (f = preValidatedFiles[i]); i++) { - // Validate the file list with - let validatedFile: ExtFile = validateFile(f, validator, localValidator, ValidationErrorLocalizer); - if (validatedFile.valid) { - //not valid due to file count limit - const valid = countdown > 0; - validatedFile.valid = valid; - //add error about amount - if (!valid) { - const maxFileErrorMessenger: FunctionLabel = ValidationErrorLocalizer.maxFileCount as FunctionLabel; - validatedFile.errors = validatedFile.errors - ? [...validatedFile.errors, maxFileErrorMessenger(maxFiles || Infinity)] - : [maxFileErrorMessenger(maxFiles || Infinity)]; - } - countdown--; - } - output.push(validatedFile); - } - return output; -}; - - -/** - * For each ExtFile sets the valid prop of ExtFile to "true" or "false" - * depending on the result of the individual validation. - * It also add the list of errors. - * @param extFileList - * @param remainingValids - * @param localValidatorProps - * @param validator - * @param maxFiles - * @param localization - * @returns a new ExtFile list with each item validated - */ -export const validateExtFileList = ( - extFileList: ExtFile[], - remainingValids: number, - localValidatorProps: FileValidatorProps, - validator: ((f: File) => ValidateFileResponse) | undefined, - maxFiles: number | undefined, - localization?: Localization -): ExtFile[] => { - console.log("remaning valids", remainingValids); - let fileListResult: ExtFile[] = []; - if (!remainingValids) return fileListResult; - let remaining: number = remainingValids; - const ValidationErrorLocalizer: LocalLabels = - ValidateErrorLocalizerSelector(localization); - const maxFileErrorMessenger: FunctionLabel = ValidationErrorLocalizer.maxFileCount as FunctionLabel; - for (let i = 0; i < extFileList.length; i++) { - let currentExtFile: ExtFile = extFileList[i]; - - currentExtFile = validateExtFile(currentExtFile, validator, localValidatorProps, ValidationErrorLocalizer); - //console.log("validateExtFileList after validation", currentExtFile); - - if (currentExtFile.valid) { - //not valid due to file count limit - const valid = remaining > 0; - currentExtFile.valid = valid; - //add error about amount - if (!valid) { - currentExtFile.errors = currentExtFile.errors - ? [...currentExtFile.errors, maxFileErrorMessenger(maxFiles || Infinity)] - : [maxFileErrorMessenger(maxFiles || Infinity)]; - } - remaining--; - } - fileListResult.push(currentExtFile); - - } - return fileListResult; -} - -/** - * - * @param extFile - * @param validator - * @param validatorProps - * @param localErrors - * @returns - */ -export const validateExtFile = ( - extFile: ExtFile, - validator: undefined | ((f: File) => ValidateFileResponse), - validatorProps: FileValidatorProps, - localErrors: LocalLabels -): ExtFile => { - let extFileResult: ExtFile = { ...extFile }; - let errors: string[] = []; - //TO-DO: Add extra validation for individual props even if FIle object was not given - if (!extFile.file) { - return { ...extFileResult } - } - - //TO-DO: add "overrideValidation" prop to ignore the rest of validators like accept and maxFileSize - if (validator) { - const resultCustomValidation: ValidateFileResponse = validator(extFileResult.file as File); - const { errors: errorsResult } = resultCustomValidation; - if (errorsResult) - errors.push(...errorsResult) - //return { ...extFileResult, ...validator(extFileResult.file as File) }; - } - - const { maxFileSize, accept } = validatorProps; - console.log("Validation", maxFileSize, accept); - //check file size - const file: File = extFile.file; - - - if (maxFileSize && file.size > maxFileSize) { - const maxFileSizeErrorMessenger: FunctionLabel = localErrors.maxSizeError as FunctionLabel; - - console.log("Size error", maxFileSizeErrorMessenger(maxFileSize)); - - errors.push(maxFileSizeErrorMessenger(maxFileSize)); - } - //check file type - if (accept && !validateAccept(separateAccept(accept), file)) { - errors.push(localErrors.acceptError as string); - } - const isValid: boolean = errors.length === 0; - extFileResult = { ...extFileResult, valid: isValid, errors: !isValid ? errors : undefined }; - console.log("validation extFileResult", extFileResult); - return extFileResult; - -} - - - -/** - * Function that validate whether a file is valid, or not - * according to the Filevalidator properties - * @param file a File object to be evaluated - * @param validatorProps the validator object - * @returns a FileValidated object - */ -export const validateFile = ( - file: File, - validator: undefined | ((f: File) => ValidateFileResponse), - validatorProps: FileValidatorProps, - localErrors: LocalLabels -): ExtFile => { - - const idGenerated = FileIdGenerator.getNextId(); - let errors: string[] = []; - if (validator) { - return { id: idGenerated, file, ...validator(file) }; - } - - const { maxFileSize, accept } = validatorProps; - - //check file size - if (maxFileSize && file.size > maxFileSize) { - const maxFileSizeErrorMessenger: FunctionLabel = localErrors.maxSizeError as FunctionLabel; - errors.push(maxFileSizeErrorMessenger(maxFileSize)); - } - - //check file type - // const allowedTypes = accept.filter((type) => (file.type === type)) - if (accept && !validateAccept(separateAccept(accept), file)) { - errors.push(localErrors.acceptError as string); - } - - - const fileResult: ExtFile = { - id: idGenerated, - file: file, - valid: errors.length === 0, - errors: errors - }; - // logic here - return fileResult; -}; \ No newline at end of file diff --git a/src/files-ui/core/validation/index.ts b/src/files-ui/core/validation/index.ts deleted file mode 100644 index 75bc608611434cc5f092066afa4bdbe4b9699f8a..0000000000000000000000000000000000000000 --- a/src/files-ui/core/validation/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -export { - validateExtFileList, - fileListvalidator, - validateExtFile, - validateFile -} from "./fileValidator"; - - -export { separateAccept } from "./separateAccept"; - -export { validateAccept } from "./validateAccept"; - -export {getRandomUploadStatus} from "./randomStatus"; - -export {listOfErrors} from "./fakeerros"; \ No newline at end of file diff --git a/src/files-ui/core/validation/randomStatus.ts b/src/files-ui/core/validation/randomStatus.ts deleted file mode 100644 index b616470d03528e5941bed21f1cc079e8d0b6e87c..0000000000000000000000000000000000000000 --- a/src/files-ui/core/validation/randomStatus.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { UPLOADSTATUS } from "../types"; -import { getRandomInt } from "../utils/randomInt"; - -/** - * Generates a random number betwen 0 and 3 - * where - * 0 => error - * 1 => uploading - * 2 => success - * 3 => undefined - * @returns a random upload status or undefined - */ - export const getRandomUploadStatus = (): UPLOADSTATUS | undefined => { - const result: number = getRandomInt(0, 4); - switch (result) { - case 0: return "error"; - case 1: return "uploading"; - case 2: return "success"; - default: - return undefined; - } -} \ No newline at end of file diff --git a/src/files-ui/core/validation/separateAccept.ts b/src/files-ui/core/validation/separateAccept.ts deleted file mode 100644 index db5d5876292badb5dd5a6281615bc4a1678f4795..0000000000000000000000000000000000000000 --- a/src/files-ui/core/validation/separateAccept.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Separate the accept string array into an array of strings separated by commas - * @param accept the string accept array - * @returns an array of strings in wich every item - */ -export const separateAccept = (accept: string | undefined): string[] => { - if (!accept || accept.length === 0) { - return []; - } - const commaSeparatedAccpet: string[] = accept.split(",").map((acceptItem) => acceptItem.trim()); - return commaSeparatedAccpet; -} \ No newline at end of file diff --git a/src/files-ui/core/validation/validateAccept.ts b/src/files-ui/core/validation/validateAccept.ts deleted file mode 100644 index ea423ba90d85e0c7b113b22974110acde0ba1147..0000000000000000000000000000000000000000 --- a/src/files-ui/core/validation/validateAccept.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { getExt } from "../utils/getExt"; - -/** - * Checks whether a file is valid or not given an array of file extentions and mime types - * e.g. accept = [".doc", ".docx", ".xml", "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"] - * @param accept the array of strings accept items - * @param file a File object to be evaluated - * @returns true if the mime type file is included in the accept param - */ - export const validateAccept = (accept: string[], file: File): boolean => { - let valid: boolean = false; - const { name, type } = file; - //Array(5) [ ".doc", ".docx", ".xml", "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ] - for (let i = 0; i < accept.length; i++) { - const acceptItem: string = accept[i]; - //check is not empty - if (acceptItem.length !== 0) { - //check extention - if (acceptItem.charAt(0) === ".") { - if (acceptItem.includes(getExt(name))) { - return true; - } - } - //check mime - // header/tail => image/png ; image/* ; audio - if (type && type.length > 0 && acceptItem.includes("/") && type.includes("/")) { - let headerMime = acceptItem.split("/")[0]; - let tailMime = acceptItem.split("/")[1]; - - let headerMimeFile = type.split("/")[0]; - let tailMimeFile = type.split("/")[1]; - - if (headerMime === headerMimeFile) { - // image/* - if (tailMime === "*") { - return true; - } else if (tailMime === tailMimeFile) { - return true; - } - } - } - } - } - return valid; -} \ No newline at end of file diff --git a/src/files-ui/files-ui-react/utils/click.utils.ts b/src/files-ui/files-ui-react/utils/click.utils.ts deleted file mode 100644 index a91e6a99917705b1bb7be27e4aa5a97a887af925..0000000000000000000000000000000000000000 --- a/src/files-ui/files-ui-react/utils/click.utils.ts +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Performs stopPropagation and preventDefault functions on an click event instance - * @param evt click event handler object - */ -export function - handleClickUtil<T extends HTMLDivElement | HTMLButtonElement | HTMLAnchorElement | SVGSVGElement | HTMLInputElement> - ( - evt: React.MouseEvent<T, MouseEvent> - ) { - evt.preventDefault(); - evt.stopPropagation(); -} -/** - * Click programatically an input element. - * If the input element is null, nothing will happend - * @param input the input element target to make a click - */ -export const handleClickInput = ( - input: HTMLInputElement | null -) => { - console.log("handleClickInput:", input); - if (!input) return; - input.click(); -} \ No newline at end of file diff --git a/src/files-ui/files-ui-react/utils/dragdrop.utils.ts b/src/files-ui/files-ui-react/utils/dragdrop.utils.ts deleted file mode 100644 index 9a04abbf7d2f10d496447768ed64c7b553f71d51..0000000000000000000000000000000000000000 --- a/src/files-ui/files-ui-react/utils/dragdrop.utils.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Performs stopPropagation and preventDefault functions on an drop event instance - * @param evt drag event handler object - */ -export const handleDropUtil: React.DragEventHandler<HTMLDivElement> = ( - evt: React.DragEvent<HTMLDivElement> -) => { - evt.stopPropagation(); - evt.preventDefault(); -}; -/** - * Performs stopPropagation and preventDefault functions on an drop event instance - * and also specifies that the drop effect is link - * @param evt drag event handler object - */ -export const handleDragUtil: React.DragEventHandler<HTMLDivElement> = ( - evt: React.DragEvent<HTMLDivElement> -) => { - - evt.dataTransfer.dropEffect = "link"; handleDropUtil(evt); -}; \ No newline at end of file diff --git a/src/files-ui/components/file-mosaic/hooks/getProgress.ts b/src/files-ui/hooks/getProgress.ts similarity index 100% rename from src/files-ui/components/file-mosaic/hooks/getProgress.ts rename to src/files-ui/hooks/getProgress.ts diff --git a/src/files-ui/hooks/index.ts b/src/files-ui/hooks/index.ts index 2125e76a07cf23b6ef24b3f94fed4b7e2f0c91f4..ae8382188b095eb26cbec066a76b2ea1c25ece73 100644 --- a/src/files-ui/hooks/index.ts +++ b/src/files-ui/hooks/index.ts @@ -1,5 +1,14 @@ -import {useDropzoneValidation} from "./useDropzoneValidation"; -export {useDropzoneValidation}; +//Dropzone FileInputButton +export { useDropzoneClassName } from "./useDropzoneClassName"; +export { useDropzoneFileListUpdater } from "./useDropzoneFileUpdater"; +export { useDropzoneValidation } from "./useDropzoneValidation"; +export { useFakeProgress } from "./useFakeProgress"; +export { useNumberOfValidFiles } from "./useNumberOfValidFiles" -export {useFakeProgress} from "./useFakeProgress"; \ No newline at end of file +export { useDropLayerClassName } from "./useDropLayerClassName"; + +//File Mosaic Card +export { useFileMosaicInitializer } from "./useFileMosaicInitializer"; +export { useIsUploading } from "./useIsUploading"; +export { useProgress } from "./useProgress"; diff --git a/src/files-ui/components/drop-layer/hooks/useDropLayerClassName.ts b/src/files-ui/hooks/useDropLayerClassName.ts similarity index 95% rename from src/files-ui/components/drop-layer/hooks/useDropLayerClassName.ts rename to src/files-ui/hooks/useDropLayerClassName.ts index 8a8bae7cb6baff870a5f4628b34b92f2c562b0de..f9e29a0b41c9b10f3d7d8b33a0074b1a6213462c 100644 --- a/src/files-ui/components/drop-layer/hooks/useDropLayerClassName.ts +++ b/src/files-ui/hooks/useDropLayerClassName.ts @@ -1,6 +1,6 @@ import { DynamicSheet, DynamiCSS } from "@dynamicss/dynamicss"; import * as React from "react"; -import { makeDropLayerDynamicStyle } from "../utils/dropLayerDynamicStyle"; +import { makeDropLayerDynamicStyle } from "../DropLayer/utils/dropLayerDynamicStyle"; const BASE_DROP_LAYER_STYLE: string = "files-ui-styles-drop-layer"; @@ -12,7 +12,7 @@ const BASE_DROP_LAYER_STYLE: string = "files-ui-styles-drop-layer"; * @param makeClassName whether to make the classname or not * @returns the classname for layer */ -const useDropLayerClassName = ( +export const useDropLayerClassName = ( dropzoneId: string, color?: string, //isDragging?: boolean, @@ -86,5 +86,4 @@ const useDropLayerClassName = ( makeClassName]); return classNameCreated; -} -export default useDropLayerClassName; \ No newline at end of file +} \ No newline at end of file diff --git a/src/files-ui/hooks/useDropzoneClassName.ts b/src/files-ui/hooks/useDropzoneClassName.ts index 3497e41ed57f61ef72e68cbe2346810b6b9574cb..2eadce96e4593d96dfe5dcdb16efff3cef15eb95 100644 --- a/src/files-ui/hooks/useDropzoneClassName.ts +++ b/src/files-ui/hooks/useDropzoneClassName.ts @@ -1,3 +1,168 @@ -export const useDropzoneClassName=()=>{ - +import { DynamicSheet, DynamicSheetRule, DynamiCSS } from "@dynamicss/dynamicss"; +import * as React from "react"; +import { completeAsureColor } from "../core"; +import { DEFAULT_BORDER_RADIUS } from "../Dropzone/components/dropzone/DropzoneProps"; + +export function useDropzoneClassName( + dropzoneId: string, + className: string | undefined, + //isDragging: boolean, + //header: boolean | undefined = false, + //footer: boolean | undefined = false, + color: string | undefined, + //borderRadius: string | number | undefined, + background: string | undefined, + minHeight: string | number | undefined +): [string | undefined, string | undefined, string | undefined, string | undefined] { + //console.log("useDropzoneClassName", className, isDragging, header, footer, color, background, minHeight); + const finalDropzoneId: string = (color === undefined && background === undefined && minHeight === undefined) ? "default" : dropzoneId.replaceAll(":", "_"); + + const baseClassName: string = "fui-dropzone-root fui-dropzone-border"; + + const [idStyles, setIdStyles] = React.useState<string>(""); + const [styleInjected, setStyleInjected] = React.useState<boolean>(false); + const [finalClassName, setFinalClassName] = React.useState<string | undefined>(undefined); + const [finalClassNameHeader, setFinalClassNameHeader] = React.useState<string | undefined>(undefined); + const [finalClassNameFooter, setFinalClassNameFooter] = React.useState<string | undefined>(undefined); + const [finalClassNameDisabled, setFinalClassNameDisabled] = React.useState<string | undefined>(undefined); + + //const [offset, setOffset] = React.useState<number>(0); + + const makeClassName = ( + className: string | undefined, + //isDragging: boolean, + // offset: number, + color: string | undefined, + //borderRadius: string | number | undefined, + background: string | undefined, + minHeight: string | number | undefined + + ) => { + let finalClassName: string = baseClassName; + + // better to come back to the custom stylesheet for each dropzone with the unique id + + let styleSheet: DynamicSheet = makeDynamicDropzoneStyleSheet( + finalDropzoneId, + // offset, + //isDragging, + color, + background, + minHeight, + //borderRadius + ); + let idStyle: string = ""; + + + if (!styleInjected) { + idStyle = DynamiCSS.insertStyleSheet(styleSheet); + setIdStyles(idStyle); + if (idStyle !== "") + setStyleInjected(true); + } else { + //already a stylesheet associated + DynamiCSS.editStyleSheet(idStyles, styleSheet.sheetRules || []); + } + + finalClassName += ` files-ui-dropzone-extra-${finalDropzoneId}`; + + if (className) { + finalClassName = `${finalClassName} ${className}`; + } + /* if (isDragging) { + finalClassName = `${finalClassName} fui-hide-border`; + } */ + + setFinalClassName(finalClassName); + setFinalClassNameHeader(`files-ui-header-border-rd-${finalDropzoneId}`); + setFinalClassNameFooter(`files-ui-footer-border-rd-top-bg-color-${finalDropzoneId}`); + setFinalClassNameDisabled(`files-ui-disabled-layer-color-${finalDropzoneId}`); + } + + React.useEffect(() => { + makeClassName(className, + //isDragging, + //offset, + color, + // borderRadius, + background, minHeight); + // eslint-disable-next-line + }, [className, + //isDragging, + // offset, + color, + //borderRadius, + background, minHeight]); + + return [finalClassName, finalClassNameHeader, finalClassNameFooter, finalClassNameDisabled]; +} + + + + +const makeDynamicDropzoneStyleSheet = ( + dropzoneId: string, + // offset: number, + //isDragging: boolean, + color: string | undefined, + background: string | undefined, + minHeight: string | number | undefined, + // borderRadius: string | number | undefined, +): DynamicSheet => { + + const rootColorBorderStyle: DynamicSheetRule = { + className: `files-ui-dropzone-extra-${dropzoneId}`, + rules: { + color: completeAsureColor(color), + border: `1px dashed ${completeAsureColor(color)}`, + borderRadius: DEFAULT_BORDER_RADIUS, + background: background, + minHeight: typeof minHeight === "number" ? `${minHeight}px` : minHeight, + }, + }; + + const rootColorBorderStyleHideBorder: DynamicSheetRule = { + className: `files-ui-root-border-hide`, + rules: { + borderColor: "transparent", + }, + } + const headerBorderStyle: DynamicSheetRule = { + className: `files-ui-header-border-rd-${dropzoneId}`, + rules: { + "border-top-left-radius": DEFAULT_BORDER_RADIUS, + "border-top-right-radius": DEFAULT_BORDER_RADIUS, + }, + }; + const footerBorderStyle: DynamicSheetRule = { + className: `files-ui-footer-border-rd-top-bg-color-${dropzoneId}`, + rules: { + "border-bottom-left-radius": DEFAULT_BORDER_RADIUS, + "border-bottom-right-radius": DEFAULT_BORDER_RADIUS, + background: completeAsureColor(color, 0.129), + borderTop: `1px dotted ${completeAsureColor(color)}` + + }, + }; + const disabledLayerStyle: DynamicSheetRule = { + className: `files-ui-disabled-layer-color-${dropzoneId}`, + rules: { + borderRadius: DEFAULT_BORDER_RADIUS, + background: completeAsureColor(color, 0.38), + } + } + const sheetRules: DynamicSheetRule[] = + [ + rootColorBorderStyle, + rootColorBorderStyleHideBorder, + headerBorderStyle, + footerBorderStyle, + disabledLayerStyle + ]; + + + return { + id: "files-dropzone-ui-style-id-" + dropzoneId, + sheetRules: sheetRules + } } \ No newline at end of file diff --git a/src/files-ui/hooks/useDropzoneFileUpdater.ts b/src/files-ui/hooks/useDropzoneFileUpdater.ts index 78620e8c85f9ba64e558e73fa5ede8ba9b61e7b1..e4549b48c9ff258f9989356691b2071c16352120 100644 --- a/src/files-ui/hooks/useDropzoneFileUpdater.ts +++ b/src/files-ui/hooks/useDropzoneFileUpdater.ts @@ -14,7 +14,7 @@ import { ValidateFileResponse, ExtFile, ExtFileInstance, ExtFileManager, FileVal * @param isUploading * @returns the local list of Files */ -const useDropzoneFileListUpdater = ( +export const useDropzoneFileListUpdater = ( dropzoneId: number | string | undefined, value: ExtFile[], isUploading: boolean, @@ -122,4 +122,3 @@ const useDropzoneFileListUpdater = ( return [localFiles, numberOfValidFiles, setLocalFiles]; } -export default useDropzoneFileListUpdater; \ No newline at end of file diff --git a/src/files-ui/components/file-mosaic/hooks/useFileMosaicInitializer.ts b/src/files-ui/hooks/useFileMosaicInitializer.ts similarity index 88% rename from src/files-ui/components/file-mosaic/hooks/useFileMosaicInitializer.ts rename to src/files-ui/hooks/useFileMosaicInitializer.ts index 71f13e3d66074549264293206f640a8997c56e43..3bbd61aa34e48b44651963fa4634d50c4216fb75 100644 --- a/src/files-ui/components/file-mosaic/hooks/useFileMosaicInitializer.ts +++ b/src/files-ui/hooks/useFileMosaicInitializer.ts @@ -1,7 +1,6 @@ import * as React from "react"; -import { getURLFileIco, readAsDataURL } from "../../../core"; -import { getURLFileIcoFromNameAndType } from "../../../core/mime/mime"; -import { IconsSet } from "../../../FilesUiProvider"; +import { getURLFileIco, readAsDataURL, getURLFileIcoFromNameAndType } from "../core"; +import { IconsSet } from "../FilesUiProvider"; /** * Initializer hook for FileItemNeo @@ -13,7 +12,7 @@ import { IconsSet } from "../../../FilesUiProvider"; * @param progress the current progress given by props * @returns an array thta contains the following properties [isImage, isVideo, url, imageSource, localProgress] */ -const useFileMosaicInitializer = ( +export const useFileMosaicInitializer = ( file: File | undefined, name: string | undefined, type: string | undefined, @@ -21,7 +20,7 @@ const useFileMosaicInitializer = ( preview: boolean, imageUrl: string | undefined, videoUrl: string | undefined, - customIcons?:IconsSet, + customIcons?: IconsSet, xhr?: XMLHttpRequest, ): [boolean, boolean, boolean, string, string | undefined, File | string | undefined] => { @@ -42,7 +41,7 @@ const useFileMosaicInitializer = ( preview: boolean, imageUrl: string | undefined, videoUrl: string | undefined, - customIcons?:IconsSet, + customIcons?: IconsSet, xhr?: XMLHttpRequest, progress?: number ) => { @@ -51,8 +50,8 @@ const useFileMosaicInitializer = ( if (!file && (!name && !type)) return; - const { url } = file ? getURLFileIco(file,customIcons) : - getURLFileIcoFromNameAndType(name, type,customIcons); + const { url } = file ? getURLFileIco(file, customIcons) : + getURLFileIcoFromNameAndType(name, type, customIcons); //console.log("init", url); @@ -110,7 +109,7 @@ const useFileMosaicInitializer = ( ////// CLEAN UP React.useEffect(() => { - init(file, name, type, valid, preview || false, imageUrl, videoUrl,customIcons); + init(file, name, type, valid, preview || false, imageUrl, videoUrl, customIcons); return () => { setImageSource(undefined); setIsImage(false); @@ -118,11 +117,10 @@ const useFileMosaicInitializer = ( setIsReady(false); }; // eslint-disable-next-line - }, [file, name, type, valid, preview, imageUrl, videoUrl,customIcons]); + }, [file, name, type, valid, preview, imageUrl, videoUrl, customIcons]); return [isReady, isImage, isVideo, url, imageSource, videoSource]; } -export default useFileMosaicInitializer; /* export const identifyFileSource = (file: File | undefined, name: string, fileType: string) => { if(!file){ diff --git a/src/files-ui/components/file-mosaic/hooks/useIsUploading.ts b/src/files-ui/hooks/useIsUploading.ts similarity index 95% rename from src/files-ui/components/file-mosaic/hooks/useIsUploading.ts rename to src/files-ui/hooks/useIsUploading.ts index 39e377167da5bfd8b75f526c19d14f80b1aa3bf6..0d14cbdca142f35bf7b54ae72c12fafdee61c1e1 100644 --- a/src/files-ui/components/file-mosaic/hooks/useIsUploading.ts +++ b/src/files-ui/hooks/useIsUploading.ts @@ -1,4 +1,4 @@ -import { UPLOADSTATUS } from "../../../core"; +import { UPLOADSTATUS } from "../core"; import * as React from "react"; export const useIsUploading = (uploadStatus: UPLOADSTATUS | undefined): boolean => { diff --git a/src/files-ui/components/dropzone/useNumberOfValidFiles.ts b/src/files-ui/hooks/useNumberOfValidFiles.ts similarity index 90% rename from src/files-ui/components/dropzone/useNumberOfValidFiles.ts rename to src/files-ui/hooks/useNumberOfValidFiles.ts index 5ee30ef2186e22f6e27946bad3b1453d7ca09db6..4b7fdbefbc60a59e7c2d03bb36baf3c097006010 100644 --- a/src/files-ui/components/dropzone/useNumberOfValidFiles.ts +++ b/src/files-ui/hooks/useNumberOfValidFiles.ts @@ -1,5 +1,5 @@ import * as React from "react"; -import { ExtFile } from "../../core"; +import { ExtFile } from "../core"; /** * Custom hook for managing @@ -7,7 +7,7 @@ import { ExtFile } from "../../core"; * @param validateFilesFlag if true, the number will be updated with the number of files that have valid attribute as true * @returns the updated number of valid files */ -export default function useNumberOfValidFiles( +export function useNumberOfValidFiles( localFiles: ExtFile[], validateFilesFlag: boolean ) { diff --git a/src/files-ui/components/file-mosaic/hooks/useProgress.ts b/src/files-ui/hooks/useProgress.ts similarity index 95% rename from src/files-ui/components/file-mosaic/hooks/useProgress.ts rename to src/files-ui/hooks/useProgress.ts index 0ee6ac2e23cefc286b6a74f640aae42dcd1aa936..be1d763464906b00398449351b5faa2e632a4e53 100644 --- a/src/files-ui/components/file-mosaic/hooks/useProgress.ts +++ b/src/files-ui/hooks/useProgress.ts @@ -5,7 +5,7 @@ import * as React from "react"; * @param xhr the XMLHttpRequest object for AJAX operations * @returns the progress to be shown in the component */ -const useProgress = ( +export const useProgress = ( progress: number | undefined, xhr?: XMLHttpRequest, @@ -36,5 +36,4 @@ const useProgress = ( } return localProgress; -} -export default useProgress; \ No newline at end of file +} \ No newline at end of file diff --git a/src/files-ui/components/icons/Cancel/Cancel.tsx b/src/files-ui/icons/Cancel/Cancel.tsx similarity index 95% rename from src/files-ui/components/icons/Cancel/Cancel.tsx rename to src/files-ui/icons/Cancel/Cancel.tsx index a6fc7b4c4876df26b2cca510c533091480794bcf..7482e222a8c42ca9090a2f8588b45508d7f793be 100644 --- a/src/files-ui/components/icons/Cancel/Cancel.tsx +++ b/src/files-ui/icons/Cancel/Cancel.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { parseSize } from "../utils/utils"; import { CancelProps } from "./CancelProps"; -import { handleClickUtil } from "../../../files-ui-react/utils"; +import { handleClickUtil } from "../../utils"; const Cancel: React.FC<CancelProps> = (props: CancelProps) => { const { size, color, colorFill, onClick, style, className } = props; diff --git a/src/files-ui/components/icons/Cancel/CancelProps.ts b/src/files-ui/icons/Cancel/CancelProps.ts similarity index 100% rename from src/files-ui/components/icons/Cancel/CancelProps.ts rename to src/files-ui/icons/Cancel/CancelProps.ts diff --git a/src/files-ui/components/icons/CheckCircle/CheckCircle.tsx b/src/files-ui/icons/CheckCircle/CheckCircle.tsx similarity index 100% rename from src/files-ui/components/icons/CheckCircle/CheckCircle.tsx rename to src/files-ui/icons/CheckCircle/CheckCircle.tsx diff --git a/src/files-ui/components/icons/CheckCircle/CheckCircleProps.ts b/src/files-ui/icons/CheckCircle/CheckCircleProps.ts similarity index 100% rename from src/files-ui/components/icons/CheckCircle/CheckCircleProps.ts rename to src/files-ui/icons/CheckCircle/CheckCircleProps.ts diff --git a/src/files-ui/components/icons/Clean/Clean.tsx b/src/files-ui/icons/Clean/Clean.tsx similarity index 100% rename from src/files-ui/components/icons/Clean/Clean.tsx rename to src/files-ui/icons/Clean/Clean.tsx diff --git a/src/files-ui/components/icons/Clean/CleanProps.ts b/src/files-ui/icons/Clean/CleanProps.ts similarity index 100% rename from src/files-ui/components/icons/Clean/CleanProps.ts rename to src/files-ui/icons/Clean/CleanProps.ts diff --git a/src/files-ui/components/icons/Clear/Clear.tsx b/src/files-ui/icons/Clear/Clear.tsx similarity index 93% rename from src/files-ui/components/icons/Clear/Clear.tsx rename to src/files-ui/icons/Clear/Clear.tsx index 45999d530fad6e2e8f217b47c471570832eb5aef..9794b0405959f3f6ed60a5dd2f81a2849e6caa50 100644 --- a/src/files-ui/components/icons/Clear/Clear.tsx +++ b/src/files-ui/icons/Clear/Clear.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { parseSize } from "../utils/utils"; import { ClearProps } from "./ClearProps"; -import { handleClickUtil } from "../../../files-ui-react/utils"; +import { handleClickUtil } from "../../utils"; const Clear: React.FC<ClearProps> = (props: ClearProps) => { const { size, color, colorFill, onClick, style, className } = props; diff --git a/src/files-ui/components/icons/Clear/ClearProps.tsx b/src/files-ui/icons/Clear/ClearProps.tsx similarity index 100% rename from src/files-ui/components/icons/Clear/ClearProps.tsx rename to src/files-ui/icons/Clear/ClearProps.tsx diff --git a/src/files-ui/components/icons/Close/Close.tsx b/src/files-ui/icons/Close/Close.tsx similarity index 100% rename from src/files-ui/components/icons/Close/Close.tsx rename to src/files-ui/icons/Close/Close.tsx diff --git a/src/files-ui/components/icons/Close/CloseProps.ts b/src/files-ui/icons/Close/CloseProps.ts similarity index 100% rename from src/files-ui/components/icons/Close/CloseProps.ts rename to src/files-ui/icons/Close/CloseProps.ts diff --git a/src/files-ui/components/icons/CloudDone/CloudDone.tsx b/src/files-ui/icons/CloudDone/CloudDone.tsx similarity index 95% rename from src/files-ui/components/icons/CloudDone/CloudDone.tsx rename to src/files-ui/icons/CloudDone/CloudDone.tsx index c2792853547d685573aeae7fb024b8d33b98eacb..885ba5864e478700d60d5232ad472fe6224bbdce 100644 --- a/src/files-ui/components/icons/CloudDone/CloudDone.tsx +++ b/src/files-ui/icons/CloudDone/CloudDone.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { parseSize } from "../utils/utils"; import { CloudDoneProps } from "./CloudDoneProps"; -import { handleClickUtil } from "../../../files-ui-react/utils"; +import { handleClickUtil } from "../../utils"; const CloudDone: React.FC<CloudDoneProps> = (props: CloudDoneProps) => { const { size, color, colorFill, onClick, style, className } = props; diff --git a/src/files-ui/components/icons/CloudDone/CloudDoneProps.ts b/src/files-ui/icons/CloudDone/CloudDoneProps.ts similarity index 100% rename from src/files-ui/components/icons/CloudDone/CloudDoneProps.ts rename to src/files-ui/icons/CloudDone/CloudDoneProps.ts diff --git a/src/files-ui/components/icons/DoDisturb/DoDisturb.tsx b/src/files-ui/icons/DoDisturb/DoDisturb.tsx similarity index 100% rename from src/files-ui/components/icons/DoDisturb/DoDisturb.tsx rename to src/files-ui/icons/DoDisturb/DoDisturb.tsx diff --git a/src/files-ui/components/icons/DoDisturb/DoDisturbProps.ts b/src/files-ui/icons/DoDisturb/DoDisturbProps.ts similarity index 100% rename from src/files-ui/components/icons/DoDisturb/DoDisturbProps.ts rename to src/files-ui/icons/DoDisturb/DoDisturbProps.ts diff --git a/src/files-ui/components/icons/DownloadFile/DownloadFile.tsx b/src/files-ui/icons/DownloadFile/DownloadFile.tsx similarity index 94% rename from src/files-ui/components/icons/DownloadFile/DownloadFile.tsx rename to src/files-ui/icons/DownloadFile/DownloadFile.tsx index bce0da95264d43881bb1c5f2abab64fbbe85ef69..38299e3474dc691939a1b61a780782adfcfaaf60 100644 --- a/src/files-ui/components/icons/DownloadFile/DownloadFile.tsx +++ b/src/files-ui/icons/DownloadFile/DownloadFile.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { handleClickUtil } from "../../../files-ui-react/utils"; +import { handleClickUtil } from "../../utils"; import { parseSize } from "../utils/utils"; import { DownloadFileProps } from "./DownloadFileProps"; diff --git a/src/files-ui/components/icons/DownloadFile/DownloadFileProps.ts b/src/files-ui/icons/DownloadFile/DownloadFileProps.ts similarity index 100% rename from src/files-ui/components/icons/DownloadFile/DownloadFileProps.ts rename to src/files-ui/icons/DownloadFile/DownloadFileProps.ts diff --git a/src/files-ui/components/icons/IconProps/IconProps.ts b/src/files-ui/icons/IconProps/IconProps.ts similarity index 100% rename from src/files-ui/components/icons/IconProps/IconProps.ts rename to src/files-ui/icons/IconProps/IconProps.ts diff --git a/src/files-ui/components/icons/IconStyles.scss b/src/files-ui/icons/IconStyles.scss similarity index 100% rename from src/files-ui/components/icons/IconStyles.scss rename to src/files-ui/icons/IconStyles.scss diff --git a/src/files-ui/components/icons/Info/Info.tsx b/src/files-ui/icons/Info/Info.tsx similarity index 100% rename from src/files-ui/components/icons/Info/Info.tsx rename to src/files-ui/icons/Info/Info.tsx diff --git a/src/files-ui/components/icons/Info/InfoProps.ts b/src/files-ui/icons/Info/InfoProps.ts similarity index 100% rename from src/files-ui/components/icons/Info/InfoProps.ts rename to src/files-ui/icons/Info/InfoProps.ts diff --git a/src/files-ui/components/icons/InfoBlack/InfoBlack.tsx b/src/files-ui/icons/InfoBlack/InfoBlack.tsx similarity index 93% rename from src/files-ui/components/icons/InfoBlack/InfoBlack.tsx rename to src/files-ui/icons/InfoBlack/InfoBlack.tsx index cb37bfe7fdd616e716e9621f0c47f103c22f9add..2432ee98d6ffdc1b5035f6b7208761febb836350 100644 --- a/src/files-ui/components/icons/InfoBlack/InfoBlack.tsx +++ b/src/files-ui/icons/InfoBlack/InfoBlack.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { parseSize } from "../utils/utils"; import { InfoBlackProps } from "./InfoBlackProps"; -import { handleClickUtil } from "../../../files-ui-react/utils"; +import { handleClickUtil } from "../../utils"; const InfoBlack: React.FC<InfoBlackProps> = (props: InfoBlackProps) => { const { size, color, colorFill, onClick, style, className } = props; diff --git a/src/files-ui/components/icons/InfoBlack/InfoBlackProps.ts b/src/files-ui/icons/InfoBlack/InfoBlackProps.ts similarity index 100% rename from src/files-ui/components/icons/InfoBlack/InfoBlackProps.ts rename to src/files-ui/icons/InfoBlack/InfoBlackProps.ts diff --git a/src/files-ui/components/icons/InfoDisney/InfoDisney.tsx b/src/files-ui/icons/InfoDisney/InfoDisney.tsx similarity index 96% rename from src/files-ui/components/icons/InfoDisney/InfoDisney.tsx rename to src/files-ui/icons/InfoDisney/InfoDisney.tsx index 80b9e2a7f5e2780e7c40133ec699b43a116aeb31..af6eceef2c9bc70e51e819a85cb5ffd923e665c7 100644 --- a/src/files-ui/components/icons/InfoDisney/InfoDisney.tsx +++ b/src/files-ui/icons/InfoDisney/InfoDisney.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { parseSize } from "../utils/utils"; import { InfoDisneyProps } from "./InfoDisneyProps"; -import { handleClickUtil } from "../../../files-ui-react/utils"; +import { handleClickUtil } from "../../utils"; const InfoDisney: React.FC<InfoDisneyProps> = (props: InfoDisneyProps) => { const { diff --git a/src/files-ui/components/icons/InfoDisney/InfoDisneyProps.ts b/src/files-ui/icons/InfoDisney/InfoDisneyProps.ts similarity index 100% rename from src/files-ui/components/icons/InfoDisney/InfoDisneyProps.ts rename to src/files-ui/icons/InfoDisney/InfoDisneyProps.ts diff --git a/src/files-ui/components/icons/Person/Person.tsx b/src/files-ui/icons/Person/Person.tsx similarity index 93% rename from src/files-ui/components/icons/Person/Person.tsx rename to src/files-ui/icons/Person/Person.tsx index fe87a3f4ecbda47c62485056220cd035bce0666b..680c2d9f911c921a7bd17f1358b15892999572b3 100644 --- a/src/files-ui/components/icons/Person/Person.tsx +++ b/src/files-ui/icons/Person/Person.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { parseSize } from "../utils/utils"; import { PersonProps } from "./PersonProps"; -import { handleClickUtil } from "../../../files-ui-react/utils"; +import { handleClickUtil } from "../../utils"; const Person: React.FC<PersonProps> = (props: PersonProps) => { const { size, color, colorFill, onClick, style, className } = props; diff --git a/src/files-ui/components/icons/Person/PersonProps.tsx b/src/files-ui/icons/Person/PersonProps.tsx similarity index 100% rename from src/files-ui/components/icons/Person/PersonProps.tsx rename to src/files-ui/icons/Person/PersonProps.tsx diff --git a/src/files-ui/components/icons/PhotoCamera/PhotoCamera.tsx b/src/files-ui/icons/PhotoCamera/PhotoCamera.tsx similarity index 94% rename from src/files-ui/components/icons/PhotoCamera/PhotoCamera.tsx rename to src/files-ui/icons/PhotoCamera/PhotoCamera.tsx index b7a70ff604b2458b6f4af3d73a07be0c82fc0ef9..4ad34ec76c85729a69c4bed30d20b9d496cdc8c9 100644 --- a/src/files-ui/components/icons/PhotoCamera/PhotoCamera.tsx +++ b/src/files-ui/icons/PhotoCamera/PhotoCamera.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { parseSize } from "../utils/utils"; import { PhotoCameraProps } from "./PhotoCameraProps"; -import { handleClickUtil } from "../../../files-ui-react/utils"; +import { handleClickUtil } from "../../utils"; const PhotoCamera: React.FC<PhotoCameraProps> = (props: PhotoCameraProps) => { const { size, color, colorFill, onClick, style, className } = props; diff --git a/src/files-ui/components/icons/PhotoCamera/PhotoCameraProps.ts b/src/files-ui/icons/PhotoCamera/PhotoCameraProps.ts similarity index 100% rename from src/files-ui/components/icons/PhotoCamera/PhotoCameraProps.ts rename to src/files-ui/icons/PhotoCamera/PhotoCameraProps.ts diff --git a/src/files-ui/components/icons/Play/PlayIcon.tsx b/src/files-ui/icons/Play/PlayIcon.tsx similarity index 93% rename from src/files-ui/components/icons/Play/PlayIcon.tsx rename to src/files-ui/icons/Play/PlayIcon.tsx index b37b94f5e0d5d71e3c9aade2345220606f6124c2..0f52c03727072a0fbfb7a9e86b74a8a163400fbe 100644 --- a/src/files-ui/components/icons/Play/PlayIcon.tsx +++ b/src/files-ui/icons/Play/PlayIcon.tsx @@ -1,7 +1,7 @@ import React, { FC } from "react"; import { parseSize } from "../utils/utils"; import { PlayIconProps } from "./PlayIconProps"; -import { handleClickUtil } from "../../../files-ui-react/utils"; +import { handleClickUtil } from "../../utils"; const PlayIcon: FC<PlayIconProps> = (props: PlayIconProps) => { const { size, color, colorFill, onClick, style, className } = props; diff --git a/src/files-ui/components/icons/Play/PlayIconProps.ts b/src/files-ui/icons/Play/PlayIconProps.ts similarity index 100% rename from src/files-ui/components/icons/Play/PlayIconProps.ts rename to src/files-ui/icons/Play/PlayIconProps.ts diff --git a/src/files-ui/components/icons/Remove/Remove.tsx b/src/files-ui/icons/Remove/Remove.tsx similarity index 94% rename from src/files-ui/components/icons/Remove/Remove.tsx rename to src/files-ui/icons/Remove/Remove.tsx index 83cf251fe17618eb85ebe3e645de88e5572924ff..aa8e19c8c3c7f1f866b27ffeb283a7dd86efe06c 100644 --- a/src/files-ui/components/icons/Remove/Remove.tsx +++ b/src/files-ui/icons/Remove/Remove.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { parseSize } from "../utils/utils"; import { RemoveProps } from "./RemoveProps"; -import { handleClickUtil } from "../../../files-ui-react/utils"; +import { handleClickUtil } from "../../utils"; const Remove: React.FC<RemoveProps> = (props: RemoveProps) => { const { size, color, colorFill, onClick, style, className } = props; diff --git a/src/files-ui/components/icons/Remove/RemoveOutline.tsx b/src/files-ui/icons/Remove/RemoveOutline.tsx similarity index 94% rename from src/files-ui/components/icons/Remove/RemoveOutline.tsx rename to src/files-ui/icons/Remove/RemoveOutline.tsx index 526995fad2b25fc0c91a9762078615f483516721..9faf43d28d9c470c09a263ad40e159bd2c2c64ab 100644 --- a/src/files-ui/components/icons/Remove/RemoveOutline.tsx +++ b/src/files-ui/icons/Remove/RemoveOutline.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { parseSize } from "../utils/utils"; import { RemoveProps } from "./RemoveProps"; -import { handleClickUtil } from "../../../files-ui-react/utils"; +import { handleClickUtil } from "../../utils"; const RemoveOutline: React.FC<RemoveProps> = (props: RemoveProps) => { const { size, color, colorFill, onClick, style, className } = props; diff --git a/src/files-ui/components/icons/Remove/RemoveProps.ts b/src/files-ui/icons/Remove/RemoveProps.ts similarity index 100% rename from src/files-ui/components/icons/Remove/RemoveProps.ts rename to src/files-ui/icons/Remove/RemoveProps.ts diff --git a/src/files-ui/components/icons/Upload/Upload.tsx b/src/files-ui/icons/Upload/Upload.tsx similarity index 100% rename from src/files-ui/components/icons/Upload/Upload.tsx rename to src/files-ui/icons/Upload/Upload.tsx diff --git a/src/files-ui/components/icons/Upload/UploadProps.ts b/src/files-ui/icons/Upload/UploadProps.ts similarity index 100% rename from src/files-ui/components/icons/Upload/UploadProps.ts rename to src/files-ui/icons/Upload/UploadProps.ts diff --git a/src/files-ui/components/icons/UploadDone/UploadDone.tsx b/src/files-ui/icons/UploadDone/UploadDone.tsx similarity index 100% rename from src/files-ui/components/icons/UploadDone/UploadDone.tsx rename to src/files-ui/icons/UploadDone/UploadDone.tsx diff --git a/src/files-ui/components/icons/UploadDone/UploadDoneProps.ts b/src/files-ui/icons/UploadDone/UploadDoneProps.ts similarity index 100% rename from src/files-ui/components/icons/UploadDone/UploadDoneProps.ts rename to src/files-ui/icons/UploadDone/UploadDoneProps.ts diff --git a/src/files-ui/components/icons/UploadError/UploadError.tsx b/src/files-ui/icons/UploadError/UploadError.tsx similarity index 100% rename from src/files-ui/components/icons/UploadError/UploadError.tsx rename to src/files-ui/icons/UploadError/UploadError.tsx diff --git a/src/files-ui/components/icons/UploadError/UploadErrorProps.ts b/src/files-ui/icons/UploadError/UploadErrorProps.ts similarity index 100% rename from src/files-ui/components/icons/UploadError/UploadErrorProps.ts rename to src/files-ui/icons/UploadError/UploadErrorProps.ts diff --git a/src/files-ui/components/icons/UploadingProcess/UploadingProcess.scss b/src/files-ui/icons/UploadingProcess/UploadingProcess.scss similarity index 100% rename from src/files-ui/components/icons/UploadingProcess/UploadingProcess.scss rename to src/files-ui/icons/UploadingProcess/UploadingProcess.scss diff --git a/src/files-ui/components/icons/UploadingProcess/UploadingProcess.tsx b/src/files-ui/icons/UploadingProcess/UploadingProcess.tsx similarity index 100% rename from src/files-ui/components/icons/UploadingProcess/UploadingProcess.tsx rename to src/files-ui/icons/UploadingProcess/UploadingProcess.tsx diff --git a/src/files-ui/components/icons/UploadingProcess/UploadingProcessProps.ts b/src/files-ui/icons/UploadingProcess/UploadingProcessProps.ts similarity index 100% rename from src/files-ui/components/icons/UploadingProcess/UploadingProcessProps.ts rename to src/files-ui/icons/UploadingProcess/UploadingProcessProps.ts diff --git a/src/files-ui/components/icons/ViewGrid/ViewGrid.tsx b/src/files-ui/icons/ViewGrid/ViewGrid.tsx similarity index 100% rename from src/files-ui/components/icons/ViewGrid/ViewGrid.tsx rename to src/files-ui/icons/ViewGrid/ViewGrid.tsx diff --git a/src/files-ui/components/icons/ViewGrid/ViewGridProps.ts b/src/files-ui/icons/ViewGrid/ViewGridProps.ts similarity index 100% rename from src/files-ui/components/icons/ViewGrid/ViewGridProps.ts rename to src/files-ui/icons/ViewGrid/ViewGridProps.ts diff --git a/src/files-ui/components/icons/ViewList/ViewList.tsx b/src/files-ui/icons/ViewList/ViewList.tsx similarity index 100% rename from src/files-ui/components/icons/ViewList/ViewList.tsx rename to src/files-ui/icons/ViewList/ViewList.tsx diff --git a/src/files-ui/components/icons/ViewList/ViewListProps.ts b/src/files-ui/icons/ViewList/ViewListProps.ts similarity index 100% rename from src/files-ui/components/icons/ViewList/ViewListProps.ts rename to src/files-ui/icons/ViewList/ViewListProps.ts diff --git a/src/files-ui/components/icons/Visibility/Visibility.tsx b/src/files-ui/icons/Visibility/Visibility.tsx similarity index 94% rename from src/files-ui/components/icons/Visibility/Visibility.tsx rename to src/files-ui/icons/Visibility/Visibility.tsx index d7d9e41065d81909df8b097a68dbd9203476649f..0dc93a97cc11aee3b4c270307c2bd999de22113e 100644 --- a/src/files-ui/components/icons/Visibility/Visibility.tsx +++ b/src/files-ui/icons/Visibility/Visibility.tsx @@ -1,7 +1,7 @@ import React, { FC } from "react"; import { parseSize } from "../utils/utils"; import { VisibilityProps } from "./VisibilityProps"; -import { handleClickUtil } from "../../../files-ui-react/utils"; +import { handleClickUtil } from "../../utils"; const Visibility: FC<VisibilityProps> = (props: VisibilityProps) => { const { size, color, colorFill, onClick, style, className } = props; diff --git a/src/files-ui/components/icons/Visibility/VisibilityProps.ts b/src/files-ui/icons/Visibility/VisibilityProps.ts similarity index 100% rename from src/files-ui/components/icons/Visibility/VisibilityProps.ts rename to src/files-ui/icons/Visibility/VisibilityProps.ts diff --git a/src/files-ui/components/icons/index.ts b/src/files-ui/icons/index.ts similarity index 100% rename from src/files-ui/components/icons/index.ts rename to src/files-ui/icons/index.ts diff --git a/src/files-ui/components/icons/utils/utils.ts b/src/files-ui/icons/utils/utils.ts similarity index 100% rename from src/files-ui/components/icons/utils/utils.ts rename to src/files-ui/icons/utils/utils.ts diff --git a/src/files-ui/index.ts b/src/files-ui/index.ts index 17fb7c00f43367b8eb0c383d8a382b4a07999f05..a54e82645d188f6c4f7fc331973515aaff7e7938 100644 --- a/src/files-ui/index.ts +++ b/src/files-ui/index.ts @@ -1,35 +1,39 @@ -export { default as Dropzone } from "./components/dropzone/components/dropzone/Dropzone"; -export * from "./components/dropzone/components/dropzone/Dropzone"; +export { default as Dropzone } from "./Dropzone/components/dropzone/Dropzone"; +export * from "./Dropzone/components/dropzone/Dropzone"; -export { default as FileInputButton } from "./components/file-input-button/FileInputButton"; -export * from "./components/file-input-button/FileInputButton"; +export { default as FileInputButton } from "./FileInputButton/FileInputButton"; +export * from "./FileInputButton/FileInputButton"; -export { default as Avatar } from "./components/avatar/Avatar"; -export * from "./components/avatar/Avatar"; +export { default as Avatar } from "./Avatar/Avatar"; +export * from "./Avatar/Avatar"; -export { default as FileCard } from "./components/file-card/FileCard"; -export * from "./components/file-card/FileCard"; +export { default as FileCard } from "./FileCard/FileCard"; +export * from "./FileCard/FileCard"; -export { default as FileMosaic } from "./components/file-mosaic/components/file-mosaic/FileMosaic"; -export * from "./components/file-mosaic/components/file-mosaic/FileMosaic"; +export { default as FileMosaic } from "./FileMosaic/components/file-mosaic/FileMosaic"; +export * from "./FileMosaic/components/file-mosaic/FileMosaic"; -export { default as FullScreen } from "./components/previews/FullScreen/FullScreen"; -export * from "./components/previews/FullScreen/FullScreen"; +export { default as FullScreen } from "./FullScreen/FullScreen"; +export * from "./FullScreen/FullScreen"; -export { default as ImagePreview } from "./components/previews/ImagePreview/ImagePreview"; -export * from "./components/previews/ImagePreview/ImagePreview"; +export { default as ImagePreview } from "./ImagePreview/ImagePreview"; +export * from "./ImagePreview/ImagePreview"; -export { default as VideoPreview } from "./components/previews/VideoPreview/VideoPreview"; -export * from "./components/previews/VideoPreview/VideoPreview"; +export { default as VideoPreview } from "./VideoPreview/VideoPreview"; +export * from "./VideoPreview/VideoPreview"; -export { default as MaterialButton } from "./components/material-button/MaterialButton"; -export * from "./components/material-button/MaterialButton"; +export { default as MaterialButton } from "./MaterialButton/MaterialButton"; +export * from "./MaterialButton/MaterialButton"; -export type { FileMosaicProps } from "./components/file-mosaic/components/file-mosaic/FileMosaicProps"; -export type { DropzoneProps } from "./components/dropzone/components/dropzone/DropzoneProps"; -export type { FileInputButtonProps } from "./components/file-input-button/InputButtonProps"; -export type { FileCardProps } from "./components/file-card/FileCardProps"; -export type { AvatarProps } from "./components/avatar/AvatarProps"; +export type { FileMosaicProps } from "./FileMosaic/components/file-mosaic/FileMosaicProps"; + +export type { DropzoneProps } from "./Dropzone/components/dropzone/DropzoneProps"; + +export type { FileInputButtonProps } from "./FileInputButton/InputButtonProps"; + +export type { FileCardProps } from "./FileCard/FileCardProps"; + +export type { AvatarProps } from "./Avatar/AvatarProps"; export { useFakeProgress } from "./hooks"; diff --git a/src/files-ui/components/loader/BasePreparingLoader/BasePreparingLoader.tsx b/src/files-ui/loader/BasePreparingLoader/BasePreparingLoader.tsx similarity index 100% rename from src/files-ui/components/loader/BasePreparingLoader/BasePreparingLoader.tsx rename to src/files-ui/loader/BasePreparingLoader/BasePreparingLoader.tsx diff --git a/src/files-ui/components/loader/BasePreparingLoader/BasePreparingLoaderProps.ts b/src/files-ui/loader/BasePreparingLoader/BasePreparingLoaderProps.ts similarity index 100% rename from src/files-ui/components/loader/BasePreparingLoader/BasePreparingLoaderProps.ts rename to src/files-ui/loader/BasePreparingLoader/BasePreparingLoaderProps.ts diff --git a/src/files-ui/components/loader/DefaultLoader/DefaultLoader.scss b/src/files-ui/loader/DefaultLoader/DefaultLoader.scss similarity index 100% rename from src/files-ui/components/loader/DefaultLoader/DefaultLoader.scss rename to src/files-ui/loader/DefaultLoader/DefaultLoader.scss diff --git a/src/files-ui/components/loader/DefaultLoader/DefaultLoader.tsx b/src/files-ui/loader/DefaultLoader/DefaultLoader.tsx similarity index 98% rename from src/files-ui/components/loader/DefaultLoader/DefaultLoader.tsx rename to src/files-ui/loader/DefaultLoader/DefaultLoader.tsx index b9668fd5bb691feef4068079c18c18a487795db5..e2218c62327b91cd2ef32a53dc210022d376aac8 100644 --- a/src/files-ui/components/loader/DefaultLoader/DefaultLoader.tsx +++ b/src/files-ui/loader/DefaultLoader/DefaultLoader.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { completeAsureColor } from "../../../core"; +import { completeAsureColor } from "../../core"; import "./DefaultLoader.scss"; interface DefaultLoaderNeoProps { color?: string; diff --git a/src/files-ui/components/loader/DefaultLoader/loader.tsx b/src/files-ui/loader/DefaultLoader/loader.tsx similarity index 98% rename from src/files-ui/components/loader/DefaultLoader/loader.tsx rename to src/files-ui/loader/DefaultLoader/loader.tsx index 6a93c56ca628134df9480f75b400a7f899115ac9..bba23913512d2a56e8d029fe077e756e818f2040 100644 --- a/src/files-ui/components/loader/DefaultLoader/loader.tsx +++ b/src/files-ui/loader/DefaultLoader/loader.tsx @@ -1,7 +1,7 @@ import React, { FC } from "react"; -import { hexColorToRGB } from "../../../core/color"; +import { hexColorToRGB } from "../../core"; interface LoaderProps { color?: string; } diff --git a/src/files-ui/components/loader/DynamicLoader/DynamicLoader.scss b/src/files-ui/loader/DynamicLoader/DynamicLoader.scss similarity index 100% rename from src/files-ui/components/loader/DynamicLoader/DynamicLoader.scss rename to src/files-ui/loader/DynamicLoader/DynamicLoader.scss diff --git a/src/files-ui/components/loader/DynamicLoader/DynamicLoader.tsx b/src/files-ui/loader/DynamicLoader/DynamicLoader.tsx similarity index 100% rename from src/files-ui/components/loader/DynamicLoader/DynamicLoader.tsx rename to src/files-ui/loader/DynamicLoader/DynamicLoader.tsx diff --git a/src/files-ui/components/loader/DynamicLoader/DynamicLoaderProps.ts b/src/files-ui/loader/DynamicLoader/DynamicLoaderProps.ts similarity index 100% rename from src/files-ui/components/loader/DynamicLoader/DynamicLoaderProps.ts rename to src/files-ui/loader/DynamicLoader/DynamicLoaderProps.ts diff --git a/src/files-ui/components/loader/InfiniteLoader/InfiniteLoader.tsx b/src/files-ui/loader/InfiniteLoader/InfiniteLoader.tsx similarity index 100% rename from src/files-ui/components/loader/InfiniteLoader/InfiniteLoader.tsx rename to src/files-ui/loader/InfiniteLoader/InfiniteLoader.tsx diff --git a/src/files-ui/components/loader/InfiniteLoader/InfiniteLoaderProps.ts b/src/files-ui/loader/InfiniteLoader/InfiniteLoaderProps.ts similarity index 100% rename from src/files-ui/components/loader/InfiniteLoader/InfiniteLoaderProps.ts rename to src/files-ui/loader/InfiniteLoader/InfiniteLoaderProps.ts diff --git a/src/files-ui/components/loader/LoaderContainer/LoaderContainer.scss b/src/files-ui/loader/LoaderContainer/LoaderContainer.scss similarity index 100% rename from src/files-ui/components/loader/LoaderContainer/LoaderContainer.scss rename to src/files-ui/loader/LoaderContainer/LoaderContainer.scss diff --git a/src/files-ui/components/loader/LoaderContainer/LoaderContainer.tsx b/src/files-ui/loader/LoaderContainer/LoaderContainer.tsx similarity index 100% rename from src/files-ui/components/loader/LoaderContainer/LoaderContainer.tsx rename to src/files-ui/loader/LoaderContainer/LoaderContainer.tsx diff --git a/src/files-ui/components/loader/LoaderContainer/LoaderContainerProps.ts b/src/files-ui/loader/LoaderContainer/LoaderContainerProps.ts similarity index 100% rename from src/files-ui/components/loader/LoaderContainer/LoaderContainerProps.ts rename to src/files-ui/loader/LoaderContainer/LoaderContainerProps.ts diff --git a/src/files-ui/components/loader/LoaderProps.ts b/src/files-ui/loader/LoaderProps.ts similarity index 100% rename from src/files-ui/components/loader/LoaderProps.ts rename to src/files-ui/loader/LoaderProps.ts diff --git a/src/files-ui/components/loader/index.ts b/src/files-ui/loader/index.ts similarity index 100% rename from src/files-ui/components/loader/index.ts rename to src/files-ui/loader/index.ts diff --git a/src/files-ui/components/overridable/OverridableComponentsProps.ts b/src/files-ui/overridable/OverridableComponentsProps.ts similarity index 100% rename from src/files-ui/components/overridable/OverridableComponentsProps.ts rename to src/files-ui/overridable/OverridableComponentsProps.ts diff --git a/src/files-ui/components/overridable/index.ts b/src/files-ui/overridable/index.ts similarity index 100% rename from src/files-ui/components/overridable/index.ts rename to src/files-ui/overridable/index.ts diff --git a/src/files-ui/components/overridable/mergeProps.ts b/src/files-ui/overridable/mergeProps.ts similarity index 100% rename from src/files-ui/components/overridable/mergeProps.ts rename to src/files-ui/overridable/mergeProps.ts diff --git a/src/files-ui/components/skeleton/FuiSkeleton.scss b/src/files-ui/skeleton/FuiSkeleton.scss similarity index 100% rename from src/files-ui/components/skeleton/FuiSkeleton.scss rename to src/files-ui/skeleton/FuiSkeleton.scss diff --git a/src/files-ui/components/skeleton/FuiSkeleton.tsx b/src/files-ui/skeleton/FuiSkeleton.tsx similarity index 100% rename from src/files-ui/components/skeleton/FuiSkeleton.tsx rename to src/files-ui/skeleton/FuiSkeleton.tsx diff --git a/src/files-ui/components/skeleton/FuiSkeletonProps.ts b/src/files-ui/skeleton/FuiSkeletonProps.ts similarity index 100% rename from src/files-ui/components/skeleton/FuiSkeletonProps.ts rename to src/files-ui/skeleton/FuiSkeletonProps.ts diff --git a/src/files-ui/components/tooltip/components/Tooltip.scss b/src/files-ui/tooltip/Tooltip.scss similarity index 100% rename from src/files-ui/components/tooltip/components/Tooltip.scss rename to src/files-ui/tooltip/Tooltip.scss diff --git a/src/files-ui/components/tooltip/components/Tooltip.tsx b/src/files-ui/tooltip/Tooltip.tsx similarity index 97% rename from src/files-ui/components/tooltip/components/Tooltip.tsx rename to src/files-ui/tooltip/Tooltip.tsx index 5a30a3ec98613b15042b4a356e45dc063bdd7f3c..b4aac4dd6335374b2b7d6a9d522d73891642fdc4 100644 --- a/src/files-ui/components/tooltip/components/Tooltip.tsx +++ b/src/files-ui/tooltip/Tooltip.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { TooltipProps } from "./TooltipProps"; import "./Tooltip.scss"; -import { UPLOADSTATUS } from "../../../core"; +import { UPLOADSTATUS } from "../core"; const Tooltip: React.FC<TooltipProps> = (props: TooltipProps) => { const { //message, diff --git a/src/files-ui/components/tooltip/components/TooltipProps.ts b/src/files-ui/tooltip/TooltipProps.ts similarity index 86% rename from src/files-ui/components/tooltip/components/TooltipProps.ts rename to src/files-ui/tooltip/TooltipProps.ts index 249cad13bff1690d25697185259b3f844c4775bd..8271fc75967305b5b830e42b726385410bef082b 100644 --- a/src/files-ui/components/tooltip/components/TooltipProps.ts +++ b/src/files-ui/tooltip/TooltipProps.ts @@ -1,5 +1,5 @@ -import { UPLOADSTATUS } from "../../../core"; -import { OverridableComponentProps } from "../../overridable"; +import { UPLOADSTATUS } from "../core"; +import { OverridableComponentProps } from "../overridable"; export interface TooltipPropsMap extends OverridableComponentProps { //message?: string; diff --git a/src/files-ui/tooltip/index.ts b/src/files-ui/tooltip/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..cd8fc67f1d7efb63ff8f1731a7ceda0a44fcd449 --- /dev/null +++ b/src/files-ui/tooltip/index.ts @@ -0,0 +1,2 @@ +export { default as Tooltip } from "./Tooltip"; +export * from "./Tooltip"; diff --git a/src/files-ui/core/utils/click.utils.ts b/src/files-ui/utils/click.utils.ts similarity index 100% rename from src/files-ui/core/utils/click.utils.ts rename to src/files-ui/utils/click.utils.ts diff --git a/src/files-ui/core/utils/dragdrop.utils.ts b/src/files-ui/utils/dragdrop.utils.ts similarity index 100% rename from src/files-ui/core/utils/dragdrop.utils.ts rename to src/files-ui/utils/dragdrop.utils.ts diff --git a/src/files-ui/files-ui-react/utils/index.ts b/src/files-ui/utils/index.ts similarity index 100% rename from src/files-ui/files-ui-react/utils/index.ts rename to src/files-ui/utils/index.ts diff --git a/src/files-ui/files-ui-react/utils/ripple/index.ts b/src/files-ui/utils/ripple/index.ts similarity index 100% rename from src/files-ui/files-ui-react/utils/ripple/index.ts rename to src/files-ui/utils/ripple/index.ts diff --git a/src/files-ui/files-ui-react/utils/ripple/ripple.ts b/src/files-ui/utils/ripple/ripple.ts similarity index 96% rename from src/files-ui/files-ui-react/utils/ripple/ripple.ts rename to src/files-ui/utils/ripple/ripple.ts index d461a6803201b5690eb45b3843ab4db3a7260c26..6a8701319b3dd4865146119ee7886a89c150a153 100644 --- a/src/files-ui/files-ui-react/utils/ripple/ripple.ts +++ b/src/files-ui/utils/ripple/ripple.ts @@ -1,4 +1,4 @@ -import { completeAsureColor, hexColorToRGB } from "../../../core"; +import { completeAsureColor, hexColorToRGB } from "../../core"; const asureRippleColor = (color: string): string => { return completeAsureColor(color,