{"version":3,"file":"ngx-dropzone-material.mjs","sources":["../../../projects/material/src/lib/mat-dropzone/mat-dropzone.component.ts","../../../projects/material/src/public-api.ts","../../../projects/material/src/ngx-dropzone-material.ts"],"sourcesContent":["import {\n  AfterContentChecked,\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  Component,\n  contentChildren,\n  effect,\n  ElementRef,\n  HostBinding,\n  inject,\n  Injector,\n  Input,\n  OnDestroy,\n  untracked,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { Validators } from '@angular/forms';\nimport { MatChipRow } from '@angular/material/chips';\nimport { MatFormField, MatFormFieldControl } from '@angular/material/form-field';\nimport {\n  AcceptService,\n  coerceBoolean,\n  DropzoneComponent,\n  DropzoneService,\n  FileInputDirective,\n  FileInputValue,\n} from '@ngx-dropzone/cdk';\nimport { Subject } from 'rxjs';\n\n@Component({\n  selector: 'ngx-mat-dropzone',\n  exportAs: 'matDropzone',\n  imports: [MatFormField, MatChipRow, FileInputDirective, DropzoneComponent],\n  providers: [\n    DropzoneService,\n    AcceptService,\n    {\n      provide: MatFormFieldControl,\n      useExisting: MatDropzone,\n    },\n  ],\n  template: `\n    <ng-content select=\"[fileInput]\"></ng-content>\n\n    <div class=\"mat-chip-grid\" [class.filled-and-float]=\"filled && shouldLabelFloat\">\n      <ng-content select=\"mat-chip-row\"></ng-content>\n    </div>\n  `,\n  styles: [\n    `\n      ngx-mat-dropzone {\n        display: flex;\n        position: relative;\n        z-index: 10;\n        min-height: 56px;\n        margin: 0 -16px;\n        color: currentcolor;\n        outline: none;\n        cursor: pointer;\n        font: inherit;\n      }\n\n      .mat-chip-grid {\n        display: flex;\n        flex-flow: wrap;\n        margin: 8px;\n\n        &.filled-and-float {\n          padding-top: 16px;\n        }\n\n        & > .mdc-evolution-chip {\n          margin: 4px 0 4px 8px;\n        }\n      }\n    `,\n  ],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatDropzone\n  extends DropzoneComponent\n  implements MatFormFieldControl<FileInputValue>, AfterContentInit, AfterContentChecked, OnDestroy\n{\n  static nextId = 0;\n\n  private _elementRef = inject(ElementRef);\n  private _formField = inject(MatFormField);\n  private _injector = inject(Injector);\n\n  @HostBinding()\n  id = `mat-dropzone-component-${MatDropzone.nextId++}`;\n\n  controlType = 'ngx-mat-dropzone';\n\n  readonly _matChips = contentChildren(MatChipRow);\n\n  // The file input is never autofilled\n  autofilled = false;\n\n  stateChanges = new Subject<void>();\n\n  /**\n   * The legacy `NgControl` of the reactive or template-driven forms integration.\n   * Remains `null` when the file input is bound to a signal forms field via `[formField]`.\n   */\n  get ngControl() {\n    return this.fileInputDirective?.ngControl ?? null;\n  }\n\n  @Input('aria-describedby')\n  userAriaDescribedBy?: string | undefined;\n\n  @Input()\n  get placeholder(): string {\n    return this._placeholder;\n  }\n  set placeholder(value: string) {\n    this._placeholder = value;\n    this.stateChanges.next();\n  }\n  private _placeholder = '';\n\n  @Input()\n  get required(): boolean {\n    const controlRequired = this.ngControl?.control?.hasValidator(Validators.required);\n    return this._required || controlRequired || this.fileInputDirective?.required() || false;\n  }\n  set required(value: boolean) {\n    this._required = coerceBoolean(value);\n    this.stateChanges.next();\n  }\n  private _required = false;\n\n  get filled() {\n    return this._formField?.appearance === 'fill';\n  }\n\n  get empty() {\n    return this.fileInputDirective?.empty() ?? true;\n  }\n\n  get shouldLabelFloat() {\n    return this._matChips().length > 0;\n  }\n\n  @HostBinding('attr.aria-invalid')\n  get ariaInvalid() {\n    return this.empty && this.required ? null : this.errorState;\n  }\n\n  @HostBinding('attr.aria-required')\n  get ariaRequired() {\n    // Accessibility guidelines say that the attribute should be omitted when false,\n    // so we return null instead of false to remove it from the DOM.\n    return this.required || null;\n  }\n\n  ngAfterContentInit() {\n    super.ngAfterContentInit();\n\n    // The mat-form-field re-renders only in response to the stateChanges\n    // stream of its MatFormFieldControl, so we bridge every signal the\n    // form field depends on into the stream. Created here (instead of the\n    // constructor) because the fileInputDirective is a content child.\n    effect(\n      () => {\n        this.dragover();\n        this._matChips();\n        this.fileInputDirective?.value();\n        this.fileInputDirective?.focused();\n        this.fileInputDirective?.required();\n        this.fileInputDirective?.disabledState();\n        this.fileInputDirective?.errorState();\n\n        untracked(() => this.stateChanges.next());\n      },\n      { injector: this._injector }\n    );\n  }\n\n  ngOnDestroy() {\n    this.stateChanges.complete();\n  }\n\n  ngAfterContentChecked() {\n    // Set the dropzone to cover the whole form field\n    const formField = this._formField?._elementRef?.nativeElement as HTMLElement;\n    this._elementRef.nativeElement.style.width = `${formField?.offsetWidth ?? 0}px`;\n\n    // Set the dropzone height depending on the form field appearance\n    this._elementRef.nativeElement.style.marginTop = `-${this.filled ? 24 : 16}px`;\n    this._elementRef.nativeElement.style.marginBottom = `-${this.filled ? 8 : 16}px`;\n  }\n\n  onContainerClick() {\n    this.openFilePicker();\n  }\n\n  setDescribedByIds(ids: string[]) {\n    if (ids.length) {\n      this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n    } else {\n      this._elementRef.nativeElement.removeAttribute('aria-describedby');\n    }\n  }\n}\n","/*\n * Public API Surface of material\n */\n\nexport * from './lib/mat-dropzone';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;AAgFM,MAAO,WACX,SAAQ,iBAAiB,CAAA;AAGzB,IAAA,OAAO,MAAM,GAAG,CAAC;AAET,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,IAAA,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC;AACjC,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAGpC,IAAA,EAAE,GAAG,CAAA,uBAAA,EAA0B,WAAW,CAAC,MAAM,EAAE,EAAE;IAErD,WAAW,GAAG,kBAAkB;IAEvB,SAAS,GAAG,eAAe,CAAC,UAAU;kFAAC;;IAGhD,UAAU,GAAG,KAAK;AAElB,IAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;AAElC;;;AAGG;AACH,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,SAAS,IAAI,IAAI;IACnD;AAGA,IAAA,mBAAmB;AAEnB,IAAA,IACI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;IACA,IAAI,WAAW,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;IACQ,YAAY,GAAG,EAAE;AAEzB,IAAA,IACI,QAAQ,GAAA;AACV,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC;AAClF,QAAA,OAAO,IAAI,CAAC,SAAS,IAAI,eAAe,IAAI,IAAI,CAAC,kBAAkB,EAAE,QAAQ,EAAE,IAAI,KAAK;IAC1F;IACA,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;IACQ,SAAS,GAAG,KAAK;AAEzB,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,UAAU,KAAK,MAAM;IAC/C;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE,IAAI,IAAI;IACjD;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC;IACpC;AAEA,IAAA,IACI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU;IAC7D;AAEA,IAAA,IACI,YAAY,GAAA;;;AAGd,QAAA,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI;IAC9B;IAEA,kBAAkB,GAAA;QAChB,KAAK,CAAC,kBAAkB,EAAE;;;;;QAM1B,MAAM,CACJ,MAAK;YACH,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE;AAChC,YAAA,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE;AAClC,YAAA,IAAI,CAAC,kBAAkB,EAAE,QAAQ,EAAE;AACnC,YAAA,IAAI,CAAC,kBAAkB,EAAE,aAAa,EAAE;AACxC,YAAA,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE;YAErC,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAC3C,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAC7B;IACH;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;IAC9B;IAEA,qBAAqB,GAAA;;QAEnB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,aAA4B;AAC5E,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,SAAS,EAAE,WAAW,IAAI,CAAC,IAAI;;QAG/E,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,CAAA,EAAA,CAAI;QAC9E,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,CAAA,EAAA,CAAI;IAClF;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,cAAc,EAAE;IACvB;AAEA,IAAA,iBAAiB,CAAC,GAAa,EAAA;AAC7B,QAAA,IAAI,GAAG,CAAC,MAAM,EAAE;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChF;aAAO;YACL,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,eAAe,CAAC,kBAAkB,CAAC;QACpE;IACF;uGA7HW,WAAW,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,CAAA,kBAAA,EAAA,qBAAA,CAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,SAAA,EA/CX;YACT,eAAe;YACf,aAAa;AACb,YAAA;AACE,gBAAA,OAAO,EAAE,mBAAmB;AAC5B,gBAAA,WAAW,EAAE,WAAW;AACzB,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAuDoC,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtDrC;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,yTAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAiCU,WAAW,EAAA,UAAA,EAAA,CAAA;kBAnDvB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,QAAA,EAClB,aAAa,EAAA,OAAA,EACd,CAAC,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,EAAA,SAAA,EAC/D;wBACT,eAAe;wBACf,aAAa;AACb,wBAAA;AACE,4BAAA,OAAO,EAAE,mBAAmB;AAC5B,4BAAA,WAAW,EAAA,WAAa;AACzB,yBAAA;qBACF,EAAA,QAAA,EACS;;;;;;AAMT,EAAA,CAAA,EAAA,aAAA,EA8Bc,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,yTAAA,CAAA,EAAA;;sBAY9C;mFAKoC,UAAU,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,mBAAA,EAAA,CAAA;sBAe9C,KAAK;uBAAC,kBAAkB;;sBAGxB;;sBAUA;;sBAuBA,WAAW;uBAAC,mBAAmB;;sBAK/B,WAAW;uBAAC,oBAAoB;;;ACvJnC;;AAEG;;ACFH;;AAEG;;;;"}