{"version":3,"file":"ngx-file-upload-ui.mjs","sources":["../../../projects/ui/src/lib/i18n/src/i18n.ts","../../../projects/ui/src/lib/toolbar/src/toolbar.ts","../../../projects/ui/src/lib/toolbar/src/toolbar.html","../../../projects/ui/src/lib/upload-item/src/upload.control.ts","../../../projects/ui/src/lib/common/src/state-to-string.pipe.ts","../../../projects/ui/src/lib/common/src/file-size.pipe.ts","../../../projects/ui/src/lib/common/src/cancelable.pipe.ts","../../../projects/ui/src/lib/upload-item/src/upload-item.ts","../../../projects/ui/src/lib/upload-item/src/upload-item.html","../../../projects/ui/src/lib/file-browser/src/file-browser.ts","../../../projects/ui/src/lib/common/src/upload-view.ts","../../../projects/ui/src/lib/common/src/upload-view.html","../../../projects/ui/src/lib/toolbar/main.ts","../../../projects/ui/src/lib/progressbar/src/ui/progressbar.ts","../../../projects/ui/src/lib/progressbar/src/ui/progressbar.html","../../../projects/ui/src/lib/progressbar/src/ui/progressbar-circle.ts","../../../projects/ui/src/lib/progressbar/src/ui/progressbar-circle.html","../../../projects/ui/src/lib/progressbar/src/progressbar.module.ts","../../../projects/ui/src/lib/file-browser/main.ts","../../../projects/ui/src/lib/common/main.ts","../../../projects/ui/src/lib/upload-item/main.ts","../../../projects/ui/src/lib/ui.module.ts","../../../projects/ui/src/public-api.ts","../../../projects/ui/src/ngx-file-upload-ui.ts"],"sourcesContent":["import { InjectionToken, Inject, Optional, Injectable } from \"@angular/core\";\r\n\r\nexport enum NgxFileUploadUiI18nKey {\r\n    Common     = \"common\",\r\n    UploadItem = \"item\",\r\n    ToolBar    = \"toolbar\"\r\n}\r\n\r\ninterface Labels {\r\n    [key: string]: string;\r\n}\r\n\r\nexport interface NgxFileUploadUiI18nCommon extends Labels {\r\n    SELECT_FILES: string;\r\n}\r\n\r\nexport interface NgxFileUploadUiI18nToolbar extends Labels {\r\n    CLEAN_UP: string;\r\n    REMOVE_ALL: string;\r\n    UPLOAD_ALL: string;\r\n    UPLOADS: string;\r\n}\r\n\r\nexport interface NgxFileUploadUiI18nItem extends Labels {\r\n    UPLOADED: string;\r\n}\r\n\r\ndeclare type NgxFileuploadI18nValue = NgxFileUploadUiI18nCommon | NgxFileUploadUiI18nItem | NgxFileUploadUiI18nToolbar | undefined;\r\n\r\n/** all labels which exists */\r\nexport interface NgxFileUploadUiI18n {\r\n    [key: string]: NgxFileUploadUiI18nCommon | NgxFileUploadUiI18nItem | NgxFileUploadUiI18nToolbar | undefined;\r\n    common?: NgxFileUploadUiI18nCommon;\r\n    item?: NgxFileUploadUiI18nItem;\r\n    toolbar?: NgxFileUploadUiI18nToolbar;\r\n}\r\n\r\n/**\r\n * injection token\r\n */\r\nexport const NGX_FILE_UPLOAD_UI_I18N = new InjectionToken<NgxFileUploadUiI18n>(\"NgxFileUpload UI I18n labels\");\r\n\r\n@Injectable({providedIn: \"root\"})\r\nexport class NgxFileUploadUiI18nProvider {\r\n\r\n    private labels: NgxFileUploadUiI18n;\r\n\r\n    public constructor(\r\n        @Optional() @Inject(NGX_FILE_UPLOAD_UI_I18N) labels: NgxFileUploadUiI18n\r\n    ) {\r\n        this.labels = labels || {};\r\n    }\r\n\r\n    public getI18n<T extends NgxFileuploadI18nValue>(k: NgxFileUploadUiI18nKey): T {\r\n        return this.labels[k.toString()] as T;\r\n    }\r\n}\r\n","import { Component, OnInit, Input, OnDestroy } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { takeUntil, debounceTime } from \"rxjs/operators\";\r\nimport { INgxFileUploadRequest, NgxFileUploadStorage } from \"@ngx-file-upload/core\";\r\nimport { NgxFileUploadUiI18nProvider, NgxFileUploadUiI18nKey, NgxFileUploadUiI18nToolbar } from \"../../i18n\";\r\n\r\ninterface InfoData {\r\n    error: number;\r\n    idle: number;\r\n    pending: number;\r\n    progress: number;\r\n}\r\n\r\n@Component({\r\n    selector: \"ngx-file-upload-ui--toolbar\",\r\n    templateUrl: \"toolbar.html\",\r\n    styleUrls: [\"./toolbar.scss\"]\r\n})\r\nexport class UploadToolbarComponent implements OnInit, OnDestroy {\r\n\r\n    @Input()\r\n    public storage: NgxFileUploadStorage | undefined;\r\n\r\n    public uploadInfo: InfoData = { error: 0, pending: 0, idle: 0, progress: 0 };\r\n\r\n    public hasUploadsInList = false;\r\n\r\n    public i18n: NgxFileUploadUiI18nToolbar | undefined;\r\n\r\n    /**\r\n     * true if we have completed or invalid uploads\r\n     * in list\r\n     */\r\n    public isCleanable = false;\r\n\r\n    /**\r\n     */\r\n    private destroyed$: Subject<boolean> = new Subject();\r\n\r\n    public constructor(\r\n        private i18nProvider: NgxFileUploadUiI18nProvider\r\n    ) {}\r\n\r\n    ngOnInit() {\r\n        this.i18n = this.i18nProvider.getI18n<NgxFileUploadUiI18nToolbar>(NgxFileUploadUiI18nKey.ToolBar);\r\n        this.registerStoreChange();\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this.destroyed$.next(true);\r\n    }\r\n\r\n    /** start upload for all files */\r\n    public uploadAll() {\r\n        if (this.storage) {\r\n            this.storage.startAll();\r\n        }\r\n    }\r\n\r\n    /** stop all uploads */\r\n    public stopAll() {\r\n        if (this.storage) {\r\n            this.storage.stopAll();\r\n        }\r\n    }\r\n\r\n    /** purge uploads, invalid, completed, canceled will be removed */\r\n    public cleanAll() {\r\n        if (this.storage) {\r\n            this.storage.purge();\r\n        }\r\n    }\r\n\r\n    private registerStoreChange() {\r\n        if (this.storage) {\r\n            this.storage.change()\r\n                .pipe(\r\n                    debounceTime(10),\r\n                    takeUntil(this.destroyed$)\r\n                )\r\n                .subscribe((uploads: INgxFileUploadRequest[]) => {\r\n                    this.updateInfoBar(uploads);\r\n                    this.isCleanable      = uploads.some(upload => upload.isCompleted(true) || upload.isInvalid());\r\n                    this.hasUploadsInList = uploads.length > 0;\r\n                });\r\n        }\r\n    }\r\n\r\n    private updateInfoBar(uploads: INgxFileUploadRequest[]) {\r\n        this.uploadInfo = uploads.reduce<InfoData>((data, upload) => {\r\n            return {\r\n                error   : data.error    + (upload.hasError() || upload.isInvalid() ? 1 : 0),\r\n                idle    : data.idle     + (upload.isIdle() ? 1 : 0),\r\n                pending : data.pending  + (upload.isPending() ? 1 : 0),\r\n                progress: data.progress + (upload.isProgress() ? 1 : 0)\r\n            };\r\n        }, {idle: 0, pending: 0, error: 0, progress: 0});\r\n    }\r\n}\r\n","<div class=\"actions\">\r\n    <button class=\"upload-all\" [disabled]=\"uploadInfo.idle === 0\" (click)=\"uploadAll()\">\r\n        <i class=\"ngx-fileupload-icon--upload\"></i>\r\n        {{i18n?.UPLOAD_ALL || \"Upload all\"}}\r\n    </button>\r\n    <button class=\"clean\" [disabled]=\"!isCleanable\" (click)=\"cleanAll()\">\r\n        {{i18n?.CLEAN_UP || \"Clear\"}}\r\n    </button>\r\n    <button class=\"remove-all\" [disabled]=\"!hasUploadsInList\" (click)=\"stopAll()\">\r\n        {{i18n?.REMOVE_ALL || \"Remove\"}}\r\n    </button>\r\n</div>\r\n\r\n<div class=\"info\">\r\n    {{ i18n?.UPLOADS || \"Uploads\" }}:\r\n    <ul>\r\n        <li>\r\n            <i class=\"ngx-fileupload-icon--upload\"></i>\r\n            <span>{{uploadInfo.progress}}</span>\r\n        </li>\r\n        <li>\r\n            <i class=\"ngx-fileupload-icon--pending\"></i>\r\n            <span>{{uploadInfo.pending}}</span>\r\n        </li>\r\n        <li>\r\n            <i class=\"ngx-fileupload-icon--idle\"></i>\r\n            <span>{{uploadInfo.idle}}</span>\r\n        </li>\r\n        <li>\r\n            <i class=\"ngx-fileupload-icon--error\"></i>\r\n            <span>{{uploadInfo.error}}</span>\r\n        </li>\r\n    </ul>\r\n</div>\r\n","import { INgxFileUploadRequest, NgxFileUploadControl } from \"@ngx-file-upload/core\";\r\n\r\n/**\r\n * remote control for a single upload, will passed\r\n * by [NgxFileUploadItem]{@link ../components/NgxFileUploadItem.html} as context.ctrl\r\n * to the item template.\r\n *\r\n * @example\r\n *\r\n * <ng-template let-uploadData=\"data\" let-uploadCtrl=\"ctrl\">\r\n *     <button type=\"button\" *ngIf=\"!data.hasError\" (click)=\"uploadCtrl.start($event)\">start</button>\r\n *     <button type=\"button\" *ngIf=\"data.hasError\"  (click)=\"uploadCtrl.retry($event)\">retry</button>\r\n *     <button type=\"button\"                        (click)=\"uploadCtrl.cancel($event)\">cancel</button>\r\n * </ng-template>\r\n *\r\n * <ngx-file-upload-item *ngFor=\"item of uploads\" [template]=\"myItemTemplate\" [upload]=\"item\"></ngx-fileUpload-item>\r\n */\r\nexport class Control implements NgxFileUploadControl {\r\n\r\n    public constructor(private upload: INgxFileUploadRequest) {}\r\n\r\n    /**\r\n     * if upload has been failed (http error) it has not completed\r\n     * since connection can be broken or something dont has started yet.\r\n     *\r\n     * Give them a chance for a retry\r\n     */\r\n    public retry(event?: MouseEvent) {\r\n        this.handleEvent(event);\r\n        this.upload.retry();\r\n    }\r\n\r\n    /**\r\n     * start single upload\r\n     */\r\n    public start($event?: MouseEvent) {\r\n        this.handleEvent($event);\r\n        this.upload.start();\r\n    }\r\n\r\n    /**\r\n     * cancel / stop single upload\r\n     */\r\n    public stop($event?: MouseEvent) {\r\n        this.handleEvent($event);\r\n        this.upload.cancel();\r\n    }\r\n\r\n    public remove($event?: MouseEvent) {\r\n        this.handleEvent($event);\r\n        this.upload.destroy();\r\n    }\r\n\r\n    public removeInvalidFiles($event?: MouseEvent) {\r\n        this.handleEvent($event);\r\n        this.upload.removeInvalidFiles();\r\n    }\r\n\r\n    private handleEvent(event?: MouseEvent) {\r\n        if (event && event instanceof MouseEvent) {\r\n            event.stopPropagation();\r\n        }\r\n    }\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\nimport { NgxFileUploadState } from \"@ngx-file-upload/core\";\r\n\r\n/**\r\n * converts upload state to string value\r\n *\r\n * @example\r\n * <span>{{upload.state | stateToString}}</span>\r\n * // prints one of these idle, pending, progress, completed, start, invalid, canceled\r\n */\r\n@Pipe({\r\n    name: \"stateToString\"\r\n})\r\nexport class StateToStringPipe implements PipeTransform {\r\n\r\n    transform(state: NgxFileUploadState): string {\r\n\r\n        switch (state) {\r\n            case NgxFileUploadState.CANCELED:  return \"canceled\";\r\n            case NgxFileUploadState.PENDING:   return \"pending\";\r\n            case NgxFileUploadState.PROGRESS:  return \"progress\";\r\n            case NgxFileUploadState.COMPLETED: return \"completed\";\r\n            case NgxFileUploadState.START:     return \"start\";\r\n            case NgxFileUploadState.INVALID:   return \"invalid\";\r\n            default:                           return \"idle\";\r\n        }\r\n    }\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n/**\r\n * format byte value into human readable value\r\n *\r\n * @example\r\n * <span>{{1024 | fileSize}}</span>\r\n * // prints out 1Kb\r\n *\r\n */\r\n@Pipe({\r\n    name: \"fileSize\"\r\n})\r\nexport class FileSizePipe implements PipeTransform {\r\n\r\n    private units = [\"Byte\", \"Kb\", \"Mb\", \"Gb\"];\r\n\r\n    transform(size: number): string {\r\n        let bytes = isNaN(size as number) ? parseFloat(size.toString()) : size;\r\n        let unit  = 0;\r\n\r\n        while (bytes >= 1024 && this.units.length > unit) {\r\n            bytes = bytes / 1024;\r\n            unit++;\r\n        }\r\n\r\n        /**\r\n         * sets a max precision to 2, remove trailing zeros, toFixed was not working\r\n         * since this will fill up number with trailing zeros.\r\n         *\r\n         * steps:\r\n         * 1. find all until this is not a .\r\n         * 2. only match . if this is not followed by 2 zeros\r\n         * 3. match any number\r\n         * 4. match any char which is not a zero (0,1)\r\n         *\r\n         * will only works with numbers which will converted to string\r\n         * and not with string\r\n         *\r\n         * @example\r\n         * 123.001 becomes 123\r\n         * 123.10 becomes 123.1\r\n         * 123.01 becomes 123.01\r\n         * 123.01231 becomes 123.01\r\n         */\r\n        const formatter = /^[^\\.]+(\\.(?!0{2})\\d[^0]?)?/g;\r\n        const total = bytes.toString().match(formatter)?.[0] ?? bytes.toString();\r\n        return `${total} ${this.units[unit]}`;\r\n    }\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\nimport { NgxFileUploadState } from \"@ngx-file-upload/core\";\r\n\r\n/**\r\n * returns true if an upload could be canceled\r\n * an upload could canceled if state is one of these: PENDING, START or PROGRESS\r\n *\r\n * @example\r\n * <button [disabled]=\"!(upload.data.state | isCancelAble)\">cancel</button>\r\n */\r\n@Pipe({\r\n    name: \"isCancelAble\"\r\n})\r\nexport class CancelAblePipe implements PipeTransform {\r\n\r\n    transform(state: NgxFileUploadState): boolean {\r\n        let isCancelAble = state === NgxFileUploadState.PENDING;\r\n        isCancelAble     = isCancelAble || state === NgxFileUploadState.START;\r\n        isCancelAble     = isCancelAble || state === NgxFileUploadState.PROGRESS;\r\n        return isCancelAble;\r\n    }\r\n}\r\n","\r\nimport { Component, Input, ViewChild, TemplateRef, HostListener, OnDestroy, AfterViewInit, OnInit } from \"@angular/core\";\r\nimport { NgxFileUploadState, NgxFileUploadControl, INgxFileUploadRequestData, INgxFileUploadRequest } from \"@ngx-file-upload/core\";\r\nimport { Subject } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs/operators\";\r\nimport { Control } from \"./upload.control\";\r\nimport { NgxFileUploadUiI18nProvider, NgxFileUploadUiI18nItem, NgxFileUploadUiI18nKey } from \"../../i18n\";\r\n\r\nexport interface FileUploadItemContext {\r\n  data: INgxFileUploadRequestData;\r\n  ctrl: NgxFileUploadControl;\r\n}\r\n\r\n/**\r\n * view for upload\r\n */\r\n@Component({\r\n  selector: \"ngx-file-upload-ui--item\",\r\n  templateUrl: \"upload-item.html\",\r\n  styleUrls: [\"./upload-item.scss\"],\r\n})\r\nexport class UploadItemComponent implements AfterViewInit, OnInit, OnDestroy {\r\n\r\n  public uploadState = NgxFileUploadState;\r\n\r\n  /**\r\n   * template context which is bound to rendered template\r\n   */\r\n  public context: FileUploadItemContext | undefined;\r\n\r\n  /**\r\n   * file upload which should bound to this view\r\n   */\r\n  private fileUpload: INgxFileUploadRequest | undefined;\r\n\r\n  /**\r\n   * save subscription here,  since we have only 1 sub\r\n   * i think takeUntil and Subject will be to much so we could\r\n   * unsubscribe directly\r\n   */\r\n  private destroyed: Subject<boolean> = new Subject();\r\n\r\n  public i18n: NgxFileUploadUiI18nItem | undefined;\r\n\r\n  /**\r\n   * set template which should be used for upload items, if no TemplateRef is passed\r\n   * it will fallback to [defaultUploadItem]{@link #template}\r\n   */\r\n  @ViewChild(\"defaultUploadItem\", { static: true })\r\n  public itemTpl: TemplateRef<FileUploadItemContext> | undefined;\r\n\r\n  @Input()\r\n  public set template(tpl: TemplateRef<FileUploadItemContext>) {\r\n    if (tpl instanceof TemplateRef) {\r\n      this.itemTpl = tpl;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * sets upload we want to bind with current view\r\n   */\r\n  @Input()\r\n  public set upload(request: INgxFileUploadRequest) {\r\n    this.fileUpload = request;\r\n    this.context = {\r\n      data: request.data,\r\n      ctrl: new Control(request)\r\n    };\r\n  }\r\n\r\n  public constructor(\r\n    private i18nProvider: NgxFileUploadUiI18nProvider\r\n  ) { }\r\n\r\n  /**\r\n   * ensure all click events will canceled\r\n   * so we dont affect anything other\r\n   */\r\n  @HostListener(\"click\", [\"$event\"])\r\n  public onItemClick(event: MouseEvent) {\r\n    event.stopPropagation();\r\n    event.preventDefault();\r\n    event.stopImmediatePropagation();\r\n  }\r\n\r\n  /**\r\n   * register on upload change event to get current informations from upload\r\n   * and pass to template context to render them\r\n   *\r\n   * @inheritdoc\r\n   */\r\n  ngAfterViewInit(): void {\r\n    if (!this.fileUpload) {\r\n      return;\r\n    }\r\n\r\n    this.fileUpload.change\r\n      .pipe(takeUntil(this.destroyed))\r\n      .subscribe((fileUpload: INgxFileUploadRequestData) => (this.context as FileUploadItemContext).data = fileUpload);\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.i18n = this.i18nProvider.getI18n<NgxFileUploadUiI18nItem>(NgxFileUploadUiI18nKey.UploadItem);\r\n  }\r\n\r\n  /**\r\n   * if component gets destroyed remove change subscription\r\n   */\r\n  ngOnDestroy() {\r\n    this.destroyed.next(true);\r\n  }\r\n\r\n  /**\r\n   * just to disable sort for keyvalue pipe\r\n   */\r\n  public returnZero() {\r\n    return 0;\r\n  }\r\n}\r\n","<ng-template #defaultUploadItem let-upload=\"data\" let-ctrl=\"ctrl\">\r\n\r\n  <div class=\"upload-item\">\r\n    <div class=\"upload-item--header\">\r\n      <span class=\"title\">\r\n        {{upload.name}}\r\n      </span>\r\n\r\n      <!-- remove upload completly -->\r\n      <button type=\"button\" class=\"action-remove item-action--remove\" (click)=\"ctrl.remove($event);\">\r\n        <i class=\"ngx-fileupload-icon--remove\"></i>\r\n      </button>\r\n    </div>\r\n\r\n    <div class=\"upload-item--body\">\r\n      <!-- upload state icon -->\r\n      <div class=\"upload-item--state\">\r\n        <i [ngClass]=\"[\r\n          'ngx-fileupload-icon--' + (upload.state | stateToString),\r\n          upload.state === uploadState.COMPLETED ? upload.hasError ? 'error' : 'success' : ''\r\n        ]\"></i>\r\n      </div>\r\n\r\n      <!-- file progress: current state | progressbar -->\r\n      <div class=\"upload-item--progress\">\r\n        <div class=\"progressbar\">\r\n          <span class=\"label-size\">{{upload.size | fileSize}}</span>\r\n          <div class=\"progressbar-inner\" [ngStyle]=\"{width: upload.progress + '%'}\"></div>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- upload actions: cancel | retry -->\r\n      <div class=\"upload-item--actions\">\r\n        <!-- start upload action -->\r\n        <button type=\"button\" class=\"item-action--upload\" (click)=\"ctrl.start($event)\"\r\n          *ngIf=\"!upload.hasError && upload.state !== uploadState.CANCELED\"\r\n          [disabled]=\"upload.state !== uploadState.IDLE\">\r\n          <i class=\"ngx-fileupload-icon--upload\"></i>\r\n        </button>\r\n\r\n        <!-- retry upload action -->\r\n        <button type=\"button\" class=\"item-action--reload\" (click)=\"ctrl.retry($event)\"\r\n          *ngIf=\"upload.hasError || upload.state === uploadState.CANCELED\">\r\n          <i class=\"ngx-fileupload-icon--reload\"></i>\r\n        </button>\r\n\r\n        <!-- cancel active upload -->\r\n        <button type=\"button\" [disabled]=\"!(upload.state | isCancelAble)\" class=\"item-action--cancel\"\r\n          (click)=\"ctrl.stop($event);\">\r\n          <i class=\"ngx-fileupload-icon--cancel\"></i>\r\n        </button>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- footer to display validation / upload errors or success notes -->\r\n    <div class=\"upload-item--footer\">\r\n\r\n      <!-- show validation errors -->\r\n      <ul *ngIf=\"upload.validationErrors\" class=\"upload-item--validation\">\r\n        <button (click)=\"ctrl.removeInvalidFiles($event)\">remove invalid</button>\r\n        <li *ngFor=\"let invalidFile of upload.validationErrors | keyvalue : returnZero\" class=\"message\">\r\n          {{invalidFile.key}}\r\n          <ul>\r\n            <li *ngFor=\"let suberror of invalidFile.value | keyvalue : returnZero\" class=\"message\">\r\n              {{suberror.value}}\r\n            </li>\r\n          </ul>\r\n        </li>\r\n      </ul>\r\n\r\n      <ng-container *ngIf=\"upload.state === uploadState.COMPLETED\">\r\n        <ul *ngIf=\"upload.response.errors\" class=\"upload-item--response-errors\">\r\n          <li *ngFor=\"let error of upload.response.errors\" class=\"message error\">\r\n            {{error}}\r\n          </li>\r\n        </ul>\r\n\r\n        <p class=\"message success\" *ngIf=\"!upload.response.errors\">\r\n          <ng-container *ngIf=\"upload.response.body && upload.response.body.message; else uploadSuccess\">\r\n            {{upload.response.body.message}}\r\n          </ng-container>\r\n          <ng-template #uploadSuccess>\r\n            {{upload.name}} {{i18n?.UPLOADED || \"uploaded\"}}\r\n          </ng-template>\r\n        </p>\r\n      </ng-container>\r\n    </div>\r\n  </div>\r\n</ng-template>\r\n\r\n<!-- display item template at this point -->\r\n<ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"context\"></ng-container>","import { Directive, HostListener, Input, Output, EventEmitter, OnDestroy, Renderer2 } from \"@angular/core\";\r\nimport { Subject } from \"rxjs\";\r\n\r\n/**\r\n * FileBrowser directive\r\n *\r\n * @todo refactor this should only notifiy if files are dropped, not add them to store or create an upload\r\n *\r\n * directive to add uploads with drag / drop\r\n *\r\n * @example\r\n *\r\n * <div [ngxFileUpload]=\"'URL'\" (add)=\"onUploadAdd($event)\"></div>\r\n * <button (click)=\"ngxFileUploadRef.upload()\">Upload</button>\r\n */\r\n@Directive({\r\n  selector: \"[ngxFileUpload]\"\r\n})\r\nexport class FileBrowserDirective implements OnDestroy {\r\n\r\n    /**\r\n     * upload has been added\r\n     *\r\n     * @example\r\n     *\r\n     * <div [ngxFileUpload]=\"\"localhost/upload\"\" (add)=\"onUploadAdd($event)\" ></div>\r\n     */\r\n    @Output()\r\n    public add: EventEmitter<File[]>;\r\n\r\n    @Input()\r\n    public disabled = false;\r\n\r\n    /**\r\n     * remove from subscribtions if component gets destroyed\r\n     */\r\n    private destroyed$: Subject<boolean> = new Subject();\r\n\r\n    /**\r\n     * input file field to trigger file window\r\n     */\r\n    private fileSelect: HTMLInputElement;\r\n\r\n    /**\r\n     * Creates an instance of NgxFileUploadDirective.\r\n     */\r\n    constructor(\r\n        private renderer: Renderer2\r\n    ) {\r\n        this.add = new EventEmitter();\r\n        this.fileSelect = this.createFieldInputField();\r\n    }\r\n\r\n    /**\r\n     * directive gets destroyed\r\n     */\r\n    public ngOnDestroy() {\r\n        this.destroyed$.next(true);\r\n        this.destroyed$.complete();\r\n    }\r\n\r\n    /**\r\n     * handle drag over event\r\n     */\r\n    @HostListener(\"dragover\", [\"$event\"])\r\n    public onFileDragOver(event: DragEvent) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n    }\r\n\r\n    /**\r\n     * handle drop event\r\n     */\r\n    @HostListener(\"drop\", [\"$event\"])\r\n    public onFileDrop(event: DragEvent) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n\r\n        if (!this.disabled && event.dataTransfer) {\r\n            const files = Array.from(event.dataTransfer.files);\r\n            this.add.emit(files);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add click host listener\r\n     * to get notified we have a click event\r\n     */\r\n    @HostListener(\"click\", [\"$event\"])\r\n    public onClick(event: MouseEvent) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n\r\n        if (!this.disabled) {\r\n            this.fileSelect.click();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * create dummy input field to select files\r\n     * for security reasons, we cant trigger a file select window\r\n     * without it\r\n     */\r\n    private createFieldInputField(): HTMLInputElement {\r\n        const inputField = document.createElement(\"input\");\r\n        this.renderer.setAttribute(inputField, \"type\", \"file\");\r\n        this.renderer.setProperty(inputField, \"multiple\", true);\r\n        this.renderer.setStyle(inputField, \"display\", \"none\");\r\n        this.renderer.listen(inputField, \"change\", (e) => this.onFileSelect(e));\r\n        return inputField;\r\n    }\r\n\r\n    /**\r\n     * register on change event on input[type=\"file\"] field\r\n     * and create the uploads\r\n     */\r\n    private onFileSelect(event: Event) {\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n\r\n        const files = Array.from(this.fileSelect.files ?? []);\r\n        this.add.emit(files);\r\n\r\n        /**\r\n         * clear value otherwise change will not trigger again\r\n         */\r\n        this.fileSelect.files = null;\r\n        this.fileSelect.value = '';\r\n    }\r\n}\r\n","import { Component, TemplateRef, Input, OnInit, OnDestroy, Inject } from \"@angular/core\";\r\nimport { takeUntil } from \"rxjs/operators\";\r\nimport { Subject } from \"rxjs\";\r\nimport {\r\n    NgxFileUploadValidator,\r\n    NgxFileUploadValidationFn,\r\n    NgxFileUploadOptions,\r\n    NgxFileUploadFactory,\r\n    NgxFileUploadStorage,\r\n    NgxFileUploadHeaders,\r\n    INgxFileUploadRequest\r\n} from \"@ngx-file-upload/core\";\r\nimport { FileUploadItemContext } from \"../../upload-item/src/upload-item\";\r\nimport { NgxFileUploadUiI18nProvider, NgxFileUploadUiI18nCommon, NgxFileUploadUiI18nKey } from \"../../i18n\";\r\n\r\n@Component({\r\n    selector: \"ngx-file-upload\",\r\n    styleUrls: [\"./upload-view.scss\"],\r\n    templateUrl: \"upload-view.html\",\r\n})\r\nexport class UploadViewComponent implements OnInit, OnDestroy {\r\n\r\n    /**\r\n     * set custom template, will pass through to [NgxFileUploadItem]{@link NgxFileUploadItemComponent.html#itemTpl}\r\n     */\r\n    @Input()\r\n    public itemTemplate: TemplateRef<FileUploadItemContext> | undefined;\r\n\r\n    @Input()\r\n    public url: string | undefined;\r\n\r\n    @Input()\r\n    public useFormData = true;\r\n\r\n    @Input()\r\n    public formDataName = \"file\";\r\n\r\n    @Input()\r\n    public headers: NgxFileUploadHeaders | undefined;\r\n\r\n    @Input()\r\n    public validator: NgxFileUploadValidator | NgxFileUploadValidationFn | undefined;\r\n\r\n    @Input()\r\n    public set storage(storage: NgxFileUploadStorage) {\r\n        this.uploadStorage = storage;\r\n        this.uploadStorageSet = true;\r\n    }\r\n\r\n    public uploadStorage: NgxFileUploadStorage = new NgxFileUploadStorage();\r\n\r\n    public uploads: INgxFileUploadRequest[] = [];\r\n\r\n    public i18n: NgxFileUploadUiI18nCommon | undefined;\r\n\r\n    private destroyed$: Subject<boolean> = new Subject();\r\n\r\n    private uploadStorageSet = false;\r\n\r\n    public constructor(\r\n        @Inject(NgxFileUploadFactory) private uploadFactory: NgxFileUploadFactory,\r\n        private i18nProvider: NgxFileUploadUiI18nProvider\r\n    ) {}\r\n\r\n    public ngOnInit() {\r\n\r\n        if (!this.url) {\r\n            return;\r\n        }\r\n\r\n        this.i18n = this.i18nProvider.getI18n<NgxFileUploadUiI18nCommon>(NgxFileUploadUiI18nKey.Common);\r\n        this.registerStoreEvents();\r\n    }\r\n\r\n    public ngOnDestroy() {\r\n        this.destroyed$.next(true);\r\n\r\n        /** we handle our own storage so destroy this one */\r\n        if (!this.uploadStorageSet && this.uploadStorage) {\r\n            this.uploadStorage.destroy();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * files get dropped\r\n     */\r\n    public dropFiles(files: File[]) {\r\n        if (files.length && this.url) {\r\n            const uploadOptions: NgxFileUploadOptions = {\r\n                url: this.url,\r\n                formData: {\r\n                    enabled: this.useFormData,\r\n                    name:    this.formDataName\r\n                },\r\n                headers: this.headers\r\n            };\r\n\r\n            const uploads = this.uploadFactory.createUploadRequest(files, uploadOptions, this.validator);\r\n            if (uploads) {\r\n                this.uploadStorage?.add(uploads);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * register events for store changes\r\n     */\r\n    private registerStoreEvents() {\r\n        this.uploadStorage.change()\r\n            .pipe( takeUntil(this.destroyed$))\r\n            .subscribe({\r\n                next: (uploads) => {\r\n                    this.uploads = uploads;\r\n                }\r\n            });\r\n    }\r\n}\r\n","<ngx-file-upload-ui--toolbar [storage]=\"uploadStorage\"></ngx-file-upload-ui--toolbar>\r\n\r\n<div class=\"upload--body fileupload\" ngxFileUpload (add)=\"dropFiles($event)\">\r\n\r\n    <div *ngIf=\"!uploads.length\" class=\"file-browser\">\r\n        <i class=\"ngx-fileupload-icon--add\"></i>\r\n        <span>{{ i18n?.SELECT_FILES || \"Drag/Drop files here or click\"}}</span>\r\n    </div>\r\n\r\n    <div *ngIf=\"uploads.length\" class=\"file-upload--list\">\r\n        <ngx-file-upload-ui--item *ngFor=\"let item of uploads\" [upload]=\"item\" [template]=\"itemTemplate\" >\r\n        </ngx-file-upload-ui--item>\r\n    </div>\r\n</div>\r\n","import { NgModule } from \"@angular/core\";\r\n\r\nimport { UploadToolbarComponent } from \"./src/toolbar\";\r\n\r\n@NgModule({\r\n    exports: [ UploadToolbarComponent ],\r\n    declarations: [UploadToolbarComponent],\r\n})\r\nexport class NgxFileUploadUiToolbarModule {\r\n}\r\n","import { Component, Input, OnInit, ViewChild, ElementRef, Renderer2, NgZone } from \"@angular/core\";\r\n\r\n@Component({\r\n    selector: \"ngx-file-upload-ui--progressbar\",\r\n    templateUrl: \"progressbar.html\",\r\n    styleUrls: [\"./progressbar.scss\"]\r\n})\r\nexport class ProgressbarComponent implements OnInit {\r\n\r\n    public dashArrayCSS = `1`;\r\n\r\n    @Input()\r\n    public animate = true;\r\n\r\n    @Input()\r\n    public set duration(duration: number) {\r\n        this.animationDuration = Math.max(duration, 0);\r\n    }\r\n\r\n    @Input()\r\n    public set gap(gap: number) {\r\n        this.progressbarGap = Math.max(gap, 1);\r\n    }\r\n\r\n    @Input()\r\n    public set parts(count: number) {\r\n        this.progressbarParts = Math.max(count, 1);\r\n    }\r\n\r\n    @Input()\r\n    public set progress(progress: number) {\r\n        if (progress > 0) {\r\n            this.updateProgress(progress);\r\n        }\r\n    }\r\n\r\n    private animationDuration = 250;\r\n\r\n    private progressbarGap = 1;\r\n\r\n    private progressBuffer: number[] = [];\r\n\r\n    private isAnimated = false;\r\n\r\n    private progressbarParts = 1;\r\n\r\n    @ViewChild(\"progressbar\", {read: ElementRef, static: true})\r\n    private progressbar: ElementRef<SVGElement> | undefined;\r\n\r\n    @ViewChild(\"progressLine\", {read: ElementRef, static: true})\r\n    private progressLine: ElementRef<SVGLineElement> | undefined;\r\n\r\n    public constructor(\r\n        private renderer: Renderer2,\r\n        private zone: NgZone\r\n    ) {}\r\n\r\n    public ngOnInit() {\r\n        const {width} = this.progressbar?.nativeElement.getBoundingClientRect() ?? { width: 0 };\r\n\r\n        /** calculate dasharray */\r\n        const gap = this.progressbarParts === 1 ? 0 : this.progressbarGap;\r\n        const widthWithoutGap = width - (this.progressbarParts * gap);\r\n        const dashArrayWidth  = Math.ceil(widthWithoutGap / this.progressbarParts);\r\n\r\n        this.dashArrayCSS = `${dashArrayWidth} ${gap}`;\r\n    }\r\n\r\n    private updateProgress(progress: number) {\r\n\r\n        if (this.animate) {\r\n            this.isAnimated ? this.progressBuffer.push(progress) : this.animateProgress(progress);\r\n            return;\r\n        }\r\n\r\n        if (this.progressLine) {\r\n            const el = this.progressLine.nativeElement;\r\n            this.renderer.setAttribute(el, \"x2\", `${progress}%`);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * animate progress\r\n     *\r\n     * @see https://javascript.info/js-animation\r\n     */\r\n    private animateProgress(progress: number) {\r\n\r\n        const start = performance.now();\r\n        const self  = this;\r\n        const el    = this.progressLine?.nativeElement;\r\n\r\n        if (!el) {\r\n            return;\r\n        }\r\n\r\n        const curProgress = progress; // new progress state\r\n        const oldProgress = parseInt(el.getAttribute(\"x2\") ?? '0', 10); // old progress state\r\n\r\n        this.isAnimated = true;\r\n\r\n        this.zone.runOutsideAngular(() => {\r\n\r\n            // should add to service so we dont have to get this multiple times\r\n            requestAnimationFrame(function animate(time) {\r\n\r\n                // timeFraction goes from 0 to 1\r\n                const timeFraction = Math.min((time - start) / self.animationDuration, 1);\r\n\r\n                // const progress = 1 - Math.sin(Math.acos(timeFraction));\r\n                const progressed = timeFraction;\r\n\r\n                // set progressed state\r\n                const progressDelta = curProgress - oldProgress;\r\n                const newProgress   = oldProgress + (progressed * progressDelta);\r\n                self.renderer.setAttribute(el, \"x2\", `${newProgress}%`);\r\n\r\n                if (timeFraction < 1) {\r\n                    requestAnimationFrame(animate);\r\n                    return;\r\n                }\r\n\r\n                if (self.progressBuffer.length > 0) {\r\n                    self.animateProgress(self.progressBuffer.shift() as number);\r\n                    return;\r\n                }\r\n\r\n                self.isAnimated = false;\r\n            });\r\n        });\r\n    }\r\n}\r\n","<!--\r\n<div class=\"progressbar\" role=\"progressbar\" [ngStyle]=\"{'flex-basis': progressed + '%'}\"></div>\r\n-->\r\n<svg xmlns=\"http://www.w3.org/2000/svg\" #progressbar class=\"progressbar\">\r\n\r\n    <line class=\"background\"\r\n          x1=\"0\"\r\n          y1=\"50%\"\r\n          x2=\"100%\"\r\n          y2=\"50%\" \r\n          shape-rendering=\"crispEdges\"\r\n          style=\"stroke-dashoffset: 0;\"\r\n          [ngStyle]=\"{'stroke-dasharray': dashArrayCSS}\">\r\n    </line>\r\n    \r\n    <line \r\n          class=\"progress\"\r\n          #progressLine\r\n          x1=\"0\" \r\n          x2=\"0\"\r\n          y1=\"50%\"\r\n          y2=\"50%\" \r\n          shape-rendering=\"crispEdges\"\r\n          [ngStyle]=\" {'stroke-dasharray': dashArrayCSS}\">\r\n    </line>\r\n</svg>\r\n","import { Component, Input, ViewChild, ElementRef, OnInit, NgZone } from \"@angular/core\";\r\n\r\nclass ProgressbarCircleData {\r\n    radius = 0;\r\n    circumferences = 0;\r\n    offset = 0;\r\n    progress = 0;\r\n}\r\n\r\n@Component({\r\n    selector: \"ngx-file-upload-ui--progressbar-circle\",\r\n    templateUrl: \"progressbar-circle.html\",\r\n    styleUrls: [\"./progressbar-circle.scss\"]\r\n})\r\nexport class ProgressbarCircleComponent implements OnInit {\r\n\r\n    public data: ProgressbarCircleData = new ProgressbarCircleData();\r\n\r\n    public dashArray = `1`;\r\n\r\n    public maskId = Math.random().toString(32);\r\n\r\n    private circleParts = 1;\r\n\r\n    private circleGap = 1;\r\n\r\n    @ViewChild(\"progressbar\", {read: ElementRef, static: true})\r\n    private progressbar: ElementRef<SVGElement> | undefined;\r\n\r\n    @Input()\r\n    public set radius(radius: number) {\r\n        this.data.radius = radius;\r\n    }\r\n\r\n    @Input()\r\n    public set parts(parts: number) {\r\n        this.circleParts = Math.max(parts, 1);\r\n    }\r\n\r\n    @Input()\r\n    public set gap(gap: number) {\r\n        this.circleGap = Math.max(gap, 1);\r\n    }\r\n\r\n    @Input()\r\n    set progress(progressed: number) {\r\n        /** calculate new offset */\r\n        this.data.progress = progressed;\r\n        this.updateOffset();\r\n    }\r\n\r\n    public constructor(\r\n        private zone: NgZone\r\n    ) {}\r\n\r\n    public ngOnInit() {\r\n        this.initializeData(performance.now());\r\n    }\r\n\r\n    /**\r\n     * initialize data, currently we running into a problem if data comes straight\r\n     * from storage, then the css properties are not set correctly but element is allready\r\n     * rendered. Seems it belongs to a document fragment but not the page / parent component.\r\n     *\r\n     * So we need to run into an loop to ensure we have all data we need, this loop will break\r\n     * after 100ms to ensure we dont run into infinite loop and take what we have.\r\n     *\r\n     * Neither zone.onStable nor afterViewInit are working for me here. Maybe afterViewChecked but this\r\n     * will trigger multiple times.\r\n     *\r\n     * @todo check for better ways to solve this without loop\r\n     * @todo think about second option make size and radius mandatory could be bad for responsive design but will work without loop\r\n     */\r\n    private initializeData(start: number, time = 0) {\r\n\r\n        if (!this.progressbar) {\r\n            return;\r\n        }\r\n\r\n        const {width, height} = this.progressbar.nativeElement.getBoundingClientRect();\r\n        const sideLength  = Math.min(width, height);\r\n\r\n        // start work arround here, will only triggered if data comes from storage / cache\r\n        if (!this.data.radius && sideLength === 0 && (time - start) / 100 < 1) {\r\n            this.zone.runOutsideAngular(() => {\r\n                requestAnimationFrame((ellapsed) => this.initializeData(start, ellapsed));\r\n            });\r\n        } else {\r\n            this.data.radius = this.data.radius || this.calcRadius(sideLength) || 0;\r\n            this.data.circumferences = 2 * Math.PI * this.data.radius;\r\n\r\n            this.updateOffset();\r\n            this.calcDashArray();\r\n        }\r\n    }\r\n\r\n    /** calculate dasharray offset for mask */\r\n    private updateOffset() {\r\n        this.data.offset = ((100 - this.data.progress) / 100) * this.data.circumferences;\r\n    }\r\n\r\n    /**\r\n     * calculate circle radius if no one is passed\r\n     */\r\n    private calcRadius(sideLength: number): number {\r\n\r\n        if (sideLength === 0 || !this.progressbar || !this.progressbar.nativeElement) {\r\n            return 0;\r\n        }\r\n\r\n        const svgElement: SVGElement = this.progressbar.nativeElement;\r\n        const strokeProgressEl = svgElement.querySelector(\"circle.progress\");\r\n        const strokeBackgroundEl = svgElement.querySelector(\"circle.progress-bar\");\r\n\r\n        console.log(strokeProgressEl);\r\n        console.log(strokeBackgroundEl);\r\n\r\n        if (!strokeProgressEl || !strokeBackgroundEl) {\r\n            return 0;\r\n        }\r\n\r\n        const strokeProgress   = getComputedStyle(strokeProgressEl).strokeWidth;\r\n        const strokeBackground = getComputedStyle(strokeBackgroundEl).strokeWidth;\r\n        const strokeWidth      = Math.max(parseFloat(strokeProgress), parseFloat(strokeBackground));\r\n\r\n        return sideLength / 2 - (strokeWidth / 2);\r\n    }\r\n\r\n    private calcDashArray() {\r\n        const partWidth = (this.data.circumferences / this.circleParts);\r\n        const gap       = this.circleParts === 1 ? 0 : partWidth - Math.floor(partWidth) + this.circleGap;\r\n        this.dashArray = `${partWidth - gap} ${gap}`;\r\n    }\r\n}\r\n","<svg xmlns=\"http://www.w3.org/2000/svg\" #progressbar>\r\n\r\n    <circle class=\"progress-bar\"\r\n        cx=\"50%\"\r\n        cy=\"50%\"\r\n        fill=\"transparent\"\r\n        shape-rendering=\"geometricPrecision\"\r\n        [attr.r]=\"data.radius\"\r\n        [attr.stroke-dasharray]=\"dashArray\"\r\n        [attr.mask]=\"'url(#inverted-' + maskId +')'\"></circle>\r\n\r\n    <!-- progresssbar circle -->\r\n    <circle class=\"progress\" \r\n        cx=\"50%\"\r\n        cy=\"50%\"\r\n        [attr.r]=\"data.radius\"\r\n        [attr.stroke-dasharray]=\"dashArray\"\r\n        [attr.mask]=\"'url(#' + maskId +')'\"\r\n        shape-rendering=\"geometricPrecision\"\r\n        fill=\"transparent\">\r\n    </circle>\r\n\r\n    <!--\r\n        declare masks for circles\r\n\r\n        first mask show progress, second mask remove progressbar background\r\n        if both circles overlap, the edges looks a bit ugly so ensure we only see one\r\n        of both progressbar circles\r\n    -->\r\n    <defs>\r\n        <mask id=\"{{maskId}}\" maskUnits=\"userSpaceOnUse\">\r\n            <circle class=\"progress mask\" [ngClass]=\"data.progress > 0 ? 'animate' : ''\"\r\n                shape-rendering=\"geometricPrecision\"\r\n                cx=\"50%\"\r\n                cy=\"50%\"\r\n                [attr.r]=\"data.radius\"\r\n                [attr.stroke-dasharray]=\"data.circumferences\"\r\n                [attr.stroke-dashoffset]=\"data.offset\"\r\n                stroke=\"white\"\r\n                fill=\"black\">\r\n            </circle>\r\n        </mask>\r\n        <mask id=\"inverted-{{maskId}}\" maskUnits=\"userSpaceOnUse\">\r\n            <circle class=\"progress-bar mask\" [ngClass]=\"data.progress > 0 ? 'animate' : ''\"\r\n                shape-rendering=\"geometricPrecision\"\r\n                cx=\"50%\"\r\n                cy=\"50%\"\r\n                [attr.r]=\"data.radius\"\r\n                [attr.stroke-dasharray]=\"data.circumferences\"\r\n                [attr.stroke-dashoffset]=\"data.offset - data.circumferences\"\r\n                fill=\"black\">\r\n            </circle>\r\n        </mask>\r\n    </defs>\r\n</svg>\r\n\r\n<span>{{data.progress}} %</span>\r\n","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { ProgressbarComponent } from \"./ui/progressbar\";\r\nimport { ProgressbarCircleComponent } from \"./ui/progressbar-circle\";\r\n\r\n@NgModule({\r\n    imports: [\r\n        CommonModule\r\n    ],\r\n    exports: [\r\n        ProgressbarComponent,\r\n        ProgressbarCircleComponent\r\n    ],\r\n    declarations: [\r\n        ProgressbarComponent,\r\n        ProgressbarCircleComponent\r\n    ],\r\n    providers: [],\r\n})\r\nexport class NgxFileUploadUiProgressbarModule { }\r\n","import { NgModule } from \"@angular/core\";\r\nimport { FileBrowserDirective } from \"./src/file-browser\";\r\n\r\n@NgModule({\r\n    imports: [],\r\n    exports: [FileBrowserDirective],\r\n    declarations: [FileBrowserDirective],\r\n    providers: [],\r\n})\r\nexport class NgxFileUploadUiFileBrowserModule { }\r\n","export * from \"./src/upload-view\";\r\n\r\nimport { NgModule } from \"@angular/core\";\r\nimport { CancelAblePipe } from \"./src/cancelable.pipe\";\r\nimport { FileSizePipe } from \"./src/file-size.pipe\";\r\nimport { StateToStringPipe } from \"./src/state-to-string.pipe\";\r\n\r\n@NgModule({\r\n    imports: [],\r\n    exports: [\r\n        StateToStringPipe,\r\n        FileSizePipe,\r\n        CancelAblePipe\r\n    ],\r\n    declarations: [\r\n        StateToStringPipe,\r\n        FileSizePipe,\r\n        CancelAblePipe\r\n    ],\r\n    providers: [],\r\n})\r\nexport class NgxFileUploadUiCommonModule { }\r\n","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { NgxFileUploadUiCommonModule } from \"../common/main\";\r\nimport { UploadItemComponent } from \"./src/upload-item\";\r\n\r\n@NgModule({\r\n    imports: [\r\n        CommonModule,\r\n        NgxFileUploadUiCommonModule\r\n    ],\r\n    exports: [UploadItemComponent],\r\n    declarations: [UploadItemComponent],\r\n    providers: [],\r\n})\r\nexport class NgxFileUploadUiItemModule { }\r\n","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\nimport { UploadViewComponent } from \"./common/src/upload-view\";\r\n\r\nimport { NgxFileUploadUiToolbarModule } from \"./toolbar/main\";\r\nimport { NgxFileUploadUiProgressbarModule } from \"./progressbar/main\";\r\nimport { NgxFileUploadUiFileBrowserModule } from \"./file-browser/main\";\r\nimport { NgxFileUploadUiItemModule } from \"./upload-item/main\";\r\nimport { NgxFileUploadUiCommonModule } from \"./common/main\";\r\n\r\n@NgModule({\r\n    declarations: [\r\n        UploadViewComponent,\r\n    ],\r\n    imports: [\r\n        CommonModule,\r\n        NgxFileUploadUiProgressbarModule,\r\n        NgxFileUploadUiCommonModule,\r\n        NgxFileUploadUiToolbarModule,\r\n        NgxFileUploadUiItemModule,\r\n        NgxFileUploadUiFileBrowserModule\r\n    ],\r\n    exports: [\r\n        NgxFileUploadUiCommonModule,\r\n        NgxFileUploadUiProgressbarModule,\r\n        NgxFileUploadUiCommonModule,\r\n        NgxFileUploadUiToolbarModule,\r\n        NgxFileUploadUiItemModule,\r\n        NgxFileUploadUiFileBrowserModule,\r\n        UploadViewComponent,\r\n    ]\r\n})\r\nexport class NgxFileUploadUiModule {}\r\n","/*\r\n * Public API Surface of @ngx-file-upload/ui\r\n */\r\nexport * from \"./lib/ui.module\";\r\n\r\nexport * from \"./lib/common/main\";\r\nexport * from \"./lib/file-browser/main\";\r\nexport * from \"./lib/file-browser/src/file-browser\";\r\n\r\nexport * from \"./lib/progressbar/main\";\r\nexport * from \"./lib/progressbar/src/ui/progressbar\";\r\nexport * from \"./lib/progressbar/src/ui/progressbar-circle\";\r\n\r\nexport * from \"./lib/toolbar/main\";\r\nexport * from \"./lib/toolbar/src/toolbar\";\r\n\r\nexport * from \"./lib/upload-item/main\";\r\nexport * from \"./lib/upload-item/src/upload-item\";\r\nexport * from \"./lib/upload-item/src/upload.control\";\r\n\r\nexport * from \"./lib/common/src/cancelable.pipe\"\r\nexport * from \"./lib/common/src/file-size.pipe\"\r\nexport * from \"./lib/common/src/state-to-string.pipe\"\r\n\r\nexport { NgxFileUploadUiI18n, NGX_FILE_UPLOAD_UI_I18N } from \"./lib/i18n\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxFileUploadUiI18nProvider","i3.StateToStringPipe","i4.FileSizePipe","i5.CancelAblePipe","i3.UploadToolbarComponent","i4.UploadItemComponent","i5.FileBrowserDirective","i1"],"mappings":"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"}