{"version":3,"file":"ng-zorro-antd-upload.mjs","sources":["../../components/upload/upload-btn.component.ts","../../components/upload/upload-btn.component.html","../../components/upload/upload-list.component.ts","../../components/upload/upload-list.component.html","../../components/upload/upload.component.ts","../../components/upload/upload.component.html","../../components/upload/upload.module.ts","../../components/upload/public-api.ts","../../components/upload/ng-zorro-antd-upload.ts"],"sourcesContent":["/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { ENTER } from '@angular/cdk/keycodes';\nimport { HttpClient, HttpEvent, HttpEventType, HttpHeaders, HttpRequest, HttpResponse } from '@angular/common/http';\nimport {\n  Component,\n  ElementRef,\n  Input,\n  NgZone,\n  OnInit,\n  OnDestroy,\n  Optional,\n  ViewChild,\n  ViewEncapsulation\n} from '@angular/core';\nimport { fromEvent, Observable, of, Subject, Subscription } from 'rxjs';\nimport { map, switchMap, takeUntil, tap } from 'rxjs/operators';\n\nimport { warn } from 'ng-zorro-antd/core/logger';\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { NzUploadFile, NzUploadXHRArgs, ZipButtonOptions } from './interface';\n\n@Component({\n  selector: '[nz-upload-btn]',\n  exportAs: 'nzUploadBtn',\n  templateUrl: './upload-btn.component.html',\n  host: {\n    class: 'ant-upload',\n    '[attr.tabindex]': '\"0\"',\n    '[attr.role]': '\"button\"',\n    '[class.ant-upload-disabled]': 'options.disabled',\n    '(drop)': 'onFileDrop($event)',\n    '(dragover)': 'onFileDrop($event)'\n  },\n  preserveWhitespaces: false,\n  encapsulation: ViewEncapsulation.None\n})\nexport class NzUploadBtnComponent implements OnInit, OnDestroy {\n  reqs: { [key: string]: Subscription } = {};\n  private destroy = false;\n  private destroy$ = new Subject<void>();\n  @ViewChild('file', { static: true }) file!: ElementRef<HTMLInputElement>;\n  @Input() options!: ZipButtonOptions;\n\n  onClick(): void {\n    if (this.options.disabled || !this.options.openFileDialogOnClick) {\n      return;\n    }\n    this.file.nativeElement.click();\n  }\n\n  // skip safari bug\n  onFileDrop(e: DragEvent): void {\n    if (this.options.disabled || e.type === 'dragover') {\n      e.preventDefault();\n      return;\n    }\n    if (this.options.directory) {\n      this.traverseFileTree(e.dataTransfer!.items);\n    } else {\n      const files: File[] = Array.prototype.slice\n        .call(e.dataTransfer!.files)\n        .filter((file: File) => this.attrAccept(file, this.options.accept));\n      if (files.length) {\n        this.uploadFiles(files);\n      }\n    }\n\n    e.preventDefault();\n  }\n\n  onChange(e: Event): void {\n    if (this.options.disabled) {\n      return;\n    }\n    const hie = e.target as HTMLInputElement;\n    this.uploadFiles(hie.files!);\n    hie.value = '';\n  }\n\n  private traverseFileTree(files: DataTransferItemList): void {\n    const _traverseFileTree = (item: NzSafeAny, path: string): void => {\n      if (item.isFile) {\n        item.file((file: File) => {\n          if (this.attrAccept(file, this.options.accept)) {\n            this.uploadFiles([file]);\n          }\n        });\n      } else if (item.isDirectory) {\n        const dirReader = item.createReader();\n\n        dirReader.readEntries((entries: NzSafeAny) => {\n          for (const entrieItem of entries) {\n            _traverseFileTree(entrieItem, `${path}${item.name}/`);\n          }\n        });\n      }\n    };\n\n    for (const file of files as NzSafeAny) {\n      _traverseFileTree(file.webkitGetAsEntry(), '');\n    }\n  }\n\n  private attrAccept(file: File, acceptedFiles?: string | string[]): boolean {\n    if (file && acceptedFiles) {\n      const acceptedFilesArray = Array.isArray(acceptedFiles) ? acceptedFiles : acceptedFiles.split(',');\n      const fileName = `${file.name}`;\n      const mimeType = `${file.type}`;\n      const baseMimeType = mimeType.replace(/\\/.*$/, '');\n\n      return acceptedFilesArray.some(type => {\n        const validType = type.trim();\n        if (validType.charAt(0) === '.') {\n          return (\n            fileName\n              .toLowerCase()\n              .indexOf(validType.toLowerCase(), fileName.toLowerCase().length - validType.toLowerCase().length) !== -1\n          );\n        } else if (/\\/\\*$/.test(validType)) {\n          // This is something like a image/* mime type\n          return baseMimeType === validType.replace(/\\/.*$/, '');\n        }\n        return mimeType === validType;\n      });\n    }\n    return true;\n  }\n\n  private attachUid(file: NzUploadFile): NzUploadFile {\n    if (!file.uid) {\n      file.uid = Math.random().toString(36).substring(2);\n    }\n    return file;\n  }\n\n  uploadFiles(fileList: FileList | File[]): void {\n    let filters$: Observable<NzUploadFile[]> = of(Array.prototype.slice.call(fileList));\n    if (this.options.filters) {\n      this.options.filters.forEach(f => {\n        filters$ = filters$.pipe(\n          switchMap(list => {\n            const fnRes = f.fn(list);\n            return fnRes instanceof Observable ? fnRes : of(fnRes);\n          })\n        );\n      });\n    }\n    filters$.subscribe(\n      list => {\n        list.forEach((file: NzUploadFile) => {\n          this.attachUid(file);\n          this.upload(file, list);\n        });\n      },\n      e => {\n        warn(`Unhandled upload filter error`, e);\n      }\n    );\n  }\n\n  private upload(file: NzUploadFile, fileList: NzUploadFile[]): void {\n    if (!this.options.beforeUpload) {\n      return this.post(file);\n    }\n    const before = this.options.beforeUpload(file, fileList);\n    if (before instanceof Observable) {\n      before.subscribe(\n        (processedFile: NzUploadFile) => {\n          const processedFileType = Object.prototype.toString.call(processedFile);\n          if (processedFileType === '[object File]' || processedFileType === '[object Blob]') {\n            this.attachUid(processedFile);\n            this.post(processedFile);\n          } else if (typeof processedFile === 'boolean' && processedFile !== false) {\n            this.post(file);\n          }\n        },\n        e => {\n          warn(`Unhandled upload beforeUpload error`, e);\n        }\n      );\n    } else if (before !== false) {\n      return this.post(file);\n    }\n  }\n\n  private post(file: NzUploadFile): void {\n    if (this.destroy) {\n      return;\n    }\n    let process$: Observable<string | Blob | File | NzUploadFile> = of(file);\n    let transformedFile: string | Blob | File | NzUploadFile | undefined;\n    const opt = this.options;\n    const { uid } = file;\n    const { action, data, headers, transformFile } = opt;\n\n    const args: NzUploadXHRArgs = {\n      action: typeof action === 'string' ? action : '',\n      name: opt.name,\n      headers,\n      file,\n      postFile: file,\n      data,\n      withCredentials: opt.withCredentials,\n      onProgress: opt.onProgress\n        ? e => {\n            opt.onProgress!(e, file);\n          }\n        : undefined,\n      onSuccess: (ret, xhr) => {\n        this.clean(uid);\n        opt.onSuccess!(ret, file, xhr);\n      },\n      onError: xhr => {\n        this.clean(uid);\n        opt.onError!(xhr, file);\n      }\n    };\n\n    if (typeof action === 'function') {\n      const actionResult = (action as (file: NzUploadFile) => string | Observable<string>)(file);\n      if (actionResult instanceof Observable) {\n        process$ = process$.pipe(\n          switchMap(() => actionResult),\n          map(res => {\n            args.action = res;\n            return file;\n          })\n        );\n      } else {\n        args.action = actionResult;\n      }\n    }\n\n    if (typeof transformFile === 'function') {\n      const transformResult = transformFile(file);\n      process$ = process$.pipe(\n        switchMap(() => (transformResult instanceof Observable ? transformResult : of(transformResult))),\n        tap(newFile => (transformedFile = newFile))\n      );\n    }\n\n    if (typeof data === 'function') {\n      const dataResult = (data as (file: NzUploadFile) => {} | Observable<{}>)(file);\n      if (dataResult instanceof Observable) {\n        process$ = process$.pipe(\n          switchMap(() => dataResult),\n          map(res => {\n            args.data = res;\n            return transformedFile ?? file;\n          })\n        );\n      } else {\n        args.data = dataResult;\n      }\n    }\n\n    if (typeof headers === 'function') {\n      const headersResult = (headers as (file: NzUploadFile) => {} | Observable<{}>)(file);\n      if (headersResult instanceof Observable) {\n        process$ = process$.pipe(\n          switchMap(() => headersResult),\n          map(res => {\n            args.headers = res;\n            return transformedFile ?? file;\n          })\n        );\n      } else {\n        args.headers = headersResult;\n      }\n    }\n\n    process$.subscribe(newFile => {\n      args.postFile = newFile;\n      const req$ = (opt.customRequest || this.xhr).call(this, args);\n      if (!(req$ instanceof Subscription)) {\n        warn(`Must return Subscription type in '[nzCustomRequest]' property`);\n      }\n      this.reqs[uid] = req$;\n      opt.onStart!(file);\n    });\n  }\n\n  private xhr(args: NzUploadXHRArgs): Subscription {\n    const formData = new FormData();\n\n    if (args.data) {\n      Object.keys(args.data).map(key => {\n        formData.append(key, args.data![key]);\n      });\n    }\n\n    formData.append(args.name!, args.postFile as NzSafeAny);\n\n    if (!args.headers) {\n      args.headers = {};\n    }\n    if (args.headers['X-Requested-With'] !== null) {\n      args.headers['X-Requested-With'] = `XMLHttpRequest`;\n    } else {\n      delete args.headers['X-Requested-With'];\n    }\n    const req = new HttpRequest('POST', args.action!, formData, {\n      reportProgress: true,\n      withCredentials: args.withCredentials,\n      headers: new HttpHeaders(args.headers)\n    });\n    return this.http.request(req).subscribe(\n      (event: HttpEvent<NzSafeAny>) => {\n        if (event.type === HttpEventType.UploadProgress) {\n          if (event.total! > 0) {\n            (event as NzSafeAny).percent = (event.loaded / event.total!) * 100;\n          }\n          args.onProgress!(event, args.file);\n        } else if (event instanceof HttpResponse) {\n          args.onSuccess!(event.body, args.file, event);\n        }\n      },\n      err => {\n        this.abort(args.file);\n        args.onError!(err, args.file);\n      }\n    );\n  }\n\n  private clean(uid: string): void {\n    const req$ = this.reqs[uid];\n    if (req$ instanceof Subscription) {\n      req$.unsubscribe();\n    }\n    delete this.reqs[uid];\n  }\n\n  abort(file?: NzUploadFile): void {\n    if (file) {\n      this.clean(file && file.uid);\n    } else {\n      Object.keys(this.reqs).forEach(uid => this.clean(uid));\n    }\n  }\n\n  constructor(private ngZone: NgZone, @Optional() private http: HttpClient, private elementRef: ElementRef) {\n    if (!http) {\n      throw new Error(`Not found 'HttpClient', You can import 'HttpClientModule' in your root module.`);\n    }\n  }\n\n  ngOnInit(): void {\n    // Caretaker note: `input[type=file].click()` will open a native OS file picker,\n    // it doesn't require Angular to run `ApplicationRef.tick()`.\n    this.ngZone.runOutsideAngular(() => {\n      fromEvent(this.elementRef.nativeElement, 'click')\n        .pipe(takeUntil(this.destroy$))\n        .subscribe(() => this.onClick());\n\n      fromEvent<KeyboardEvent>(this.elementRef.nativeElement, 'keydown')\n        .pipe(takeUntil(this.destroy$))\n        .subscribe(event => {\n          if (this.options.disabled) {\n            return;\n          }\n          if (event.key === 'Enter' || event.keyCode === ENTER) {\n            this.onClick();\n          }\n        });\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.destroy = true;\n    this.destroy$.next();\n    this.abort();\n  }\n}\n","<input\n  type=\"file\"\n  #file\n  (change)=\"onChange($event)\"\n  [attr.accept]=\"options.accept\"\n  [attr.directory]=\"options.directory ? 'directory' : null\"\n  [attr.webkitdirectory]=\"options.directory ? 'webkitdirectory' : null\"\n  [multiple]=\"options.multiple\"\n  style=\"display: none\"\n/>\n<ng-content></ng-content>\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport { Direction } from '@angular/cdk/bidi';\nimport { Platform } from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Inject,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  ViewEncapsulation\n} from '@angular/core';\nimport { fromEvent, Observable, of, Subject } from 'rxjs';\nimport { takeUntil, map } from 'rxjs/operators';\n\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { NzIconRenderTemplate, NzShowUploadList, NzUploadFile, NzUploadListType } from './interface';\n\nconst isImageFileType = (type: string): boolean => !!type && type.indexOf('image/') === 0;\n\nconst MEASURE_SIZE = 200;\n\ntype UploadListIconType = '' | 'uploading' | 'thumbnail';\n\ninterface UploadListFile extends NzUploadFile {\n  isImageUrl?: boolean;\n  isUploading?: boolean;\n  iconType?: UploadListIconType;\n  showDownload?: boolean;\n}\n\n@Component({\n  selector: 'nz-upload-list',\n  exportAs: 'nzUploadList',\n  templateUrl: './upload-list.component.html',\n  animations: [\n    trigger('itemState', [\n      transition(':enter', [\n        style({ height: '0', width: '0', opacity: 0 }),\n        animate(150, style({ height: '*', width: '*', opacity: 1 }))\n      ]),\n      transition(':leave', [animate(150, style({ height: '0', width: '0', opacity: 0 }))])\n    ])\n  ],\n  host: {\n    class: 'ant-upload-list',\n    '[class.ant-upload-list-rtl]': `dir === 'rtl'`,\n    '[class.ant-upload-list-text]': `listType === 'text'`,\n    '[class.ant-upload-list-picture]': `listType === 'picture'`,\n    '[class.ant-upload-list-picture-card]': `listType === 'picture-card'`\n  },\n  preserveWhitespaces: false,\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NzUploadListComponent implements OnChanges, OnDestroy {\n  list: UploadListFile[] = [];\n\n  private get showPic(): boolean {\n    return this.listType === 'picture' || this.listType === 'picture-card';\n  }\n\n  @Input() locale: NzSafeAny = {};\n  @Input() listType!: NzUploadListType;\n  @Input()\n  set items(list: NzUploadFile[]) {\n    this.list = list;\n  }\n  @Input() icons!: NzShowUploadList;\n  @Input() onPreview?: (file: NzUploadFile) => void;\n  @Input() onRemove!: (file: NzUploadFile) => void;\n  @Input() onDownload?: (file: NzUploadFile) => void;\n  @Input() previewFile?: (file: NzUploadFile) => Observable<string>;\n  @Input() previewIsImage?: (file: NzUploadFile) => boolean;\n  @Input() iconRender: NzIconRenderTemplate | null = null;\n  @Input() dir: Direction = 'ltr';\n\n  private destroy$ = new Subject<void>();\n\n  private genErr(file: NzUploadFile): string {\n    if (file.response && typeof file.response === 'string') {\n      return file.response;\n    }\n    return (file.error && file.error.statusText) || this.locale.uploadError;\n  }\n\n  private extname(url: string): string {\n    const temp = url.split('/');\n    const filename = temp[temp.length - 1];\n    const filenameWithoutSuffix = filename.split(/#|\\?/)[0];\n    return (/\\.[^./\\\\]*$/.exec(filenameWithoutSuffix) || [''])[0];\n  }\n\n  isImageUrl(file: NzUploadFile): boolean {\n    if (isImageFileType(file.type!)) {\n      return true;\n    }\n    const url: string = (file.thumbUrl || file.url || '') as string;\n    if (!url) {\n      return false;\n    }\n    const extension = this.extname(url);\n    if (/^data:image\\//.test(url) || /(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg)$/i.test(extension)) {\n      return true;\n    } else if (/^data:/.test(url)) {\n      // other file types of base64\n      return false;\n    } else if (extension) {\n      // other file types which have extension\n      return false;\n    }\n    return true;\n  }\n\n  private getIconType(file: UploadListFile): UploadListIconType {\n    if (!this.showPic) {\n      return '';\n    }\n    if (file.isUploading || (!file.thumbUrl && !file.url)) {\n      return 'uploading';\n    } else {\n      return 'thumbnail';\n    }\n  }\n\n  private previewImage(file: File | Blob): Observable<string> {\n    if (!isImageFileType(file.type) || !this.platform.isBrowser) {\n      return of('');\n    }\n\n    const canvas = this.doc.createElement('canvas');\n    canvas.width = MEASURE_SIZE;\n    canvas.height = MEASURE_SIZE;\n    canvas.style.cssText = `position: fixed; left: 0; top: 0; width: ${MEASURE_SIZE}px; height: ${MEASURE_SIZE}px; z-index: 9999; display: none;`;\n    this.doc.body.appendChild(canvas);\n    const ctx = canvas.getContext('2d');\n    const img = new Image();\n    const objectUrl = URL.createObjectURL(file);\n    img.src = objectUrl;\n    return fromEvent(img, 'load').pipe(\n      map(() => {\n        const { width, height } = img;\n\n        let drawWidth = MEASURE_SIZE;\n        let drawHeight = MEASURE_SIZE;\n        let offsetX = 0;\n        let offsetY = 0;\n\n        if (width < height) {\n          drawHeight = height * (MEASURE_SIZE / width);\n          offsetY = -(drawHeight - drawWidth) / 2;\n        } else {\n          drawWidth = width * (MEASURE_SIZE / height);\n          offsetX = -(drawWidth - drawHeight) / 2;\n        }\n\n        try {\n          ctx!.drawImage(img, offsetX, offsetY, drawWidth, drawHeight);\n        } catch {}\n        const dataURL = canvas.toDataURL();\n        this.doc.body.removeChild(canvas);\n\n        URL.revokeObjectURL(objectUrl);\n        return dataURL;\n      })\n    );\n  }\n\n  private genThumb(): void {\n    if (!this.platform.isBrowser) {\n      return;\n    }\n\n    const win = window as NzSafeAny;\n    if (\n      !this.showPic ||\n      typeof document === 'undefined' ||\n      typeof win === 'undefined' ||\n      !win.FileReader ||\n      !win.File\n    ) {\n      return;\n    }\n    this.list\n      .filter(file => file.originFileObj instanceof File && file.thumbUrl === undefined)\n      .forEach(file => {\n        file.thumbUrl = '';\n        // Caretaker note: we shouldn't use promises here since they're not cancellable.\n        // A promise microtask can be resolved after the view is destroyed. Thus running `detectChanges()`\n        // will cause a runtime exception (`detectChanges()` cannot be run on destroyed views).\n        const dataUrl$ = (this.previewFile ? this.previewFile(file) : this.previewImage(file.originFileObj!)).pipe(\n          takeUntil(this.destroy$)\n        );\n        this.ngZone.runOutsideAngular(() => {\n          dataUrl$.subscribe(dataUrl => {\n            this.ngZone.run(() => {\n              file.thumbUrl = dataUrl;\n              this.detectChanges();\n            });\n          });\n        });\n      });\n  }\n\n  private showDownload(file: NzUploadFile): boolean {\n    return !!(this.icons.showDownloadIcon && file.status === 'done');\n  }\n\n  private fixData(): void {\n    this.list.forEach(file => {\n      file.isUploading = file.status === 'uploading';\n      file.message = this.genErr(file);\n      file.linkProps = typeof file.linkProps === 'string' ? JSON.parse(file.linkProps) : file.linkProps;\n      file.isImageUrl = this.previewIsImage ? this.previewIsImage(file) : this.isImageUrl(file);\n      file.iconType = this.getIconType(file);\n      file.showDownload = this.showDownload(file);\n    });\n  }\n\n  handlePreview(file: NzUploadFile, e: Event): void {\n    if (!this.onPreview) {\n      return;\n    }\n\n    e.preventDefault();\n    return this.onPreview(file);\n  }\n\n  handleRemove(file: NzUploadFile, e: Event): void {\n    e.preventDefault();\n    if (this.onRemove) {\n      this.onRemove(file);\n    }\n    return;\n  }\n\n  handleDownload(file: NzUploadFile): void {\n    if (typeof this.onDownload === 'function') {\n      this.onDownload(file);\n    } else if (file.url) {\n      window.open(file.url);\n    }\n  }\n\n  // #endregion\n\n  constructor(\n    private cdr: ChangeDetectorRef,\n    @Inject(DOCUMENT) private doc: NzSafeAny,\n    private ngZone: NgZone,\n    private platform: Platform\n  ) {}\n\n  detectChanges(): void {\n    this.fixData();\n    this.cdr.detectChanges();\n  }\n\n  ngOnChanges(): void {\n    this.fixData();\n    this.genThumb();\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n  }\n}\n","<div *ngFor=\"let file of list\" class=\"ant-upload-list-{{ listType }}-container\">\n  <div\n    class=\"ant-upload-list-item ant-upload-list-item-{{ file.status }} ant-upload-list-item-list-type-{{ listType }}\"\n    [attr.data-key]=\"file.key\"\n    @itemState\n    nz-tooltip\n    [nzTooltipTitle]=\"file.status === 'error' ? file.message : null\"\n  >\n    <ng-template #icon>\n      <ng-container [ngSwitch]=\"file.iconType\">\n        <div\n          *ngSwitchCase=\"'uploading'\"\n          class=\"ant-upload-list-item-thumbnail\"\n          [class.ant-upload-list-item-file]=\"!file.isUploading\"\n        >\n          <ng-template [ngTemplateOutlet]=\"iconNode\" [ngTemplateOutletContext]=\"{ $implicit: file }\"></ng-template>\n        </div>\n        <a\n          *ngSwitchCase=\"'thumbnail'\"\n          class=\"ant-upload-list-item-thumbnail\"\n          [class.ant-upload-list-item-file]=\"!file.isImageUrl\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          [href]=\"file.url || file.thumbUrl\"\n          (click)=\"handlePreview(file, $event)\"\n        >\n          <img\n            *ngIf=\"file.isImageUrl; else noImageThumbTpl\"\n            class=\"ant-upload-list-item-image\"\n            [src]=\"file.thumbUrl || file.url\"\n            [attr.alt]=\"file.name\"\n          />\n        </a>\n        <div *ngSwitchDefault class=\"ant-upload-text-icon\">\n          <ng-template [ngTemplateOutlet]=\"iconNode\" [ngTemplateOutletContext]=\"{ $implicit: file }\"></ng-template>\n        </div>\n      </ng-container>\n      <ng-template #noImageThumbTpl>\n        <ng-template [ngTemplateOutlet]=\"iconNode\" [ngTemplateOutletContext]=\"{ $implicit: file }\"></ng-template>\n      </ng-template>\n    </ng-template>\n    <ng-template #iconNode let-file>\n      <ng-container *ngIf=\"!iconRender; else customIconRender\">\n        <ng-container [ngSwitch]=\"listType\">\n          <ng-container *ngSwitchCase=\"'picture'\">\n            <ng-container *ngIf=\"file.isUploading; else iconNodeFileIcon\">\n              <i nz-icon nzType=\"loading\"></i>\n            </ng-container>\n          </ng-container>\n          <ng-container *ngSwitchCase=\"'picture-card'\">\n            <ng-container *ngIf=\"file.isUploading; else iconNodeFileIcon\">\n              {{ locale.uploading }}\n            </ng-container>\n          </ng-container>\n          <i *ngSwitchDefault nz-icon [nzType]=\"file.isUploading ? 'loading' : 'paper-clip'\"></i>\n        </ng-container>\n      </ng-container>\n      <ng-template\n        #customIconRender\n        [ngTemplateOutlet]=\"iconRender\"\n        [ngTemplateOutletContext]=\"{ $implicit: file }\"\n      ></ng-template>\n      <ng-template #iconNodeFileIcon>\n        <i nz-icon [nzType]=\"file.isImageUrl ? 'picture' : 'file'\" nzTheme=\"twotone\"></i>\n      </ng-template>\n    </ng-template>\n    <ng-template #removeIcon>\n      <button\n        *ngIf=\"icons.showRemoveIcon\"\n        type=\"button\"\n        nz-button\n        nzType=\"text\"\n        nzSize=\"small\"\n        (click)=\"handleRemove(file, $event)\"\n        [attr.title]=\"locale.removeFile\"\n        class=\"ant-upload-list-item-card-actions-btn\"\n      >\n        <i nz-icon nzType=\"delete\"></i>\n      </button>\n    </ng-template>\n    <ng-template #downloadIcon>\n      <button\n        *ngIf=\"file.showDownload\"\n        type=\"button\"\n        nz-button\n        nzType=\"text\"\n        nzSize=\"small\"\n        (click)=\"handleDownload(file)\"\n        [attr.title]=\"locale.downloadFile\"\n        class=\"ant-upload-list-item-card-actions-btn\"\n      >\n        <i nz-icon nzType=\"download\"></i>\n      </button>\n    </ng-template>\n    <ng-template #downloadOrDelete>\n      <span\n        *ngIf=\"listType !== 'picture-card'\"\n        class=\"ant-upload-list-item-card-actions {{ listType === 'picture' ? 'picture' : '' }}\"\n      >\n        <ng-template [ngTemplateOutlet]=\"downloadIcon\"></ng-template>\n        <ng-template [ngTemplateOutlet]=\"removeIcon\"></ng-template>\n      </span>\n    </ng-template>\n    <ng-template #preview>\n      <a\n        *ngIf=\"file.url\"\n        target=\"_blank\"\n        rel=\"noopener noreferrer\"\n        class=\"ant-upload-list-item-name\"\n        [attr.title]=\"file.name\"\n        [href]=\"file.url\"\n        [attr.download]=\"file.linkProps && file.linkProps.download\"\n        (click)=\"handlePreview(file, $event)\"\n      >\n        {{ file.name }}\n      </a>\n      <span\n        *ngIf=\"!file.url\"\n        class=\"ant-upload-list-item-name\"\n        [attr.title]=\"file.name\"\n        (click)=\"handlePreview(file, $event)\"\n      >\n        {{ file.name }}\n      </span>\n      <ng-template [ngTemplateOutlet]=\"downloadOrDelete\"></ng-template>\n    </ng-template>\n    <div class=\"ant-upload-list-item-info\">\n      <span class=\"ant-upload-span\">\n        <ng-template [ngTemplateOutlet]=\"icon\"></ng-template>\n        <ng-template [ngTemplateOutlet]=\"preview\"></ng-template>\n      </span>\n    </div>\n    <span *ngIf=\"listType === 'picture-card' && !file.isUploading\" class=\"ant-upload-list-item-actions\">\n      <a\n        *ngIf=\"icons.showPreviewIcon\"\n        [href]=\"file.url || file.thumbUrl\"\n        target=\"_blank\"\n        rel=\"noopener noreferrer\"\n        [attr.title]=\"locale.previewFile\"\n        [ngStyle]=\"!(file.url || file.thumbUrl) ? { opacity: 0.5, 'pointer-events': 'none' } : null\"\n        (click)=\"handlePreview(file, $event)\"\n      >\n        <i nz-icon nzType=\"eye\"></i>\n      </a>\n      <ng-container *ngIf=\"file.status === 'done'\">\n        <ng-template [ngTemplateOutlet]=\"downloadIcon\"></ng-template>\n      </ng-container>\n      <ng-template [ngTemplateOutlet]=\"removeIcon\"></ng-template>\n    </span>\n    <div *ngIf=\"file.isUploading\" class=\"ant-upload-list-item-progress\">\n      <nz-progress [nzPercent]=\"file.percent!\" nzType=\"line\" [nzShowInfo]=\"false\" [nzStrokeWidth]=\"2\"></nz-progress>\n    </div>\n  </div>\n</div>\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { Direction, Directionality } from '@angular/cdk/bidi';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Output,\n  TemplateRef,\n  ViewChild,\n  ViewEncapsulation\n} from '@angular/core';\nimport { Observable, of, Subject, Subscription } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { BooleanInput, NumberInput, NzSafeAny } from 'ng-zorro-antd/core/types';\nimport { InputBoolean, InputNumber, toBoolean } from 'ng-zorro-antd/core/util';\nimport { NzI18nService, NzUploadI18nInterface } from 'ng-zorro-antd/i18n';\n\nimport {\n  NzIconRenderTemplate,\n  NzShowUploadList,\n  NzUploadChangeParam,\n  NzUploadFile,\n  NzUploadListType,\n  NzUploadTransformFileType,\n  NzUploadType,\n  NzUploadXHRArgs,\n  UploadFilter,\n  ZipButtonOptions\n} from './interface';\nimport { NzUploadBtnComponent } from './upload-btn.component';\nimport { NzUploadListComponent } from './upload-list.component';\n\n@Component({\n  selector: 'nz-upload',\n  exportAs: 'nzUpload',\n  templateUrl: './upload.component.html',\n  preserveWhitespaces: false,\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '[class.ant-upload-picture-card-wrapper]': 'nzListType === \"picture-card\"'\n  }\n})\nexport class NzUploadComponent implements OnInit, OnChanges, OnDestroy {\n  static ngAcceptInputType_nzLimit: NumberInput;\n  static ngAcceptInputType_nzSize: NumberInput;\n  static ngAcceptInputType_nzDirectory: BooleanInput;\n  static ngAcceptInputType_nzOpenFileDialogOnClick: BooleanInput;\n  static ngAcceptInputType_nzDisabled: BooleanInput;\n  static ngAcceptInputType_nzMultiple: BooleanInput;\n  static ngAcceptInputType_nzShowUploadList: BooleanInput | NzShowUploadList;\n  static ngAcceptInputType_nzShowButton: BooleanInput;\n  static ngAcceptInputType_nzWithCredentials: BooleanInput;\n\n  private destroy$ = new Subject<void>();\n  @ViewChild('uploadComp', { static: false }) uploadComp!: NzUploadBtnComponent;\n  @ViewChild('listComp', { static: false }) listComp!: NzUploadListComponent;\n\n  locale!: NzUploadI18nInterface;\n  dir: Direction = 'ltr';\n\n  // #region fields\n\n  @Input() nzType: NzUploadType = 'select';\n  @Input() @InputNumber() nzLimit = 0;\n  @Input() @InputNumber() nzSize = 0;\n\n  @Input() nzFileType?: string;\n  @Input() nzAccept?: string | string[];\n  @Input() nzAction?: string | ((file: NzUploadFile) => string | Observable<string>);\n  @Input() @InputBoolean() nzDirectory = false;\n  @Input() @InputBoolean() nzOpenFileDialogOnClick = true;\n  @Input() nzBeforeUpload?: (file: NzUploadFile, fileList: NzUploadFile[]) => boolean | Observable<boolean>;\n  @Input() nzCustomRequest?: (item: NzUploadXHRArgs) => Subscription;\n  @Input() nzData?: {} | ((file: NzUploadFile) => {} | Observable<{}>);\n  @Input() nzFilter: UploadFilter[] = [];\n  @Input() nzFileList: NzUploadFile[] = [];\n  @Input() @InputBoolean() nzDisabled = false;\n  @Input() nzHeaders?: {} | ((file: NzUploadFile) => {} | Observable<{}>);\n  @Input() nzListType: NzUploadListType = 'text';\n  @Input() @InputBoolean() nzMultiple = false;\n  @Input() nzName = 'file';\n\n  private _showUploadList: boolean | NzShowUploadList = true;\n\n  @Input()\n  set nzShowUploadList(value: boolean | NzShowUploadList) {\n    this._showUploadList = typeof value === 'boolean' ? toBoolean(value) : value;\n  }\n\n  get nzShowUploadList(): boolean | NzShowUploadList {\n    return this._showUploadList;\n  }\n\n  @Input() @InputBoolean() nzShowButton = true;\n  @Input() @InputBoolean() nzWithCredentials = false;\n\n  @Input() nzRemove?: (file: NzUploadFile) => boolean | Observable<boolean>;\n  @Input() nzPreview?: (file: NzUploadFile) => void;\n  @Input() nzPreviewFile?: (file: NzUploadFile) => Observable<string>;\n  @Input() nzPreviewIsImage?: (file: NzUploadFile) => boolean;\n  @Input() nzTransformFile?: (file: NzUploadFile) => NzUploadTransformFileType;\n  @Input() nzDownload?: (file: NzUploadFile) => void;\n  @Input() nzIconRender: NzIconRenderTemplate | null = null;\n  @Input() nzFileListRender: TemplateRef<void> | null = null;\n\n  @Output() readonly nzChange: EventEmitter<NzUploadChangeParam> = new EventEmitter<NzUploadChangeParam>();\n  @Output() readonly nzFileListChange: EventEmitter<NzUploadFile[]> = new EventEmitter<NzUploadFile[]>();\n\n  _btnOptions?: ZipButtonOptions;\n\n  private zipOptions(): this {\n    if (typeof this.nzShowUploadList === 'boolean' && this.nzShowUploadList) {\n      this.nzShowUploadList = {\n        showPreviewIcon: true,\n        showRemoveIcon: true,\n        showDownloadIcon: true\n      };\n    }\n    // filters\n    const filters: UploadFilter[] = this.nzFilter.slice();\n    if (this.nzMultiple && this.nzLimit > 0 && filters.findIndex(w => w.name === 'limit') === -1) {\n      filters.push({\n        name: 'limit',\n        fn: (fileList: NzUploadFile[]) => fileList.slice(-this.nzLimit)\n      });\n    }\n    if (this.nzSize > 0 && filters.findIndex(w => w.name === 'size') === -1) {\n      filters.push({\n        name: 'size',\n        fn: (fileList: NzUploadFile[]) => fileList.filter(w => w.size! / 1024 <= this.nzSize)\n      });\n    }\n    if (this.nzFileType && this.nzFileType.length > 0 && filters.findIndex(w => w.name === 'type') === -1) {\n      const types = this.nzFileType.split(',');\n      filters.push({\n        name: 'type',\n        fn: (fileList: NzUploadFile[]) => fileList.filter(w => ~types.indexOf(w.type!))\n      });\n    }\n    this._btnOptions = {\n      disabled: this.nzDisabled,\n      accept: this.nzAccept,\n      action: this.nzAction,\n      directory: this.nzDirectory,\n      openFileDialogOnClick: this.nzOpenFileDialogOnClick,\n      beforeUpload: this.nzBeforeUpload,\n      customRequest: this.nzCustomRequest,\n      data: this.nzData,\n      headers: this.nzHeaders,\n      name: this.nzName,\n      multiple: this.nzMultiple,\n      withCredentials: this.nzWithCredentials,\n      filters,\n      transformFile: this.nzTransformFile,\n      onStart: this.onStart,\n      onProgress: this.onProgress,\n      onSuccess: this.onSuccess,\n      onError: this.onError\n    };\n    return this;\n  }\n\n  // #endregion\n\n  constructor(\n    private cdr: ChangeDetectorRef,\n    private i18n: NzI18nService,\n    @Optional() private directionality: Directionality\n  ) {}\n\n  // #region upload\n\n  private fileToObject(file: NzUploadFile): NzUploadFile {\n    return {\n      lastModified: file.lastModified,\n      lastModifiedDate: file.lastModifiedDate,\n      name: file.filename || file.name,\n      size: file.size,\n      type: file.type,\n      uid: file.uid,\n      response: file.response,\n      error: file.error,\n      percent: 0,\n      originFileObj: file as NzSafeAny\n    };\n  }\n\n  private getFileItem(file: NzUploadFile, fileList: NzUploadFile[]): NzUploadFile {\n    return fileList.filter(item => item.uid === file.uid)[0];\n  }\n\n  private removeFileItem(file: NzUploadFile, fileList: NzUploadFile[]): NzUploadFile[] {\n    return fileList.filter(item => item.uid !== file.uid);\n  }\n\n  private onStart = (file: NzUploadFile): void => {\n    if (!this.nzFileList) {\n      this.nzFileList = [];\n    }\n    const targetItem = this.fileToObject(file);\n    targetItem.status = 'uploading';\n    this.nzFileList = this.nzFileList.concat(targetItem);\n    this.nzFileListChange.emit(this.nzFileList);\n    this.nzChange.emit({ file: targetItem, fileList: this.nzFileList, type: 'start' });\n    this.detectChangesList();\n  };\n\n  private onProgress = (e: { percent: number }, file: NzUploadFile): void => {\n    const fileList = this.nzFileList;\n    const targetItem = this.getFileItem(file, fileList);\n    targetItem.percent = e.percent;\n    this.nzChange.emit({\n      event: e,\n      file: { ...targetItem },\n      fileList: this.nzFileList,\n      type: 'progress'\n    });\n    this.detectChangesList();\n  };\n\n  private onSuccess = (res: {}, file: NzUploadFile): void => {\n    const fileList = this.nzFileList;\n    const targetItem = this.getFileItem(file, fileList);\n    targetItem.status = 'done';\n    targetItem.response = res;\n    this.nzChange.emit({\n      file: { ...targetItem },\n      fileList,\n      type: 'success'\n    });\n    this.detectChangesList();\n  };\n\n  private onError = (err: {}, file: NzUploadFile): void => {\n    const fileList = this.nzFileList;\n    const targetItem = this.getFileItem(file, fileList);\n    targetItem.error = err;\n    targetItem.status = 'error';\n    this.nzChange.emit({\n      file: { ...targetItem },\n      fileList,\n      type: 'error'\n    });\n    this.detectChangesList();\n  };\n\n  // #endregion\n\n  // #region drag\n\n  private dragState?: string;\n\n  // skip safari bug\n  fileDrop(e: DragEvent): void {\n    if (e.type === this.dragState) {\n      return;\n    }\n    this.dragState = e.type;\n    this.setClassMap();\n  }\n\n  // #endregion\n\n  // #region list\n\n  private detectChangesList(): void {\n    this.cdr.detectChanges();\n    this.listComp?.detectChanges();\n  }\n\n  onRemove = (file: NzUploadFile): void => {\n    this.uploadComp.abort(file);\n    file.status = 'removed';\n    const fnRes =\n      typeof this.nzRemove === 'function' ? this.nzRemove(file) : this.nzRemove == null ? true : this.nzRemove;\n    (fnRes instanceof Observable ? fnRes : of(fnRes)).pipe(filter((res: boolean) => res)).subscribe(() => {\n      this.nzFileList = this.removeFileItem(file, this.nzFileList);\n      this.nzChange.emit({\n        file,\n        fileList: this.nzFileList,\n        type: 'removed'\n      });\n      this.nzFileListChange.emit(this.nzFileList);\n      this.cdr.detectChanges();\n    });\n  };\n\n  // #endregion\n\n  // #region styles\n\n  private prefixCls = 'ant-upload';\n  classList: string[] = [];\n\n  private setClassMap(): void {\n    let subCls: string[] = [];\n    if (this.nzType === 'drag') {\n      if (this.nzFileList.some(file => file.status === 'uploading')) {\n        subCls.push(`${this.prefixCls}-drag-uploading`);\n      }\n      if (this.dragState === 'dragover') {\n        subCls.push(`${this.prefixCls}-drag-hover`);\n      }\n    } else {\n      subCls = [`${this.prefixCls}-select-${this.nzListType}`];\n    }\n\n    this.classList = [\n      this.prefixCls,\n      `${this.prefixCls}-${this.nzType}`,\n      ...subCls,\n      (this.nzDisabled && `${this.prefixCls}-disabled`) || '',\n      (this.dir === 'rtl' && `${this.prefixCls}-rtl`) || ''\n    ].filter(item => !!item);\n\n    this.cdr.detectChanges();\n  }\n\n  // #endregion\n\n  ngOnInit(): void {\n    this.dir = this.directionality.value;\n    this.directionality.change?.pipe(takeUntil(this.destroy$)).subscribe((direction: Direction) => {\n      this.dir = direction;\n      this.setClassMap();\n      this.cdr.detectChanges();\n    });\n\n    this.i18n.localeChange.pipe(takeUntil(this.destroy$)).subscribe(() => {\n      this.locale = this.i18n.getLocaleData('Upload');\n      this.detectChangesList();\n    });\n  }\n\n  ngOnChanges(): void {\n    this.zipOptions().setClassMap();\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n}\n","<ng-template #list>\n  <nz-upload-list\n    *ngIf=\"locale && !nzFileListRender\"\n    #listComp\n    [style.display]=\"nzShowUploadList ? '' : 'none'\"\n    [locale]=\"locale\"\n    [listType]=\"nzListType\"\n    [items]=\"nzFileList || []\"\n    [icons]=\"$any(nzShowUploadList)\"\n    [iconRender]=\"nzIconRender\"\n    [previewFile]=\"nzPreviewFile\"\n    [previewIsImage]=\"nzPreviewIsImage\"\n    [onPreview]=\"nzPreview\"\n    [onRemove]=\"onRemove\"\n    [onDownload]=\"nzDownload\"\n    [dir]=\"dir\"\n  ></nz-upload-list>\n  <ng-container *ngIf=\"nzFileListRender\">\n    <ng-container *ngTemplateOutlet=\"nzFileListRender; context: { $implicit: nzFileList }\"></ng-container>\n  </ng-container>\n</ng-template>\n<ng-template #con><ng-content></ng-content></ng-template>\n<ng-template #btn>\n  <div [ngClass]=\"classList\" [style.display]=\"nzShowButton ? '' : 'none'\">\n    <div nz-upload-btn #uploadComp [options]=\"_btnOptions!\">\n      <ng-template [ngTemplateOutlet]=\"con\"></ng-template>\n    </div>\n  </div>\n</ng-template>\n<ng-container *ngIf=\"nzType === 'drag'; else select\">\n  <div [ngClass]=\"classList\" (drop)=\"fileDrop($event)\" (dragover)=\"fileDrop($event)\" (dragleave)=\"fileDrop($event)\">\n    <div nz-upload-btn #uploadComp [options]=\"_btnOptions!\" class=\"ant-upload-btn\">\n      <div class=\"ant-upload-drag-container\">\n        <ng-template [ngTemplateOutlet]=\"con\"></ng-template>\n      </div>\n    </div>\n  </div>\n  <ng-template [ngTemplateOutlet]=\"list\"></ng-template>\n</ng-container>\n<ng-template #select>\n  <ng-container *ngIf=\"nzListType === 'picture-card'; else pic\">\n    <ng-template [ngTemplateOutlet]=\"list\"></ng-template>\n    <ng-template [ngTemplateOutlet]=\"btn\"></ng-template>\n  </ng-container>\n</ng-template>\n<ng-template #pic>\n  <ng-template [ngTemplateOutlet]=\"btn\"></ng-template>\n  <ng-template [ngTemplateOutlet]=\"list\"></ng-template>\n</ng-template>\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { BidiModule } from '@angular/cdk/bidi';\nimport { PlatformModule } from '@angular/cdk/platform';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { NzButtonModule } from 'ng-zorro-antd/button';\nimport { NzI18nModule } from 'ng-zorro-antd/i18n';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzProgressModule } from 'ng-zorro-antd/progress';\nimport { NzToolTipModule } from 'ng-zorro-antd/tooltip';\n\nimport { NzUploadBtnComponent } from './upload-btn.component';\nimport { NzUploadListComponent } from './upload-list.component';\nimport { NzUploadComponent } from './upload.component';\n\n@NgModule({\n  imports: [\n    BidiModule,\n    CommonModule,\n    FormsModule,\n    PlatformModule,\n    NzToolTipModule,\n    NzProgressModule,\n    NzI18nModule,\n    NzIconModule,\n    NzButtonModule\n  ],\n  declarations: [NzUploadComponent, NzUploadBtnComponent, NzUploadListComponent],\n  exports: [NzUploadComponent]\n})\nexport class NzUploadModule {}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nexport * from './interface';\nexport * from './upload-btn.component';\nexport * from './upload-list.component';\nexport * from './upload.component';\nexport * from './upload.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}