UNPKG

@masteratm/ngx-dropzone

Version:

A highly configurable dropzone component for Angular.

1 lines 41.5 kB
{"version":3,"file":"masteratm-ngx-dropzone.mjs","sources":["../../../projects/ngx-dropzone/src/lib/ngx-dropzone-label.directive.ts","../../../projects/ngx-dropzone/src/lib/helpers.ts","../../../projects/ngx-dropzone/src/lib/ngx-dropzone-preview/ngx-dropzone-remove-badge/ngx-dropzone-remove-badge.component.ts","../../../projects/ngx-dropzone/src/lib/ngx-dropzone-preview/ngx-dropzone-preview.component.ts","../../../projects/ngx-dropzone/src/lib/ngx-dropzone.service.ts","../../../projects/ngx-dropzone/src/lib/ngx-dropzone/ngx-dropzone.component.ts","../../../projects/ngx-dropzone/src/lib/ngx-dropzone/ngx-dropzone.component.html","../../../projects/ngx-dropzone/src/lib/ngx-dropzone-preview/ngx-dropzone-image-preview/ngx-dropzone-image-preview.component.ts","../../../projects/ngx-dropzone/src/lib/ngx-dropzone-preview/ngx-dropzone-video-preview/ngx-dropzone-video-preview.component.ts","../../../projects/ngx-dropzone/src/lib/ngx-dropzone.module.ts","../../../projects/ngx-dropzone/src/public_api.ts","../../../projects/ngx-dropzone/src/masteratm-ngx-dropzone.ts"],"sourcesContent":["import { Directive } from '@angular/core';\r\n\r\n@Directive({\r\n selector: 'ngx-dropzone-label',\r\n standalone: false\r\n})\r\nexport class NgxDropzoneLabelDirective { }\r\n","\r\n/**\r\n * Coerces a data-bound value (typically a string) to a boolean.\r\n * Taken from https://github.com/angular/components/blob/master/src/cdk/coercion/boolean-property.ts\r\n */\r\nexport function coerceBooleanProperty(value: any): boolean\r\n{\r\n\treturn value != null && `${value}` !== 'false';\r\n}\r\n\r\n/**\r\n * Whether the provided value is considered a number.\r\n * Taken from https://github.com/angular/components/blob/master/src/cdk/coercion/number-property.ts\r\n */\r\nexport function coerceNumberProperty(value: any): number\r\n{\r\n\t// parseFloat(value) handles most of the cases we're interested in (it treats null, empty string,\r\n\t// and other non-number values as NaN, where Number just uses 0) but it considers the string\r\n\t// '123hello' to be a valid number. Therefore we also check if Number(value) is NaN.\r\n\treturn (!isNaN(parseFloat(value as any)) && !isNaN(Number(value))) ? Number(value) : null;\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ngx-dropzone-remove-badge',\r\n template: `\r\n <svg>\r\n <line x1=\"0\" y1=\"0\" x2=\"10\" y2=\"10\" />\r\n <line x1=\"0\" y1=\"10\" x2=\"10\" y2=\"0\" />\r\n </svg>\r\n `,\r\n styleUrls: ['./ngx-dropzone-remove-badge.component.scss'],\r\n standalone: false\r\n})\r\nexport class NgxDropzoneRemoveBadgeComponent { }\r\n","import { Component, Input, Output, EventEmitter, HostBinding, HostListener } from '@angular/core';\r\nimport { coerceBooleanProperty } from '../helpers';\r\nimport { SafeStyle, DomSanitizer } from '@angular/platform-browser';\r\n\r\nenum KEY_CODE {\r\n\tBACKSPACE = 8,\r\n\tDELETE = 46\r\n}\r\n\r\n@Component({\r\n selector: 'ngx-dropzone-preview',\r\n template: `\n\t\t<ng-content select=\"ngx-dropzone-label\"></ng-content>\n\t\t@if (removable) {\n\t\t <ngx-dropzone-remove-badge (click)=\"_remove($event)\">\n\t\t </ngx-dropzone-remove-badge>\n\t\t}\n\t\t`,\r\n styleUrls: ['./ngx-dropzone-preview.component.scss'],\r\n standalone: false\r\n})\r\nexport class NgxDropzonePreviewComponent {\r\n\r\n\tconstructor(\r\n\t\tprotected sanitizer: DomSanitizer\r\n\t) { }\r\n\r\n\tprotected _file: File;\r\n\r\n\t/** The file to preview. */\r\n\t@Input()\r\n\tset file(value: File) { this._file = value; }\r\n\tget file(): File { return this._file; }\r\n\r\n\t/** Allow the user to remove files. */\r\n\t@Input()\r\n\tget removable(): boolean {\r\n\t\treturn this._removable;\r\n\t}\r\n\tset removable(value: boolean) {\r\n\t\tthis._removable = coerceBooleanProperty(value);\r\n\t}\r\n\tprotected _removable = false;\r\n\r\n\t/** Emitted when the element should be removed. */\r\n\t@Output() readonly removed = new EventEmitter<File>();\r\n\r\n\t@HostListener('keyup', ['$event'])\r\n\tkeyEvent(event: KeyboardEvent) {\r\n\t\tswitch (event.keyCode) {\r\n\t\t\tcase KEY_CODE.BACKSPACE:\r\n\t\t\tcase KEY_CODE.DELETE:\r\n\t\t\t\tthis.remove();\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t/** We use the HostBinding to pass these common styles to child components. */\r\n\t@HostBinding('style')\r\n\tget hostStyle(): SafeStyle {\r\n\t\tconst styles = `\r\n\t\t\tdisplay: flex;\r\n\t\t\theight: 140px;\r\n\t\t\tmin-height: 140px;\r\n\t\t\tmin-width: 180px;\r\n\t\t\tmax-width: 180px;\r\n\t\t\tjustify-content: center;\r\n\t\t\talign-items: center;\r\n\t\t\tpadding: 0 20px;\r\n\t\t\tmargin: 10px;\r\n\t\t\tborder-radius: 5px;\r\n\t\t\tposition: relative;\r\n\t\t`;\r\n\r\n\t\treturn this.sanitizer.bypassSecurityTrustStyle(styles);\r\n\t}\r\n\r\n\t/** Make the preview item focusable using the tab key. */\r\n\t@HostBinding('tabindex') tabIndex = 0;\r\n\r\n\t/** Remove method to be used from the template. */\r\n\t_remove(event) {\r\n\t\tevent.stopPropagation();\r\n\t\tthis.remove();\r\n\t}\r\n\r\n\t/** Remove the preview item (use from component code). */\r\n\tremove() {\r\n\t\tif (this._removable) {\r\n\t\t\tthis.removed.next(this.file);\r\n\t\t}\r\n\t}\r\n\r\n\tprotected async readFile(): Promise<string | ArrayBuffer> {\r\n\t\treturn new Promise<string | ArrayBuffer>((resolve, reject) => {\r\n\t\t\tconst reader = new FileReader();\r\n\r\n\t\t\treader.onload = e => {\r\n\t\t\t\tresolve((e.target as FileReader).result);\r\n\t\t\t};\r\n\r\n\t\t\treader.onerror = e => {\r\n\t\t\t\tconsole.error(`FileReader failed on file ${this.file.name}.`);\r\n\t\t\t\treject(e);\r\n\t\t\t};\r\n\r\n\t\t\tif (!this.file) {\r\n\t\t\t\treturn reject('No file to read. Please provide a file using the [file] Input property.');\r\n\t\t\t}\r\n\r\n\t\t\treader.readAsDataURL(this.file);\r\n\t\t});\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nexport interface FileSelectResult {\r\n\r\n\t/** The added files, emitted in the filesAdded event. */\r\n\taddedFiles: File[];\r\n\r\n\t/** The rejected files, emitted in the filesRejected event. */\r\n\trejectedFiles: RejectedFile[];\r\n}\r\n\r\nexport interface RejectedFile extends File {\r\n\r\n\t/** The reason the file was rejected. */\r\n\treason?: RejectReason;\r\n}\r\n\r\nexport type RejectReason = 'type' | 'size' | 'no_multiple';\r\n\r\n/**\r\n * This service contains the filtering logic to be applied to\r\n * any dropped or selected file. If a file matches all criteria\r\n * like maximum size or accept type, it will be emitted in the\r\n * addedFiles array, otherwise in the rejectedFiles array.\r\n */\r\n@Injectable()\r\nexport class NgxDropzoneService {\r\n\r\n\tparseFileList(files: FileList, accept: string, maxFileSize: number, multiple: boolean): FileSelectResult {\r\n\r\n\t\tconst addedFiles: File[] = [];\r\n\t\tconst rejectedFiles: RejectedFile[] = [];\r\n\r\n\t\tfor (let i = 0; i < files.length; i++) {\r\n\t\t\tconst file = files.item(i);\r\n\r\n\t\t\tif (!this.isAccepted(file, accept)) {\r\n\t\t\t\tthis.rejectFile(rejectedFiles, file, 'type');\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (maxFileSize && file.size > maxFileSize) {\r\n\t\t\t\tthis.rejectFile(rejectedFiles, file, 'size');\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (!multiple && addedFiles.length >= 1) {\r\n\t\t\t\tthis.rejectFile(rejectedFiles, file, 'no_multiple');\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\taddedFiles.push(file);\r\n\t\t}\r\n\r\n\t\tconst result: FileSelectResult = {\r\n\t\t\taddedFiles,\r\n\t\t\trejectedFiles\r\n\t\t};\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate isAccepted(file: File, accept: string): boolean {\r\n\r\n\t\tif (accept === '*') {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tconst acceptFiletypes = accept.split(',').map(it => it.toLowerCase().trim());\r\n\t\tconst filetype = file.type.toLowerCase();\r\n\t\tconst filename = file.name.toLowerCase();\r\n\r\n\t\tconst matchedFileType = acceptFiletypes.find(acceptFiletype => {\r\n\r\n\t\t\t// check for wildcard mimetype (e.g. image/*)\r\n\t\t\tif (acceptFiletype.endsWith('/*')) {\r\n\t\t\t\treturn filetype.split('/')[0] === acceptFiletype.split('/')[0];\r\n\t\t\t}\r\n\r\n\t\t\t// check for file extension (e.g. .csv)\r\n\t\t\tif (acceptFiletype.startsWith(\".\")) {\r\n\t\t\t\treturn filename.endsWith(acceptFiletype);\r\n\t\t\t}\r\n\r\n\t\t\t// check for exact mimetype match (e.g. image/jpeg)\r\n\t\t\treturn acceptFiletype == filetype;\r\n\t\t});\r\n\r\n\t\treturn !!matchedFileType;\r\n\t}\r\n\r\n\tprivate rejectFile(rejectedFiles: RejectedFile[], file: File, reason: RejectReason) {\r\n\r\n\t\tconst rejectedFile = file as RejectedFile;\r\n\t\trejectedFile.reason = reason;\r\n\r\n\t\trejectedFiles.push(rejectedFile);\r\n\t}\r\n}\r\n","import { Component, EventEmitter, Output, Input, ViewChild, ContentChildren, QueryList, HostBinding, HostListener, Self, ElementRef } from '@angular/core';\r\nimport {NgxDropzoneService, RejectedFile} from '../ngx-dropzone.service';\r\nimport { coerceBooleanProperty, coerceNumberProperty } from '../helpers';\r\nimport { NgxDropzonePreviewComponent } from '../ngx-dropzone-preview/ngx-dropzone-preview.component';\r\n\r\nexport interface NgxDropzoneChangeEvent {\r\n source: NgxDropzoneComponent;\r\n addedFiles: File[];\r\n rejectedFiles: RejectedFile[];\r\n}\r\n\r\n@Component({\r\n selector: 'ngx-dropzone, [ngx-dropzone]',\r\n templateUrl: './ngx-dropzone.component.html',\r\n styleUrls: ['./ngx-dropzone.component.scss'],\r\n providers: [NgxDropzoneService],\r\n standalone: false\r\n})\r\nexport class NgxDropzoneComponent {\r\n\r\n constructor(\r\n @Self() private service: NgxDropzoneService\r\n ) {}\r\n\r\n /** A list of the content-projected preview children. */\r\n @ContentChildren(NgxDropzonePreviewComponent, { descendants: true })\r\n _previewChildren: QueryList<NgxDropzonePreviewComponent>;\r\n\r\n get _hasPreviews(): boolean {\r\n return !!this._previewChildren.length;\r\n }\r\n\r\n /** A template reference to the native file input element. */\r\n @ViewChild('fileInput', { static: true }) _fileInput: ElementRef;\r\n\r\n /** Emitted when any files were added or rejected. */\r\n @Output() readonly change = new EventEmitter<NgxDropzoneChangeEvent>();\r\n\r\n /** Set the accepted file types. Defaults to '*'. */\r\n @Input() accept = '*';\r\n\r\n /** Disable any user interaction with the component. */\r\n @Input()\r\n @HostBinding('class.ngx-dz-disabled')\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n\r\n if (this._isHovered) {\r\n this._isHovered = false;\r\n }\r\n }\r\n private _disabled = false;\r\n\r\n /** Allow the selection of multiple files. */\r\n @Input()\r\n get multiple(): boolean {\r\n return this._multiple;\r\n }\r\n set multiple(value: boolean) {\r\n this._multiple = coerceBooleanProperty(value);\r\n }\r\n private _multiple = true;\r\n\r\n /** Set the maximum size a single file may have. */\r\n @Input()\r\n get maxFileSize(): number {\r\n return this._maxFileSize;\r\n }\r\n set maxFileSize(value: number) {\r\n this._maxFileSize = coerceNumberProperty(value);\r\n }\r\n private _maxFileSize: number = undefined;\r\n\r\n /** Allow the dropzone container to expand vertically. */\r\n @Input()\r\n @HostBinding('class.expandable')\r\n get expandable(): boolean {\r\n return this._expandable;\r\n }\r\n set expandable(value: boolean) {\r\n this._expandable = coerceBooleanProperty(value);\r\n }\r\n private _expandable: boolean = false;\r\n\r\n /** Open the file selector on click. */\r\n @Input()\r\n @HostBinding('class.unclickable')\r\n get disableClick(): boolean {\r\n return this._disableClick;\r\n }\r\n set disableClick(value: boolean) {\r\n this._disableClick = coerceBooleanProperty(value);\r\n }\r\n private _disableClick = false;\r\n\r\n /** Allow dropping directories. */\r\n @Input()\r\n get processDirectoryDrop(): boolean {\r\n return this._processDirectoryDrop;\r\n }\r\n set processDirectoryDrop(value: boolean) {\r\n this._processDirectoryDrop = coerceBooleanProperty(value);\r\n }\r\n private _processDirectoryDrop = false;\r\n\r\n /** Expose the id, aria-label, aria-labelledby and aria-describedby of the native file input for proper accessibility. */\r\n @Input() id: string;\r\n @Input('aria-label') ariaLabel: string;\r\n @Input('aria-labelledby') ariaLabelledby: string;\r\n @Input('aria-describedby') ariaDescribedBy: string;\r\n\r\n @HostBinding('class.ngx-dz-hovered')\r\n _isHovered = false;\r\n\r\n /** Show the native OS file explorer to select files. */\r\n @HostListener('click')\r\n _onClick() {\r\n if (!this.disableClick) {\r\n this.showFileSelector();\r\n }\r\n }\r\n\r\n @HostListener('dragover', ['$event'])\r\n _onDragOver(event) {\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n this.preventDefault(event);\r\n this._isHovered = true;\r\n }\r\n\r\n @HostListener('dragleave')\r\n _onDragLeave() {\r\n this._isHovered = false;\r\n }\r\n\r\n @HostListener('drop', ['$event'])\r\n _onDrop(event) {\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n this.preventDefault(event);\r\n this._isHovered = false;\r\n\r\n // if processDirectoryDrop is not enabled or webkitGetAsEntry is not supported we handle the drop as usual\r\n if (!this.processDirectoryDrop || !DataTransferItem.prototype.webkitGetAsEntry) {\r\n this.handleFileDrop(event.dataTransfer.files);\r\n\r\n // if processDirectoryDrop is enabled and webkitGetAsEntry is supported we can extract files from a dropped directory\r\n } else {\r\n const droppedItems: DataTransferItem[] = event.dataTransfer.items;\r\n\r\n if (droppedItems.length > 0) {\r\n const droppedFiles: File[] = [];\r\n const droppedDirectories = [];\r\n\r\n // seperate dropped files from dropped directories for easier handling\r\n for (let i = 0; i < droppedItems.length; i++) {\r\n const entry = droppedItems[i].webkitGetAsEntry();\r\n if (entry.isFile) {\r\n droppedFiles.push(event.dataTransfer.files[i]);\r\n } else if (entry.isDirectory) {\r\n droppedDirectories.push(entry);\r\n }\r\n }\r\n\r\n // create a DataTransfer\r\n const droppedFilesList = new DataTransfer();\r\n droppedFiles.forEach((droppedFile) => {\r\n droppedFilesList.items.add(droppedFile);\r\n });\r\n\r\n // if no directory is dropped we are done and can call handleFileDrop\r\n if (!droppedDirectories.length && droppedFilesList.items.length) {\r\n this.handleFileDrop(droppedFilesList.files);\r\n }\r\n\r\n // if directories are dropped we extract the files from these directories one-by-one and add it to droppedFilesList\r\n if (droppedDirectories.length) {\r\n const extractFilesFromDirectoryCalls = [];\r\n\r\n for (const droppedDirectory of droppedDirectories) {\r\n extractFilesFromDirectoryCalls.push(this.extractFilesFromDirectory(droppedDirectory));\r\n }\r\n\r\n // wait for all directories to be proccessed to add the extracted files afterwards\r\n Promise.all(extractFilesFromDirectoryCalls).then((allExtractedFiles: any[]) => {\r\n allExtractedFiles.reduce((a, b) => [...a, ...b]).forEach((extractedFile: File) => {\r\n droppedFilesList.items.add(extractedFile);\r\n });\r\n\r\n this.handleFileDrop(droppedFilesList.files);\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n private extractFilesFromDirectory(directory) {\r\n async function getFileFromFileEntry(fileEntry) {\r\n try {\r\n return await new Promise((resolve, reject) => fileEntry.file(resolve, reject));\r\n } catch (err) {\r\n console.log('Error converting a fileEntry to a File: ', err);\r\n }\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const files: File[] = [];\r\n\r\n const dirReader = directory.createReader();\r\n\r\n // we need this to be a recursion because of this issue: https://bugs.chromium.org/p/chromium/issues/detail?id=514087\r\n const readEntries = () => {\r\n dirReader.readEntries(async(dirItems) => {\r\n if (!dirItems.length) {\r\n resolve(files);\r\n } else {\r\n const fileEntries = dirItems.filter((dirItem) => dirItem.isFile);\r\n\r\n for (const fileEntry of fileEntries) {\r\n const file: any = await getFileFromFileEntry(fileEntry);\r\n files.push(file);\r\n }\r\n\r\n readEntries();\r\n }\r\n });\r\n };\r\n readEntries();\r\n });\r\n }\r\n\r\n showFileSelector() {\r\n if (!this.disabled) {\r\n (this._fileInput.nativeElement as HTMLInputElement).click();\r\n }\r\n }\r\n\r\n _onFilesSelected(event) {\r\n const files: FileList = event.target.files;\r\n this.handleFileDrop(files);\r\n\r\n // Reset the native file input element to allow selecting the same file again\r\n this._fileInput.nativeElement.value = '';\r\n\r\n // fix(#32): Prevent the default event behaviour which caused the change event to emit twice.\r\n this.preventDefault(event);\r\n }\r\n\r\n private handleFileDrop(files: FileList) {\r\n const result = this.service.parseFileList(files, this.accept, this.maxFileSize, this.multiple);\r\n\r\n this.change.next({\r\n addedFiles: result.addedFiles,\r\n rejectedFiles: result.rejectedFiles,\r\n source: this\r\n });\r\n }\r\n\r\n private preventDefault(event: DragEvent) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n}\r\n","<input #fileInput type=\"file\" [id]=\"id\" [multiple]=\"multiple\" [accept]=\"accept\" [disabled]=\"disabled\"\n (change)=\"_onFilesSelected($event)\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedBy\">\n @if (!_hasPreviews) {\n <ng-content select=\"ngx-dropzone-label\"></ng-content>\n }\n <ng-content select=\"ngx-dropzone-preview\"></ng-content>\n <ng-content></ng-content>\n","import { Component, OnInit, HostBinding, Input } from '@angular/core';\r\nimport { NgxDropzonePreviewComponent } from '../ngx-dropzone-preview.component';\r\nimport { DomSanitizer, SafeStyle } from '@angular/platform-browser';\r\n\r\n@Component({\r\n selector: 'ngx-dropzone-image-preview',\r\n template: `\n <img [src]=\"imageSrc\" />\n <ng-content select=\"ngx-dropzone-label\"></ng-content>\n @if (removable) {\n <ngx-dropzone-remove-badge (click)=\"_remove($event)\">\n </ngx-dropzone-remove-badge>\n }\n `,\r\n styleUrls: ['./ngx-dropzone-image-preview.component.scss'],\r\n providers: [\r\n {\r\n provide: NgxDropzonePreviewComponent,\r\n useExisting: NgxDropzoneImagePreviewComponent\r\n }\r\n ],\r\n standalone: false\r\n})\r\nexport class NgxDropzoneImagePreviewComponent extends NgxDropzonePreviewComponent implements OnInit {\r\n\r\n constructor(\r\n sanitizer: DomSanitizer\r\n ) {\r\n super(sanitizer);\r\n }\r\n\r\n /** The file to preview. */\r\n @Input()\r\n set file(value: File) {\r\n this._file = value;\r\n this.renderImage();\r\n }\r\n get file(): File { return this._file; }\r\n\r\n /** The image data source. */\r\n defaultImgLoading = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBzdHlsZT0ibWFyZ2luOiBhdXRvOyBiYWNrZ3JvdW5kOiByZ2IoMjQxLCAyNDIsIDI0Mykgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDAlOyBkaXNwbGF5OiBibG9jazsgc2hhcGUtcmVuZGVyaW5nOiBhdXRvOyIgd2lkdGg9IjIyNHB4IiBoZWlnaHQ9IjIyNHB4IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPgo8Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSIxNCIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2U9IiM4NWEyYjYiIHN0cm9rZS1kYXNoYXJyYXk9IjIxLjk5MTE0ODU3NTEyODU1MiAyMS45OTExNDg1NzUxMjg1NTIiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+CiAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIGR1cj0iMS4xNjI3OTA2OTc2NzQ0MTg0cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGtleVRpbWVzPSIwOzEiIHZhbHVlcz0iMCA1MCA1MDszNjAgNTAgNTAiPjwvYW5pbWF0ZVRyYW5zZm9ybT4KPC9jaXJjbGU+CjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIHI9IjEwIiBzdHJva2Utd2lkdGg9IjMiIHN0cm9rZT0iI2JiY2VkZCIgc3Ryb2tlLWRhc2hhcnJheT0iMTUuNzA3OTYzMjY3OTQ4OTY2IDE1LjcwNzk2MzI2Nzk0ODk2NiIgc3Ryb2tlLWRhc2hvZmZzZXQ9IjE1LjcwNzk2MzI2Nzk0ODk2NiIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4KICA8YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIHR5cGU9InJvdGF0ZSIgZHVyPSIxLjE2Mjc5MDY5NzY3NDQxODRzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIga2V5VGltZXM9IjA7MSIgdmFsdWVzPSIwIDUwIDUwOy0zNjAgNTAgNTAiPjwvYW5pbWF0ZVRyYW5zZm9ybT4KPC9jaXJjbGU+CjwhLS0gW2xkaW9dIGdlbmVyYXRlZCBieSBodHRwczovL2xvYWRpbmcuaW8vIC0tPjwvc3ZnPg==';\r\n imageSrc: any = this.sanitizer.bypassSecurityTrustUrl(this.defaultImgLoading);\r\n\r\n ngOnInit() {\r\n this.renderImage();\r\n }\r\n\r\n private renderImage() {\r\n this.readFile()\r\n .then(img => setTimeout(() => this.imageSrc = img))\r\n .catch(err => console.error(err));\r\n }\r\n}\r\n","import { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { NgxDropzonePreviewComponent } from '../ngx-dropzone-preview.component';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\n\r\n@Component({\r\n selector: 'ngx-dropzone-video-preview',\r\n template: `\n @if (sanitizedVideoSrc) {\n <video controls (click)=\"$event.stopPropagation()\">\n <source [src]=\"sanitizedVideoSrc\" />\n </video>\n }\n <ng-content select=\"ngx-dropzone-label\"></ng-content>\n @if (removable) {\n <ngx-dropzone-remove-badge (click)=\"_remove($event)\">\n </ngx-dropzone-remove-badge>\n }\n `,\r\n styleUrls: ['./ngx-dropzone-video-preview.component.scss'],\r\n providers: [\r\n {\r\n provide: NgxDropzonePreviewComponent,\r\n useExisting: NgxDropzoneVideoPreviewComponent\r\n }\r\n ],\r\n standalone: false\r\n})\r\nexport class NgxDropzoneVideoPreviewComponent extends NgxDropzonePreviewComponent implements OnInit, OnDestroy {\r\n\r\n constructor(\r\n sanitizer: DomSanitizer\r\n ) {\r\n super(sanitizer);\r\n }\r\n\r\n /** The video data source. */\r\n sanitizedVideoSrc: SafeUrl;\r\n\r\n private videoSrc: string;\r\n\r\n ngOnInit() {\r\n if (!this.file) {\r\n console.error('No file to read. Please provide a file using the [file] Input property.');\r\n return;\r\n }\r\n\r\n /**\r\n * We sanitize the URL here to enable the preview.\r\n * Please note that this could cause security issues!\r\n **/\r\n this.videoSrc = URL.createObjectURL(this.file);\r\n this.sanitizedVideoSrc = this.sanitizer.bypassSecurityTrustUrl(this.videoSrc);\r\n }\r\n\r\n ngOnDestroy() {\r\n URL.revokeObjectURL(this.videoSrc);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgxDropzoneLabelDirective } from './ngx-dropzone-label.directive';\r\nimport { NgxDropzonePreviewComponent } from './ngx-dropzone-preview/ngx-dropzone-preview.component';\r\nimport { NgxDropzoneComponent } from './ngx-dropzone/ngx-dropzone.component';\r\nimport { NgxDropzoneImagePreviewComponent } from './ngx-dropzone-preview/ngx-dropzone-image-preview/ngx-dropzone-image-preview.component';\r\nimport { NgxDropzoneRemoveBadgeComponent } from './ngx-dropzone-preview/ngx-dropzone-remove-badge/ngx-dropzone-remove-badge.component';\r\nimport { NgxDropzoneVideoPreviewComponent } from './ngx-dropzone-preview/ngx-dropzone-video-preview/ngx-dropzone-video-preview.component';\r\n\r\n@NgModule({\r\n\timports: [\r\n\t\tCommonModule\r\n\t],\r\n\tdeclarations: [\r\n\t\tNgxDropzoneComponent,\r\n\t\tNgxDropzoneLabelDirective,\r\n\t\tNgxDropzonePreviewComponent,\r\n\t\tNgxDropzoneImagePreviewComponent,\r\n\t\tNgxDropzoneRemoveBadgeComponent,\r\n\t\tNgxDropzoneVideoPreviewComponent,\r\n\t],\r\n\texports: [\r\n\t\tNgxDropzoneComponent,\r\n\t\tNgxDropzoneLabelDirective,\r\n\t\tNgxDropzonePreviewComponent,\r\n\t\tNgxDropzoneImagePreviewComponent,\r\n\t\tNgxDropzoneRemoveBadgeComponent,\r\n\t\tNgxDropzoneVideoPreviewComponent,\r\n\t]\r\n})\r\nexport class NgxDropzoneModule { }\r\n","/*\r\n * Public API Surface of ngx-dropzone\r\n */\r\n\r\nexport * from './lib/ngx-dropzone.module';\r\nexport * from './lib/ngx-dropzone-label.directive';\r\nexport * from './lib/ngx-dropzone/ngx-dropzone.component';\r\nexport * from './lib/ngx-dropzone-preview/ngx-dropzone-preview.component';\r\nexport * from './lib/ngx-dropzone-preview/ngx-dropzone-image-preview/ngx-dropzone-image-preview.component';\r\nexport * from './lib/ngx-dropzone-preview/ngx-dropzone-video-preview/ngx-dropzone-video-preview.component';\r\nexport * from './lib/ngx-dropzone-preview/ngx-dropzone-remove-badge/ngx-dropzone-remove-badge.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2.NgxDropzoneRemoveBadgeComponent","i1.NgxDropzoneService"],"mappings":"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"}