{"version":3,"file":"ngx-dropzone-next.mjs","sources":["../../../projects/ngx-dropzone/src/lib/ngx-dropzone-label.directive.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-preview/ngx-dropzone-preview.component.html","../../../projects/ngx-dropzone/src/lib/ngx-dropzone/ngx-dropzone.service.ts","../../../projects/ngx-dropzone/src/lib/ngx-dropzone/on-drop.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-image-preview/ngx-dropzone-image-preview.component.html","../../../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-preview/ngx-dropzone-video-preview/ngx-dropzone-video-preview.component.html","../../../projects/ngx-dropzone/src/public_api.ts","../../../projects/ngx-dropzone/src/ngx-dropzone-next.ts"],"sourcesContent":["import { Directive } from '@angular/core';\n\n@Directive({ selector: 'ngx-dropzone-label' })\nexport class NgxDropzoneLabelDirective {}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n  selector: 'ngx-dropzone-remove-badge',\n  template: `\n    <svg>\n      <line x1=\"0\" y1=\"0\" x2=\"10\" y2=\"10\" />\n      <line x1=\"0\" y1=\"10\" x2=\"10\" y2=\"0\" />\n    </svg>\n  `,\n  styleUrls: ['./ngx-dropzone-remove-badge.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgxDropzoneRemoveBadgeComponent {}\n","import {\n  Component,\n  HostBinding,\n  HostListener,\n  output,\n  ChangeDetectionStrategy,\n  booleanAttribute,\n  input,\n  inject,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { NgxDropzoneRemoveBadgeComponent } from './ngx-dropzone-remove-badge/ngx-dropzone-remove-badge.component';\n\n@Component({\n  selector: 'ngx-dropzone-preview',\n  templateUrl: './ngx-dropzone-preview.component.html',\n  styleUrls: ['./ngx-dropzone-preview.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [NgxDropzoneRemoveBadgeComponent],\n  host: {\n    /** We use the HostBinding to pass these common styles to child components. */\n    '[style]': 'hostStyles',\n  },\n})\nexport class NgxDropzonePreviewComponent {\n  readonly hostStyles = inject(DomSanitizer).bypassSecurityTrustStyle(`\n    display: flex;\n    height: 140px;\n    min-height: 140px;\n    min-width: 180px;\n    max-width: 180px;\n    justify-content: center;\n    align-items: center;\n    padding: 0 20px;\n    margin: 10px;\n    border-radius: 5px;\n    position: relative;\n  `);\n\n  /** The file to preview. */\n  readonly file = input<File>();\n\n  /** Allow the user to remove files. */\n  readonly removable = input(false, { transform: booleanAttribute });\n\n  /** Emitted when the element should be removed. */\n  readonly removed = output<File>();\n\n  @HostListener('keyup', ['$event'])\n  keyEvent(event: KeyboardEvent) {\n    if (\n      // Backspace\n      event.keyCode === 8 ||\n      // Delete\n      event.keyCode === 46\n    ) {\n      this.remove();\n    }\n  }\n\n  /** Make the preview item focusable using the tab key. */\n  @HostBinding('tabindex') tabIndex = 0;\n\n  /** Remove method to be used from the template. */\n  _remove(event: MouseEvent) {\n    event.stopPropagation();\n    this.remove();\n  }\n\n  /** Remove the preview item (use from component code). */\n  remove() {\n    if (this.removable()) {\n      this.removed.emit(this.file()!);\n    }\n  }\n\n  protected async readFile(): Promise<string | ArrayBuffer> {\n    return new Promise<string | ArrayBuffer>((resolve, reject) => {\n      const file = this.file();\n      const reader = new FileReader();\n\n      const cleanup = () => {\n        reader.removeEventListener('load', onLoad);\n        reader.removeEventListener('error', onError);\n      };\n\n      const onLoad = () => {\n        cleanup();\n        resolve(reader.result!);\n      };\n\n      const onError = (error: Event) => {\n        cleanup();\n        reject(error);\n      };\n\n      reader.addEventListener('load', onLoad);\n      reader.addEventListener('error', onError);\n\n      if (!file) {\n        return reject(\n          'No file to read. Please provide a file using the [file] Input property.'\n        );\n      }\n\n      reader.readAsDataURL(file);\n    });\n  }\n}\n","<ng-content select=\"ngx-dropzone-label\"></ng-content>\n@if (removable()) {\n  <ngx-dropzone-remove-badge (click)=\"_remove($event)\" />\n}\n","import { Injectable } from '@angular/core';\n\nexport interface FileSelectResult {\n  /** The added files, emitted in the filesAdded event. */\n  addedFiles: File[];\n\n  /** The rejected files, emitted in the filesRejected event. */\n  rejectedFiles: RejectedFile[];\n}\n\nexport interface RejectedFile extends File {\n  /** The reason the file was rejected. */\n  reason?: RejectReason;\n}\n\nexport type RejectReason = 'type' | 'size' | 'no_multiple';\n\n/**\n * This service contains the filtering logic to be applied to\n * any dropped or selected file. If a file matches all criteria\n * like maximum size or accept type, it will be emitted in the\n * addedFiles array, otherwise in the rejectedFiles array.\n */\n@Injectable({ providedIn: 'root' })\nexport class NgxDropzoneService {\n  parseFileList(\n    files: FileList,\n    accept: string,\n    maxFileSize: number | null | undefined,\n    multiple: boolean\n  ): FileSelectResult {\n    const addedFiles: File[] = [];\n    const rejectedFiles: RejectedFile[] = [];\n\n    for (let i = 0; i < files.length; i++) {\n      const file = files.item(i)!;\n\n      if (!this.isAccepted(file, accept)) {\n        this.rejectFile(rejectedFiles, file, 'type');\n        continue;\n      }\n\n      if (maxFileSize && file.size > maxFileSize) {\n        this.rejectFile(rejectedFiles, file, 'size');\n        continue;\n      }\n\n      if (!multiple && addedFiles.length >= 1) {\n        this.rejectFile(rejectedFiles, file, 'no_multiple');\n        continue;\n      }\n\n      addedFiles.push(file);\n    }\n\n    const result: FileSelectResult = {\n      addedFiles,\n      rejectedFiles,\n    };\n\n    return result;\n  }\n\n  private isAccepted(file: File, accept: string): boolean {\n    if (accept === '*') {\n      return true;\n    }\n\n    // Sanitize filename first\n    const safeName = this.sanitizeFilename(file.name);\n    const filename = safeName.toLowerCase();\n    const filetype = file.type.toLowerCase();\n\n    const acceptFiletypes = accept\n      .split(',')\n      .map((it) => it.toLowerCase().trim())\n      .filter((it) => it.length > 0); // Remove empty strings\n\n    return acceptFiletypes.some((acceptFiletype) => {\n      // Wildcard MIME (more restrictive).\n      if (acceptFiletype.endsWith('/*')) {\n        const [acceptMain] = acceptFiletype.split('/');\n        const [fileMain] = filetype.split('/');\n        return acceptMain === fileMain && acceptMain.length > 0;\n      }\n\n      // Extension check - get LAST extension only.\n      if (acceptFiletype.startsWith('.')) {\n        const lastDot = filename.lastIndexOf('.');\n        if (lastDot === -1) return false;\n        const ext = filename.substring(lastDot);\n        return ext === acceptFiletype;\n      }\n\n      // Exact MIME match\n      return acceptFiletype === filetype;\n    });\n  }\n\n  private sanitizeFilename(name: string): string {\n    return name\n      .replace(/[^a-zA-Z0-9._-]/g, '_') // Remove special chars\n      .replace(/\\.{2,}/g, '.') // No \"..\"\n      .replace(/\\0/g, '') // Remove null bytes\n      .substring(0, 255); // Limit length\n  }\n\n  private rejectFile(\n    rejectedFiles: RejectedFile[],\n    file: File,\n    reason: RejectReason\n  ) {\n    const rejectedFile = file as RejectedFile;\n    rejectedFile.reason = reason;\n\n    rejectedFiles.push(rejectedFile);\n  }\n}\n","import type { NgxDropzoneComponent } from './ngx-dropzone.component';\nimport { NgxDropzoneService } from './ngx-dropzone.service';\n\nexport async function onDropImpl(\n  ctx: NgxDropzoneComponent,\n  dataTransfer: DataTransfer\n) {\n  const { files, items } = dataTransfer;\n\n  // if processDirectoryDrop is not enabled or webkitGetAsEntry is not supported we handle the drop as usual\n  if (\n    !ctx.processDirectoryDrop() ||\n    !DataTransferItem.prototype.webkitGetAsEntry\n  ) {\n    handleFileDrop(ctx, files);\n    // if processDirectoryDrop is enabled and webkitGetAsEntry is supported we can extract files from a dropped directory\n  } else if (items.length > 0) {\n    const droppedFiles: File[] = [];\n    const droppedDirectories: FileSystemEntry[] = [];\n\n    // Separate dropped files from dropped directories\n    for (let index = 0; index < items.length; index++) {\n      const entry = items[index].webkitGetAsEntry();\n\n      if (!entry) {\n        continue;\n      }\n\n      if (entry.isFile) {\n        // Get File directly from entry instead of relying on index mapping.\n        const file = items[index].getAsFile();\n        if (file) {\n          droppedFiles.push(file);\n        }\n      } else if (entry.isDirectory) {\n        droppedDirectories.push(entry);\n      }\n    }\n\n    const droppedFilesList = new DataTransfer();\n    for (const file of droppedFiles) {\n      // Safari requires actual File objects, not Blobs.\n      if (file instanceof File) {\n        droppedFilesList.items.add(file);\n      }\n    }\n\n    // if no directory is dropped we are done and can call handleFileDrop\n    if (!droppedDirectories.length && droppedFilesList.items.length) {\n      handleFileDrop(ctx, droppedFilesList.files);\n    }\n\n    // if directories are dropped we extract the files from these directories one-by-one and add it to droppedFilesList\n    if (droppedDirectories.length) {\n      const extractFilesFromDirectoryCalls: Promise<File[]>[] = [];\n\n      for (const droppedDirectory of droppedDirectories) {\n        extractFilesFromDirectoryCalls.push(\n          extractFilesFromDirectory(droppedDirectory)\n        );\n      }\n\n      // wait for all directories to be proccessed to add the extracted files afterwards\n      await Promise.all(extractFilesFromDirectoryCalls).then(\n        (allExtractedFiles: File[][]) => {\n          allExtractedFiles\n            .reduce((a, b) => [...a, ...b])\n            .forEach((extractedFile: File) => {\n              droppedFilesList.items.add(extractedFile);\n            });\n        }\n      );\n\n      handleFileDrop(ctx, droppedFilesList.files);\n    }\n  }\n}\n\nasync function getFileFromFileEntry(entry: FileSystemEntry) {\n  try {\n    const fileSystemFileEntry = <FileSystemFileEntry>entry;\n\n    return await new Promise<File>((resolve, reject) =>\n      fileSystemFileEntry.file(resolve, reject)\n    );\n  } catch (error) {\n    if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n      console.log('Error converting a fileEntry to a File: ', error);\n    }\n    return null;\n  }\n}\n\nfunction extractFilesFromDirectory(directory: FileSystemEntry) {\n  return new Promise<File[]>((resolve) => {\n    const files: File[] = [];\n\n    const reader = (directory as FileSystemDirectoryEntry).createReader();\n\n    // we need this to be a recursion because of this issue: https://bugs.chromium.org/p/chromium/issues/detail?id=514087\n    const readEntries = () => {\n      reader.readEntries(async (entries: FileSystemEntry[]) => {\n        if (entries.length > 0) {\n          for (const entry of entries.filter(({ isFile }) => isFile)) {\n            const file = await getFileFromFileEntry(entry);\n            file && files.push(file);\n          }\n\n          readEntries();\n        } else {\n          resolve(files);\n        }\n      });\n    };\n\n    readEntries();\n  });\n}\n\nexport function handleFileDrop(ctx: NgxDropzoneComponent, files: FileList) {\n  const service = ctx.injector.get(NgxDropzoneService);\n\n  const result = service.parseFileList(\n    files,\n    ctx.accept(),\n    ctx.maxFileSize(),\n    ctx.multiple()\n  );\n\n  ctx.change.emit({\n    addedFiles: result.addedFiles,\n    rejectedFiles: result.rejectedFiles,\n    source: ctx,\n  });\n}\n","import {\n  Component,\n  ElementRef,\n  output,\n  input,\n  inject,\n  Injector,\n  viewChild,\n  contentChildren,\n  computed,\n  booleanAttribute,\n  numberAttribute,\n  signal,\n  type OnChanges,\n  type SimpleChanges,\n  PendingTasks,\n  afterNextRender,\n  DestroyRef,\n} from '@angular/core';\n\nimport { NgxDropzonePreviewComponent } from '../ngx-dropzone-preview/ngx-dropzone-preview.component';\nimport type { RejectedFile } from './ngx-dropzone.service';\nimport { handleFileDrop, onDropImpl } from './on-drop';\n\nexport interface NgxDropzoneChangeEvent {\n  source: NgxDropzoneComponent;\n  addedFiles: File[];\n  rejectedFiles: RejectedFile[];\n}\n\n@Component({\n  selector: 'ngx-dropzone, [ngx-dropzone]',\n  templateUrl: './ngx-dropzone.component.html',\n  styleUrls: ['./ngx-dropzone.component.scss'],\n  host: {\n    '[class.ngx-dz-hovered]': 'isHovered()',\n    '[class.unclickable]': 'disableClick()',\n    '[class.expandable]': 'expandable()',\n    '[class.ngx-dz-disabled]': 'disabled()',\n  },\n})\nexport class NgxDropzoneComponent implements OnChanges {\n  readonly injector = inject(Injector);\n\n  /** A list of the content-projected preview children. */\n  readonly previewChildren = contentChildren(NgxDropzonePreviewComponent, {\n    descendants: true,\n  });\n\n  protected readonly hasPreviews = computed(\n    () => !!this.previewChildren().length\n  );\n\n  /** A template reference to the native file input element. */\n  readonly fileInput =\n    viewChild.required<ElementRef<HTMLInputElement>>('fileInput');\n\n  /** Emitted when any files were added or rejected. */\n  readonly change = output<NgxDropzoneChangeEvent>();\n\n  /** Set the accepted file types. Defaults to '*'. */\n  readonly accept = input('*');\n\n  /** Disable any user interaction with the component. */\n  readonly disabled = input(false, { transform: booleanAttribute });\n\n  /** Allow the selection of multiple files. */\n  readonly multiple = input(true, { transform: booleanAttribute });\n\n  /** Set the maximum size a single file may have. */\n  readonly maxFileSize = input(undefined, { transform: numberAttribute });\n\n  /** Allow the dropzone container to expand vertically. */\n  readonly expandable = input(false, { transform: booleanAttribute });\n\n  /** Open the file selector on click. */\n  readonly disableClick = input(false, { transform: booleanAttribute });\n\n  /** Allow dropping directories. */\n  readonly processDirectoryDrop = input(false, { transform: booleanAttribute });\n\n  /** Expose the id, aria-label, aria-labelledby and aria-describedby of the native file input for proper accessibility. */\n  readonly id = input('');\n  readonly ariaLabel = input('', { alias: 'aria-label' });\n  readonly ariaLabelledby = input('', { alias: 'aria-labelledby' });\n  readonly ariaDescribedBy = input('', { alias: 'aria-describedby' });\n\n  protected readonly isHovered = signal(false);\n\n  private readonly _destroyRef = inject(DestroyRef);\n  private readonly _pendingTasks = inject(PendingTasks);\n  private readonly _host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  constructor() {\n    if (typeof ngServerMode === 'undefined' || ngServerMode) {\n      return;\n    }\n\n    afterNextRender(() => this._setupEventListeners());\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['disabled'] && this.isHovered()) {\n      this.isHovered.set(false);\n    }\n  }\n\n  showFileSelector() {\n    if (!this.disabled()) {\n      (this.fileInput().nativeElement as HTMLInputElement).click();\n    }\n  }\n\n  private _setupEventListeners(): void {\n    const host = this._host.nativeElement;\n    const fileInput = this.fileInput().nativeElement;\n\n    const onClick = () => {\n      if (!this.disableClick()) {\n        this.showFileSelector();\n      }\n    };\n\n    // Dragover - prevents default to allow drop & shows hover state.\n    const onDragover = (event: DragEvent) => {\n      if (this.disabled()) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      this.isHovered.set(true);\n    };\n\n    // Dragleave - removes hover state when drag leaves element.\n    const onDragleave = (event: DragEvent) => {\n      const target = event.currentTarget as HTMLElement | null;\n      const related = event.relatedTarget as Node | null;\n\n      if (target && (!related || !target.contains(related))) {\n        this.isHovered.set(false);\n      }\n    };\n\n    const onDrop = (event: DragEvent) => {\n      if (this.disabled()) {\n        return;\n      }\n\n      // fix(#32): Prevent the default event behaviour which caused the change event to emit twice.\n      event.preventDefault();\n      event.stopPropagation();\n\n      this.isHovered.set(false);\n      const { dataTransfer } = event;\n\n      if (dataTransfer === null) {\n        return;\n      }\n\n      this._pendingTasks.run(() => onDropImpl(this, dataTransfer));\n    };\n\n    // Manual event listeners to avoid Angular's change detection overhead.\n    host.addEventListener('click', onClick); // Show the native OS file explorer to select files.\n    host.addEventListener('dragover', onDragover);\n    host.addEventListener('dragleave', onDragleave);\n    host.addEventListener('drop', onDrop);\n    fileInput.addEventListener('change', this._onFilesSelected);\n\n    this._destroyRef.onDestroy(() => {\n      host.removeEventListener('click', onClick);\n      host.removeEventListener('dragover', onDragover);\n      host.removeEventListener('dragleave', onDragleave);\n      host.removeEventListener('drop', onDrop);\n      fileInput.removeEventListener('change', this._onFilesSelected);\n    });\n  }\n\n  // Handles files selected via <input type=\"file\">.\n  private _onFilesSelected = (event: Event) => {\n    const target = <HTMLInputElement>event.target;\n    const files = target.files;\n\n    // fix(#32): Prevent the default event behaviour which caused the change event to emit twice.\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (files === null || files.length === 0) {\n      return;\n    }\n\n    try {\n      handleFileDrop(this, files);\n    } finally {\n      target.value = '';\n    }\n  };\n}\n","<input\n  #fileInput\n  type=\"file\"\n  [id]=\"id()\"\n  [multiple]=\"multiple()\"\n  [accept]=\"accept()\"\n  [disabled]=\"disabled()\"\n  [attr.aria-label]=\"ariaLabel()\"\n  [attr.aria-labelledby]=\"ariaLabelledby()\"\n  [attr.aria-describedby]=\"ariaDescribedBy()\"\n/>\n\n@if (!hasPreviews()) {\n  <ng-content select=\"ngx-dropzone-label\" />\n}\n\n<ng-content select=\"ngx-dropzone-preview\" />\n<ng-content />\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  input,\n  signal,\n  afterNextRender,\n  type OnChanges,\n  type SimpleChanges,\n  inject,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { NgxDropzonePreviewComponent } from '../ngx-dropzone-preview.component';\nimport { NgxDropzoneRemoveBadgeComponent } from '../ngx-dropzone-remove-badge/ngx-dropzone-remove-badge.component';\n\n@Component({\n  selector: 'ngx-dropzone-image-preview',\n  templateUrl: './ngx-dropzone-image-preview.component.html',\n  styleUrls: ['./ngx-dropzone-image-preview.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [NgxDropzoneRemoveBadgeComponent],\n  providers: [\n    {\n      provide: NgxDropzonePreviewComponent,\n      useExisting: NgxDropzoneImagePreviewComponent,\n    },\n  ],\n})\nexport class NgxDropzoneImagePreviewComponent\n  extends NgxDropzonePreviewComponent\n  implements OnChanges\n{\n  /** The image data source. */\n  private defaultImgLoading =\n    'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBzdHlsZT0ibWFyZ2luOiBhdXRvOyBiYWNrZ3JvdW5kOiByZ2IoMjQxLCAyNDIsIDI0Mykgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDAlOyBkaXNwbGF5OiBibG9jazsgc2hhcGUtcmVuZGVyaW5nOiBhdXRvOyIgd2lkdGg9IjIyNHB4IiBoZWlnaHQ9IjIyNHB4IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPgo8Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSIxNCIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2U9IiM4NWEyYjYiIHN0cm9rZS1kYXNoYXJyYXk9IjIxLjk5MTE0ODU3NTEyODU1MiAyMS45OTExNDg1NzUxMjg1NTIiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+CiAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIGR1cj0iMS4xNjI3OTA2OTc2NzQ0MTg0cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGtleVRpbWVzPSIwOzEiIHZhbHVlcz0iMCA1MCA1MDszNjAgNTAgNTAiPjwvYW5pbWF0ZVRyYW5zZm9ybT4KPC9jaXJjbGU+CjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIHI9IjEwIiBzdHJva2Utd2lkdGg9IjMiIHN0cm9rZT0iI2JiY2VkZCIgc3Ryb2tlLWRhc2hhcnJheT0iMTUuNzA3OTYzMjY3OTQ4OTY2IDE1LjcwNzk2MzI2Nzk0ODk2NiIgc3Ryb2tlLWRhc2hvZmZzZXQ9IjE1LjcwNzk2MzI2Nzk0ODk2NiIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4KICA8YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIHR5cGU9InJvdGF0ZSIgZHVyPSIxLjE2Mjc5MDY5NzY3NDQxODRzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIga2V5VGltZXM9IjA7MSIgdmFsdWVzPSIwIDUwIDUwOy0zNjAgNTAgNTAiPjwvYW5pbWF0ZVRyYW5zZm9ybT4KPC9jaXJjbGU+CjwhLS0gW2xkaW9dIGdlbmVyYXRlZCBieSBodHRwczovL2xvYWRpbmcuaW8vIC0tPjwvc3ZnPg==';\n  protected imageSrc = signal(\n    inject(DomSanitizer).bypassSecurityTrustUrl(this.defaultImgLoading)\n  );\n\n  /** The file to preview. */\n  override readonly file = input<File>();\n\n  constructor() {\n    super();\n\n    afterNextRender(() => {\n      this.renderImage();\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['file']) {\n      this.renderImage();\n    }\n  }\n\n  private renderImage() {\n    this.readFile()\n      .then((img) => setTimeout(() => this.imageSrc.set(img)))\n      .catch((err) => console.error(err));\n  }\n}\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}\n","import {\n  Component,\n  inject,\n  DestroyRef,\n  afterNextRender,\n  signal,\n  ChangeDetectionStrategy,\n  untracked,\n} from '@angular/core';\nimport { DomSanitizer, type SafeUrl } from '@angular/platform-browser';\n\nimport { NgxDropzonePreviewComponent } from '../ngx-dropzone-preview.component';\nimport { NgxDropzoneRemoveBadgeComponent } from '../ngx-dropzone-remove-badge/ngx-dropzone-remove-badge.component';\n\n@Component({\n  selector: 'ngx-dropzone-video-preview',\n  templateUrl: './ngx-dropzone-video-preview.component.html',\n  styleUrls: ['./ngx-dropzone-video-preview.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [NgxDropzoneRemoveBadgeComponent],\n  providers: [\n    {\n      provide: NgxDropzonePreviewComponent,\n      useExisting: NgxDropzoneVideoPreviewComponent,\n    },\n  ],\n})\nexport class NgxDropzoneVideoPreviewComponent extends NgxDropzonePreviewComponent {\n  /** The video data source. */\n  protected readonly _sanitizedVideoSrc = signal<SafeUrl | null>(null);\n\n  constructor() {\n    super();\n\n    const destroyRef = inject(DestroyRef);\n    const sanitizer = inject(DomSanitizer);\n\n    afterNextRender(() => {\n      const file = untracked(this.file);\n      if (!file) return;\n\n      /**\n       * We sanitize the URL here to enable the preview.\n       * Please note that this could cause security issues!\n       **/\n      const videoObjectUrl = URL.createObjectURL(file);\n      this._sanitizedVideoSrc.set(\n        sanitizer.bypassSecurityTrustUrl(videoObjectUrl)\n      );\n\n      destroyRef.onDestroy(() => URL.revokeObjectURL(videoObjectUrl));\n    });\n  }\n}\n","@if (_sanitizedVideoSrc(); as sanitizedVideoSrc) {\n  <video controls (click)=\"$event.stopPropagation()\">\n    <source [src]=\"sanitizedVideoSrc\" />\n  </video>\n}\n\n<ng-content select=\"ngx-dropzone-label\"></ng-content>\n\n@if (removable()) {\n  <ngx-dropzone-remove-badge (click)=\"_remove($event)\" />\n}\n","/*\n * Public API Surface of ngx-dropzone-next\n */\n\nexport { NgxDropzoneLabelDirective } from './lib/ngx-dropzone-label.directive';\n\nexport {\n  type NgxDropzoneChangeEvent,\n  NgxDropzoneComponent,\n} from './lib/ngx-dropzone/ngx-dropzone.component';\n\nexport { NgxDropzonePreviewComponent } from './lib/ngx-dropzone-preview/ngx-dropzone-preview.component';\n\nexport { NgxDropzoneImagePreviewComponent } from './lib/ngx-dropzone-preview/ngx-dropzone-image-preview/ngx-dropzone-image-preview.component';\n\nexport { NgxDropzoneVideoPreviewComponent } from './lib/ngx-dropzone-preview/ngx-dropzone-video-preview/ngx-dropzone-video-preview.component';\n\nexport { NgxDropzoneRemoveBadgeComponent } from './lib/ngx-dropzone-preview/ngx-dropzone-remove-badge/ngx-dropzone-remove-badge.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}