{"version":3,"file":"uipath-angular-directives-ui-file-drop-zone.mjs","sources":["../../../projects/angular/directives/ui-file-drop-zone/src/file-drop-zone.utils.ts","../../../projects/angular/directives/ui-file-drop-zone/src/file-reader.service.ts","../../../projects/angular/directives/ui-file-drop-zone/src/ui-file-drop-zone.directive.ts","../../../projects/angular/directives/ui-file-drop-zone/src/uipath-angular-directives-ui-file-drop-zone.ts"],"sourcesContent":["import { sort } from '@uipath/angular/utilities';\n\nexport const sortAndFilter = (files: File[], sortBy: string | undefined, accept: string[]) => {\n    files = files.filter(f => isAcceptedExtension(f.name, accept));\n    return sortBy ? sort(files, sortBy, false) : files;\n};\n\nconst isAcceptedExtension = (fileName: string, accept: string[]) => {\n    if (!accept.length) {\n        return true;\n    }\n\n    const fileExtension = getFileExtension(fileName);\n    return accept.includes(fileExtension);\n};\n\nconst getFileExtension = (fileName: string) => {\n    const fileNameParts = fileName.split('.');\n    const extension = fileNameParts.length > 1 ? fileNameParts.slice(-1)[0] : '';\n    return `.${extension.toLowerCase()}`;\n};\n\n","import {\n    Injectable,\n    NgZone,\n    OnDestroy,\n} from '@angular/core';\nimport {\n    Observable,\n    ReplaySubject,\n    Subject,\n    forkJoin,\n    of,\n} from 'rxjs';\nimport {\n    catchError,\n    map,\n    take,\n    takeUntil,\n} from 'rxjs/operators';\n\nexport interface FileReaderError {\n    entryName: string;\n    error: string;\n    errorMessage: string;\n}\n\n@Injectable()\nexport class FileReaderService implements OnDestroy {\n\n    private readonly _fileError$ = new Subject<FileReaderError>();\n    private readonly _files$ = new ReplaySubject<File[]>(1);\n    private readonly _destroyed$ = new Subject<void>();\n\n    constructor(\n        private readonly _ngZone: NgZone,\n    ) { }\n\n    ngOnDestroy(): void {\n        this._destroyed$.next();\n        this._destroyed$.complete();\n    }\n\n    get files$() {\n        return this._files$.asObservable();\n    }\n\n    get error$() {\n        return this._fileError$;\n    }\n\n    processDroppedItems(e: DragEvent) {\n        const items = e.dataTransfer?.items;\n        if (!items) {\n            return;\n        }\n        if (this._isFolderUploadSupported(items)) {\n            this._processDroppedFolders(items);\n        } else {\n            this.processFilesFromFileList(e.dataTransfer.files, true);\n        }\n    }\n\n    processFilesFromFileList(filesReceived: FileList, ignoreFoldersOrEmptyFiles = false) {\n        if (!filesReceived) {\n            return;\n        }\n\n        const files: File[] = [];\n        for (let i = 0; i < filesReceived.length; i++) {\n            const file = filesReceived.item(i);\n            if (!file) {\n                continue;\n            }\n            // Checking the file size is the only way to tell if\n            // one of the items is a folder at this stage,\n            // so we want to avoid both folders and empty files here\n            const containsFoldersOrEmptyFiles = !file.size;\n            if (containsFoldersOrEmptyFiles && ignoreFoldersOrEmptyFiles) {\n                continue;\n            }\n            files.push(file);\n        }\n\n        this._files$.next(files);\n    }\n\n    private _processDroppedFolders(items: DataTransferItemList) {\n        const fileObservables: Observable<File[]>[] = [];\n        // eslint-disable-next-line @typescript-eslint/prefer-for-of\n        for (let i = 0; i < items.length; i++) {\n            const item = items[i].webkitGetAsEntry();\n            if (!item) {\n                continue;\n            }\n            fileObservables.push(this._traverseFileTree(item));\n        }\n        forkJoin(fileObservables).pipe(\n            catchError((err) => {\n                this._fileError$.next(err);\n                return of([] as File[][]);\n            }),\n            takeUntil(this._destroyed$),\n        )\n            .subscribe(files => this._ngZone.run(() => this._files$.next(files.reduce((acc, current) => acc.concat(current), []))));\n    }\n\n    private _isFolderUploadSupported(items: DataTransferItemList) {\n        if (items?.[0]?.webkitGetAsEntry?.()) {\n            return true;\n        }\n        return false;\n    }\n\n    private _addFileFromEntry(entry: FileSystemFileEntry): Observable<File> {\n        return new Observable<File>(emitter => {\n            entry.file(f => {\n                emitter.next(f);\n                emitter.complete();\n            });\n        });\n    }\n\n    private _traverseFileTree(entry: FileSystemEntry): Observable<File[]> {\n        if (entry.isFile) {\n            return this._addFileFromEntry(entry as FileSystemFileEntry).pipe(\n                map(f => ([ f ])),\n            );\n        }\n        return new Observable<File[]>(emitter => {\n            const dirReader = (entry as FileSystemDirectoryEntry).createReader();\n            let entries: FileSystemEntry[] = [];\n            const readEntries = () => {\n                dirReader.readEntries((results) => {\n                    if (!results.length) {\n                        // finished reading all entries in the directory\n                        if (entries.length > 0) {\n                            // folder has content\n                            this._readAndEmitEntries(entries)\n                                .pipe(take(1))\n                                .subscribe(files => {\n                                    emitter.next(files);\n                                    emitter.complete();\n                                });\n                        } else {\n                            // folder is empty\n                            emitter.next([]);\n                            emitter.complete();\n                        }\n                    } else {\n                        // Chrome only reads max 100 entries in one call, that's why we need to\n                        // read every directory more than once\n                        entries = entries.concat(results);\n                        readEntries();\n                    }\n                }, (err) => {\n                    emitter.error({\n                        entryName: entry.name,\n                        error: err.name,\n                        errorMessage: err.message,\n                    });\n                });\n            };\n            readEntries();\n        });\n    }\n\n    private _readAndEmitEntries(entries: FileSystemEntry[]) {\n        const entryObservables = entries.map(entry => this._traverseFileTree(entry));\n        return forkJoin(entryObservables).pipe(\n            map(filesMatrix => filesMatrix.reduce((acc, current) => acc.concat(current), [])),\n            takeUntil(this._destroyed$),\n        );\n    }\n}\n","import {\n    AfterViewInit,\n    Directive, ElementRef, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output,\n} from '@angular/core';\nimport {\n    Subject, map, takeUntil,\n} from 'rxjs';\nimport { sortAndFilter } from './file-drop-zone.utils';\nimport {\n    FileReaderError,\n    FileReaderService,\n} from './file-reader.service';\n\n// The highlight class gets added to the host HTML element,\n// so to display properly the component containing it\n// should have that class defined in its styles.\nconst DROP_ZONE_HIGHLIGHT_CLASS = 'ui-file-drop-zone-highlight';\n\n/**\n * A directive that turns any html element into a file drop zone\n * - does not use a dynamically created input element and only reacts on file drag and drop\n * - adds a css class to the host element when files are being dragged over\n *\n * @export\n */\n@Directive({\n    selector: '[uiFileDropZone]',\n    providers: [ FileReaderService ],\n    standalone: true,\n})\nexport class UiFileDropZoneDirective implements OnInit, AfterViewInit, OnDestroy {\n    @Input() disabled?: boolean;\n    // key of File and '-' prefix for descending sort\n    @Input() sortBy?: string;\n    // comma-separated extension list, example: '.jpg,.png,.pdf'\n    @Input() set accept(value: string | undefined) {\n        if (value) {\n            this._accept = value.split(',')\n                .map(v => v.trim().toLowerCase())\n                .filter(v => !!v);\n        }\n    }\n\n    @Output() filesReceived = new EventEmitter<File[]>();\n    @Output() filesLoading = new EventEmitter<boolean>();\n    @Output() fileError = new EventEmitter<FileReaderError | null>();\n\n    private _accept: string[] = [];\n    private _dragCount = 0;\n    private _dropZone?: HTMLElement;\n    private _destroyed$ = new Subject<void>();\n\n    constructor(\n        private readonly _element: ElementRef,\n        protected readonly _fileReaderService: FileReaderService,\n    ) { }\n\n    @HostListener('drop', ['$event'])\n    drop(e: DragEvent) {\n        if (this.disabled) {\n            return;\n        }\n        e.stopPropagation();\n        e.preventDefault();\n        this._dragCount -= 1;\n        const dragDataContainsFiles = this._dragEventContainsFiles(e);\n        if (dragDataContainsFiles) {\n            this._clearDropZoneHighlight();\n            this.filesLoading.next(true);\n            this._fileReaderService.processDroppedItems(e);\n        }\n    }\n\n    @HostListener('dragover', ['$event'])\n    dragover(e: DragEvent) {\n        // preventDefault is needed to enable drop event\n        e.preventDefault();\n        const dragDataContainsFiles = this._dragEventContainsFiles(e);\n        if (this._dragCount > 0 && dragDataContainsFiles) {\n            this._highlightDropZone();\n        }\n    }\n\n    @HostListener('dragenter')\n    dragenter() {\n        if (!this.disabled) {\n            this._dragCount += 1;\n        }\n    }\n\n    @HostListener('dragleave')\n    dragleave() {\n        if (this.disabled) {\n            return;\n        }\n        this._dragCount -= 1;\n        if (this._dragCount === 0) {\n            this._clearDropZoneHighlight();\n        }\n    }\n\n    ngOnInit(): void {\n        this._fileReaderService.files$\n            .pipe(\n                map(unsortedFiles => sortAndFilter(unsortedFiles, this.sortBy, this._accept)),\n                takeUntil(this._destroyed$),\n            )\n            .subscribe(files => this._emitFiles(files));\n\n        this._fileReaderService.error$\n            .pipe(\n                takeUntil(this._destroyed$),\n            )\n            .subscribe(err => this.fileError.emit(err));\n    }\n\n    ngAfterViewInit() {\n        this._dropZone = this._element.nativeElement;\n    }\n\n    ngOnDestroy(): void {\n        this._destroyed$.next();\n        this._destroyed$.complete();\n    }\n\n    protected _emitFiles(files: File[]) {\n        this.fileError.emit(null);\n        this.filesReceived.emit(files);\n        this.filesLoading.emit(false);\n    }\n\n    private _highlightDropZone() {\n        if (!this._dropZone || this._dropZone.classList.contains(DROP_ZONE_HIGHLIGHT_CLASS)) {\n            return;\n        }\n        this._dropZone.classList.add(DROP_ZONE_HIGHLIGHT_CLASS);\n    }\n\n    private _clearDropZoneHighlight() {\n        if (!this._dropZone) {\n            return;\n        }\n        this._dropZone.classList.remove(DROP_ZONE_HIGHLIGHT_CLASS);\n    }\n\n    private _dragEventContainsFiles(e: DragEvent) {\n        return e.dataTransfer?.types.includes('Files');\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["map","takeUntil","i1.FileReaderService"],"mappings":"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"}