{"version":3,"file":"ngx-dropzone-cdk.mjs","sources":["../../../projects/cdk/src/lib/coercion/boolean-coercion.ts","../../../projects/cdk/src/lib/file-input/accept.service.ts","../../../projects/cdk/src/lib/file-input/file-input-validators.ts","../../../projects/cdk/src/lib/file-input/file-input-errors.ts","../../../projects/cdk/src/lib/file-input/file-input.directive.ts","../../../projects/cdk/src/lib/dropzone/dropzone-errors.ts","../../../projects/cdk/src/lib/dropzone/dropzone.service.ts","../../../projects/cdk/src/lib/dropzone/dropzone.component.ts","../../../projects/cdk/src/public-api.ts","../../../projects/cdk/src/ngx-dropzone-cdk.ts"],"sourcesContent":["export type BooleanInput = boolean | string | number | null | undefined;\n\n/** Inspired by the Angular Material library, we check our input properties. */\nexport function coerceBoolean(value?: BooleanInput): boolean {\n  return ['', '1', 'true'].includes(`${value}`);\n}\n\n/** Allows filtering `null` and `undefined` elements from arrays. */\nexport function nonNullable<T>(value: T | null): value is T {\n  return value !== null && value !== undefined;\n}\n","import { Injectable } from '@angular/core';\nimport { FileInputValue } from './file-input-value';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AcceptService {\n  /**\n   * Returns `true` if all files match the provided `accept` parameter.\n   * See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/accept)\n   * for more information.\n   */\n  accepts(fileValue: FileInputValue, accept: string): boolean {\n    if (!fileValue || accept === '*') {\n      return true;\n    }\n\n    const acceptedMimeTypes = this.parseAttribute(accept, (t) => this.isValidMimeType(t));\n    const acceptedExtensions = this.parseAttribute(accept, (t) => this.isValidExtension(t));\n\n    const fileList = Array.isArray(fileValue) ? fileValue : [fileValue];\n\n    return fileList.every(\n      (file) =>\n        this.isAcceptedByExtension(file, acceptedExtensions) || this.isAcceptedByMimeType(file, acceptedMimeTypes)\n    );\n  }\n\n  private isAcceptedByExtension(file: File, acceptedExtensions: string[]): boolean {\n    return acceptedExtensions.some((ext) => file.name.toLowerCase().endsWith(ext));\n  }\n\n  private isAcceptedByMimeType(file: File, acceptedMimeTypes: string[]): boolean {\n    return acceptedMimeTypes.some((type) => {\n      if (type === file.type) {\n        return true;\n      }\n\n      const [media, sub] = type.split('/', 2);\n      const fileMedia = file.type.split('/')[0];\n\n      return sub === '*' && media === fileMedia;\n    });\n  }\n\n  private parseAttribute(accept: string, predicate: (type: string) => boolean): string[] {\n    if (!accept?.length) {\n      return [];\n    }\n\n    return accept.split(',').reduce((types, type) => {\n      const trimmedType = type.trim();\n      if (trimmedType.length && predicate(trimmedType)) {\n        types.push(trimmedType.toLowerCase());\n      }\n      return types;\n    }, [] as string[]);\n  }\n\n  private isValidMimeType(type: string): boolean {\n    const safeType = type || '';\n    const slashPos = safeType.indexOf('/');\n\n    if (slashPos <= 0 || slashPos === safeType.length - 1) {\n      return false;\n    }\n\n    return Array.from(safeType).every((char, i) => this.isValidToken(char) || i === slashPos);\n  }\n\n  private isValidExtension(type: string): boolean {\n    const safeType = type || '';\n    return safeType.length >= 2 && safeType[0] === '.';\n  }\n\n  private isValidToken(char: string): boolean {\n    const invalidChars = Array.from('\" (),/:@[]{}');\n    return this.isAscii(char) && !invalidChars.includes(char);\n  }\n\n  private isAscii(char: string): boolean {\n    return (char || '').charCodeAt(0) < 127;\n  }\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { AcceptService } from '.';\nimport { FileInputValue } from './file-input-value';\n\nexport class FileInputValidators {\n  /**\n   * Checks if the file size is equal or greater than the minimum size.\n   * Validates every file within array or single file. Returns no error when null.\n   */\n  static minSize(min: number): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      const valid = this.validate(control.value, (file) => file.size >= min);\n      return valid ? null : { minSize: { value: control.value } };\n    };\n  }\n\n  /**\n   * Checks if the file size is equal or smaller than the allowed size.\n   * Validates every file within array or single file. Returns no error when null.\n   */\n  static maxSize(max: number): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      const valid = this.validate(control.value, (file) => file.size <= max);\n      return valid ? null : { maxSize: { value: control.value } };\n    };\n  }\n\n  /** Checks if all provided files match the specified `accept` value. */\n  static accept(accept: string): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      const allAccepted = new AcceptService().accepts(control.value, accept);\n      return allAccepted ? null : { accept: { value: control.value } };\n    };\n  }\n\n  private static validate(value: FileInputValue, predicate: (file: File) => boolean): boolean {\n    if (!value) {\n      return true;\n    }\n\n    if (Array.isArray(value)) {\n      return value.every((f) => f && predicate(f));\n    }\n\n    return predicate(value);\n  }\n}\n","/**\n * Returns an exception to be thrown when attempting to add the `FileInputDirective`\n * to an HTML `<input>` element with a type other than \"file\".\n */\nexport function getInputTypeError() {\n  return Error('The [fileInput] directive may only be applied to `<input type=\"file\" />` elements.');\n}\n\n/**\n * Returns an exception to be thrown when attempting to assign an array value\n * to a file input element without the `multiple` attribute.\n */\nexport function getArrayValueError() {\n  return Error('Value must not be an array when the multiple attribute is not present.');\n}\n\n/**\n * Returns an exception to be thrown when attempting to assign a non-array value\n * to a file input element in `multiple` mode. Note that `undefined` and `null` are\n * valid values to allow for resetting the value.\n */\nexport function getNonArrayValueError() {\n  return Error('Value must be an array when the multiple attribute is present.');\n}\n","import {\n  Directive,\n  DoCheck,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  HostListener,\n  inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n} from '@angular/core';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { BooleanInput, coerceBoolean, nonNullable } from '../coercion';\nimport { AcceptService } from './accept.service';\nimport { getArrayValueError, getInputTypeError, getNonArrayValueError } from './file-input-errors';\nimport { FileInputMode, FileInputValue } from './file-input-value';\n\n@Directive({\n  selector: 'input[fileInput]',\n  exportAs: 'fileInput',\n  host: {\n    style: 'display: none',\n    '(focus)': '_focusChanged(true)',\n    '(blur)': '_focusChanged(false)',\n  },\n})\nexport class FileInputDirective implements ControlValueAccessor, OnInit, OnChanges, DoCheck, OnDestroy {\n  private _value: FileInputValue = null;\n  private _parent: FormGroupDirective | NgForm | null = null;\n\n  private _focused = false;\n  private _touched = false;\n  private _errorState = false;\n\n  private _onChange: ((value: FileInputValue) => void) | null = null;\n  private _onTouched: (() => void) | null = null;\n\n  /** Emits whenever the parent dropzone should re-render. */\n  readonly stateChanges = new Subject<void>();\n\n  /** The value of the file input control. */\n  @Input('value')\n  get _fileValue() {\n    return this.value;\n  }\n  set _fileValue(newValue: FileInputValue) {\n    /**\n     * We may not use the property name `value` for the setter\n     * because it already exists on the native input element\n     * and would break our tests.\n     */\n    if (newValue !== this._value || Array.isArray(newValue)) {\n      this._assertMultipleValue(newValue);\n\n      this._value = newValue;\n      this._updateErrorState();\n\n      this._onTouched?.();\n      this._touched = true;\n\n      this.stateChanges.next();\n    }\n  }\n\n  /** Returns the selected value of the file input control (alias as syntactic sugar). */\n  get value(): FileInputValue {\n    return this._value;\n  }\n\n  /** Returns true if the file input has no selected item. */\n  get empty(): boolean {\n    return this.value === null || (Array.isArray(this.value) && !this.value.length);\n  }\n\n  /** Returns the error state. */\n  get errorState(): boolean {\n    return this._errorState;\n  }\n\n  /** Returns true if the file input element is focused. */\n  get focused(): boolean {\n    return this._focused;\n  }\n\n  /** Returns true if the `multiple` attribute is present on the input element. */\n  get multiple(): boolean {\n    return this.elementRef.nativeElement.multiple;\n  }\n\n  /** Controls the accepted file types. */\n  @Input()\n  @HostBinding('accept')\n  get accept(): string {\n    return this._accept;\n  }\n  set accept(value: string) {\n    this._accept = value;\n    this._updateErrorState();\n\n    this.stateChanges.next();\n  }\n  private _accept = '*';\n\n  /** Controls the value setting strategy. */\n  @Input()\n  get mode(): FileInputMode {\n    return this._mode;\n  }\n  set mode(value: FileInputMode) {\n    this._mode = value;\n    this.stateChanges.next();\n  }\n  private _mode: FileInputMode = 'replace';\n\n  /** The disabled state of the file input control. */\n  @Input()\n  @HostBinding('disabled')\n  get disabled(): boolean {\n    return this.ngControl?.disabled || this._parent?.disabled || this.elementRef.nativeElement.disabled;\n  }\n  set disabled(value: BooleanInput) {\n    this.elementRef.nativeElement.disabled = coerceBoolean(value);\n\n    if (this.focused) {\n      this._focused = false;\n    }\n\n    this.stateChanges.next();\n  }\n\n  /** Event emitted when the selected files have been changed by the user. */\n  @Output() readonly selectionChange = new EventEmitter<FileInputValue>();\n\n  static ngAcceptInputType_disabled: BooleanInput;\n\n  private _acceptService = inject(AcceptService);\n  private _parentForm = inject(NgForm, { optional: true });\n  private _parentFormGroup = inject(FormGroupDirective, { optional: true });\n\n  public elementRef = inject(ElementRef<HTMLInputElement>);\n  public ngControl = inject(NgControl, { optional: true, self: true });\n\n  constructor() {\n    this._parent = this._parentForm || this._parentFormGroup;\n\n    if (this.ngControl != null) {\n      // Setting the value accessor directly (instead of using\n      // the providers) to allow access to error state.\n      this.ngControl.valueAccessor = this;\n    }\n  }\n\n  ngOnInit() {\n    if (this.elementRef.nativeElement.type !== 'file') {\n      throw getInputTypeError();\n    }\n  }\n\n  ngOnChanges() {\n    this.stateChanges.next();\n  }\n\n  ngDoCheck() {\n    this._updateErrorState();\n  }\n\n  ngOnDestroy() {\n    this.stateChanges.complete();\n  }\n\n  /** Opens the native OS file picker. */\n  openFilePicker() {\n    this.elementRef.nativeElement.click();\n  }\n\n  /** Handles the native (change) event. */\n  @HostListener('change', ['$event'])\n  _handleChange(event: Event) {\n    if (this.disabled) return;\n\n    const fileList = (event.target as HTMLInputElement)?.files;\n    if (!fileList || fileList.length === 0) return;\n\n    const files = this.multiple ? Array.from(fileList) : fileList.item(0);\n    const filesWithPaths = this._copyRelativePaths(files);\n    this._fileValue = this._appendOrReplace(filesWithPaths);\n\n    this.selectionChange.emit(this._fileValue);\n    this._onChange?.(this._fileValue);\n\n    // Reset the native element for another selection.\n    this.elementRef.nativeElement.value = '';\n  }\n\n  /** Handles the drop of a file array. */\n  handleFileDrop(files: File[]) {\n    if (this.disabled) return;\n    this._fileValue = this._appendOrReplace(this.multiple ? files : files[0]);\n\n    this.selectionChange.emit(this._fileValue);\n    this._onChange?.(this._fileValue);\n  }\n\n  /** Sets the selected files value as required by the `ControlValueAccessor` interface. */\n  writeValue(value: FileInputValue) {\n    this._fileValue = value;\n    this.selectionChange.emit(this._fileValue);\n  }\n\n  /** Registers the change handler as required by `ControlValueAccessor`. */\n  registerOnChange(fn: (value: FileInputValue) => void) {\n    this._onChange = fn;\n  }\n\n  /** Registers the touched handler as required by `ControlValueAccessor`. */\n  registerOnTouched(fn: () => void) {\n    this._onTouched = fn;\n  }\n\n  /** Implements the disabled state setter from `ControlValueAccessor`. */\n  setDisabledState(disabled: boolean) {\n    this.disabled = disabled;\n  }\n\n  /** Called when the input element is focused or blurred. */\n  _focusChanged(focused: boolean) {\n    if (this._focused !== focused) {\n      this._focused = focused;\n      this.stateChanges.next();\n    }\n  }\n\n  /**\n   * On directory drops, the readonly `webkitRelativePath` property is not available.\n   * We manually set the `relativePath` property for dropped file trees instead.\n   * To achieve a consistent behavior when using the file picker, we copy the value.\n   */\n  private _copyRelativePaths(value: FileInputValue) {\n    if (!value) return value;\n\n    if (Array.isArray(value)) {\n      return value.map((file) => {\n        file.relativePath = file.webkitRelativePath;\n        return file;\n      });\n    }\n\n    value.relativePath = value.webkitRelativePath;\n    return value;\n  }\n\n  /** Asserts that the provided value type matches the input element's multiple attribute. */\n  private _assertMultipleValue(value: FileInputValue) {\n    if (this.multiple && !Array.isArray(value || [])) {\n      throw getNonArrayValueError();\n    }\n\n    if (!this.multiple && Array.isArray(value)) {\n      throw getArrayValueError();\n    }\n  }\n\n  private _appendOrReplace(value: FileInputValue): FileInputValue {\n    if (this._canAppend(this._value)) {\n      const valueArray = Array.isArray(value) ? value : [value];\n      return [...this._value, ...valueArray.filter(nonNullable)];\n    }\n\n    return value;\n  }\n\n  private _canAppend(value: FileInputValue): value is File[] {\n    return this._mode === 'append' && this.multiple && Array.isArray(value);\n  }\n\n  private _updateErrorState() {\n    // Check for any errors of the FormControl or NgModel.\n    const { invalid, touched } = this.ngControl?.control ?? {};\n    const reactiveError = !!(invalid && (touched || this._parent?.submitted));\n\n    // Check for any errors directly on the native input element.\n    const nativeError = this._touched && !this._acceptService.accepts(this.value, this._accept);\n\n    const errorState = reactiveError || nativeError;\n\n    if (this._errorState !== errorState) {\n      this._errorState = errorState;\n      this.stateChanges.next();\n    }\n  }\n}\n","/**\n * Returns an exception to be thrown when creating a dropzone\n * without a FileInputDirective child.\n */\nexport function getMissingControlError() {\n  return Error('The `ngx-dropzone` component requires a child of `<input type=\"file\" fileInput />`.');\n}\n","import { Injectable } from '@angular/core';\nimport { nonNullable } from '../coercion';\nimport { type File } from './../file-input';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DropzoneService {\n  /**\n   * Returns a `File[]` from a `DragEvent`. Accepts a list of files or folders.\n   */\n  async getFiles(event: DragEvent): Promise<File[]> {\n    if (!event.dataTransfer?.items) {\n      // Fallback for older specifications\n      return Array.from(event.dataTransfer?.files ?? []);\n    }\n\n    const fsEntries = Array.from(event.dataTransfer?.items ?? [])\n      .map((item) => this._toFileSystemEntry(item))\n      .map((entry) => this._getFilesFromEntry(entry))\n      .filter(nonNullable);\n\n    const files: File[][] = await Promise.all(fsEntries);\n    return this._flattenFiles(files);\n  }\n\n  private _toFileSystemEntry(item: DataTransferItem): FileSystemEntry | File | null {\n    // In the future, we can use the `getAsEntry` method when it becomes available.\n    if ('getAsEntry' in item && typeof item.getAsEntry === 'function') {\n      return item.getAsEntry();\n    }\n\n    // If supported, use the `webkitGetAsEntry` method to allow folder drops.\n    // As a fallback, use the well-supported `getAsFile` method.\n    return item.webkitGetAsEntry() || item.getAsFile();\n  }\n\n  private async _getFilesFromEntry(entry: FileSystemEntry | File | null): Promise<File[]> {\n    if (!entry) return [];\n\n    if (entry instanceof File) {\n      return [entry];\n    }\n\n    if (this._isFile(entry)) {\n      const file = await this._readFilePromise(entry);\n\n      // Manually set the `relativePath` property for dropped files.\n      file.relativePath = entry.fullPath?.slice(1) ?? '';\n\n      return [file];\n    }\n\n    if (this._isDirectory(entry)) {\n      const entries = await this._readDirectoryWithoutLimit(entry);\n      const children = entries.map((e) => this._getFilesFromEntry(e));\n\n      const files = await Promise.all(children);\n      return this._flattenFiles(files);\n    }\n\n    return [];\n  }\n\n  /**\n   * In Chrome >= 77, the `readEntries` method returns only 100 files.\n   * To achieve a consistent behavior across browsers and not restrict user interaction,\n   * we break the limit by recursively calling `readEntries`.\n   */\n  private async _readDirectoryWithoutLimit(entry: FileSystemDirectoryEntry): Promise<FileSystemEntry[]> {\n    const reader = entry.createReader();\n    let entries: FileSystemEntry[] = [];\n\n    const readEntries = async () => {\n      const children = await this._readDirectoryPromise(reader);\n\n      if (children.length) {\n        entries = entries.concat(children);\n        await readEntries();\n      }\n    };\n\n    await readEntries();\n    return entries;\n  }\n\n  private _isFile = (item: FileSystemEntry): item is FileSystemFileEntry => item.isFile;\n  private _isDirectory = (item: FileSystemEntry): item is FileSystemDirectoryEntry => item.isDirectory;\n  private _flattenFiles = (files: File[][]) => ([] as File[]).concat(...files);\n\n  private _readFilePromise(entry: FileSystemFileEntry) {\n    return new Promise<File>((resolve) => {\n      entry.file((file) => resolve(file));\n    });\n  }\n\n  private _readDirectoryPromise(reader: FileSystemDirectoryReader) {\n    return new Promise<FileSystemEntry[]>((resolve) => {\n      reader.readEntries((entries) => resolve(entries));\n    });\n  }\n}\n","import {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  HostBinding,\n  HostListener,\n  inject,\n  Input,\n  OnDestroy,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { BehaviorSubject, Subject, takeUntil, tap } from 'rxjs';\nimport { FileInputDirective, FileInputValue } from './../file-input';\nimport { getMissingControlError } from './dropzone-errors';\nimport { DropzoneService } from './dropzone.service';\n\n@Component({\n  selector: 'ngx-dropzone',\n  exportAs: 'dropzone',\n  imports: [FileInputDirective],\n  providers: [DropzoneService],\n  template: `<ng-content></ng-content>`,\n  host: {\n    tabindex: '0',\n    '[class.ng-untouched]': '_forwardProp(\"untouched\")',\n    '[class.ng-touched]': '_forwardProp(\"touched\")',\n    '[class.ng-pristine]': '_forwardProp(\"pristine\")',\n    '[class.ng-dirty]': '_forwardProp(\"dirty\")',\n    '[class.ng-valid]': '_forwardProp(\"valid\")',\n    '[class.ng-invalid]': '_forwardProp(\"invalid\")',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DropzoneComponent implements AfterContentInit, OnDestroy {\n  protected _destroy$ = new Subject<void>();\n  protected _changeDetectorRef = inject(ChangeDetectorRef);\n  protected _dropzoneService = inject(DropzoneService);\n\n  @ContentChild(FileInputDirective, { static: true })\n  readonly fileInputDirective: FileInputDirective | null = null;\n\n  readonly dragover$ = new BehaviorSubject<boolean>(false);\n\n  @HostBinding('class.dragover')\n  get isDragover() {\n    return this.dragover$.value;\n  }\n\n  @HostBinding('class.disabled')\n  get disabled(): boolean {\n    return this.fileInputDirective?.disabled || false;\n  }\n\n  @HostBinding('class.focused')\n  get focused(): boolean {\n    return this.fileInputDirective?.focused || this.isDragover;\n  }\n\n  @HostBinding('attr.aria-invalid')\n  get errorState() {\n    return this.fileInputDirective?.errorState || false;\n  }\n\n  @Input()\n  get value() {\n    return this.fileInputDirective?.value || null;\n  }\n  set value(newValue: FileInputValue) {\n    if (this.fileInputDirective) {\n      this.fileInputDirective._fileValue = newValue;\n    }\n  }\n\n  ngAfterContentInit() {\n    if (!this.fileInputDirective) {\n      throw getMissingControlError();\n    }\n\n    // Forward state changes from the child input element.\n    this.fileInputDirective.stateChanges\n      .pipe(\n        tap(() => this._changeDetectorRef.markForCheck()),\n        takeUntil(this._destroy$)\n      )\n      .subscribe();\n  }\n\n  ngOnDestroy(): void {\n    this._destroy$.next();\n    this._destroy$.complete();\n  }\n\n  /** Opens the native OS file picker. */\n  @HostListener('keydown.code.enter')\n  openFilePicker() {\n    if (!this.disabled && this.fileInputDirective) {\n      this.fileInputDirective.openFilePicker();\n    }\n  }\n\n  /** Forwards styling property from control to host element. */\n  _forwardProp(prop: keyof NgControl): boolean {\n    return !!this.fileInputDirective?.ngControl?.[prop];\n  }\n\n  @HostListener('dragover', ['$event'])\n  _onDragOver = (event: DragEvent) => {\n    event?.preventDefault();\n  };\n\n  @HostListener('dragenter', ['$event'])\n  _onDragEnter = (event: DragEvent) => {\n    event?.preventDefault();\n    this.dragover$.next(true);\n\n    // Indicate to the Browser that files will be copied.\n    if (event?.dataTransfer) {\n      event.dataTransfer.dropEffect = 'copy';\n    }\n  };\n\n  @HostListener('dragleave', ['$event'])\n  _onDragLeave = (event: DragEvent) => {\n    event?.preventDefault();\n    this.dragover$.next(false);\n  };\n\n  @HostListener('drop', ['$event'])\n  _onDrop = async (event: DragEvent) => {\n    this._onDragLeave(event);\n\n    const files = await this._dropzoneService.getFiles(event);\n    this.fileInputDirective?.handleFileDrop(files);\n  };\n}\n","/*\n * Public API Surface of cdk\n */\n\nexport * from './lib/coercion';\nexport * from './lib/dropzone';\nexport * from './lib/file-input';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}