@dbg-riskit/angular-file 20.0.1 → 20.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"dbg-riskit-angular-file.mjs","sources":["../../../../pkg/dbg-riskit/angular-file/src/lib/file.size.pipe.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/abstract.file.download.directive.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/abstract.file.upload.component.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/binary.file.upload.service.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/binary.file.upload.component.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/abstract.file.upload.component.html","../../../../pkg/dbg-riskit/angular-file/src/lib/csv.file.download.directive.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/csv.file.upload.service.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/csv.file.upload.component.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/text.file.upload.service.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/text.file.upload.component.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/download.menu.component.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/download.menu.component.html","../../../../pkg/dbg-riskit/angular-file/src/lib/file.download.directive.ts","../../../../pkg/dbg-riskit/angular-file/src/dbg-riskit-angular-file.ts"],"sourcesContent":["// Copyright 2017 The Kubernetes Authors.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport {DecimalPipe} from '@angular/common';\nimport {inject, LOCALE_ID, Pipe, PipeTransform} from '@angular/core';\nimport {Maybe} from '@dbg-riskit/common';\n\n@Pipe({\n name: 'riskFileSize'\n})\nexport class FileSizePipe implements PipeTransform {\n private readonly base = 1024;\n private readonly powerSuffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];\n private readonly decimalPipe = new DecimalPipe(inject(LOCALE_ID));\n\n public transform(value: Maybe<number | string>): string {\n if (value == null) {\n return '';\n }\n\n if (typeof value === 'string') {\n value = parseFloat(value);\n }\n\n let divider = 1;\n let power = 0;\n\n while (value / divider > this.base && power < this.powerSuffixes.length - 1) {\n divider *= this.base;\n power += 1;\n }\n\n const formatted = this.decimalPipe.transform(value / divider, '1.2-2') || '';\n const suffix = this.powerSuffixes[power];\n return suffix ? `${formatted}${suffix}` : formatted;\n }\n}\n","import {Directive, ElementRef, inject, Input} from '@angular/core';\nimport {BaseComponent, DialogService, ProgressLoaderComponent} from '@dbg-riskit/angular-view';\nimport {\n ErrorMessage,\n FileWithContent,\n isEventObject,\n Logger,\n ObservableEvent,\n ObservableEventType,\n ObservableWithProgress,\n ProgressEvent,\n ResultEvent\n} from '@dbg-riskit/common';\nimport 'file-saver';\nimport {EMPTY, Observable, of, Subject} from 'rxjs';\nimport {catchError, filter, finalize, map, take, takeUntil, tap} from 'rxjs/operators';\nimport {FileSizePipe} from './file.size.pipe';\n\n@Directive()\nexport abstract class AbstractFileDownloadDirective<T> extends BaseComponent {\n private readonly elementRef = inject(ElementRef);\n private readonly dialogService = inject(DialogService);\n private readonly fileSizePipe = inject(FileSizePipe);\n private readonly logger = inject(Logger);\n\n @Input()\n public disabled?: boolean | string;\n\n public data?: ObservableWithProgress<T>\n | Observable<T>\n | T;\n\n private isDisabled(): boolean {\n if (this.elementRef.nativeElement.disabled === true) {\n return true;\n }\n\n if (this.disabled == null) {\n return false;\n }\n\n switch (typeof this.disabled) {\n case 'boolean':\n return this.disabled;\n case 'string':\n return this.disabled.toLowerCase() === 'disabled' || this.disabled.toLowerCase() === 'true';\n }\n\n return false;\n }\n\n public download(): void {\n if (this.isDisabled()) {\n return;\n }\n\n if (this.data == null) {\n this.logger.error(new Error('No data provided for download!'));\n return;\n }\n\n this.getDataObservable(this.data).pipe(\n takeUntil(this.destroyed),\n take(1),\n map((data: T) => this.mapToFile(data))\n ).subscribe((file) => this.store(file));\n }\n\n protected abstract mapToFile(data: T): FileWithContent;\n\n private store(file: FileWithContent) {\n setTimeout(() => {\n window.saveAs(file.content, file.filename || 'data.txt');\n });\n }\n\n private getDataObservable(\n data: ObservableWithProgress<T>\n | Observable<T>\n | T\n ): Observable<T> {\n if (!(data instanceof Observable)) {\n return of(data);\n }\n\n return this.downloadWithProgress(data);\n }\n\n private downloadWithProgress(\n observableWithProgress: Observable<T | ObservableEvent<T>>\n ): Observable<T> {\n const canceled = new Subject<void>();\n let dialog: ProgressLoaderComponent | undefined;\n\n return observableWithProgress.pipe(\n takeUntil(canceled),\n takeUntil(this.destroyed),\n tap((event) => {\n dialog = this.updateProgress(event, dialog, canceled);\n }),\n filter((event) => !isEventObject(event)\n || (event as ObservableEvent<T>).type === ObservableEventType.Result),\n map((event) => {\n if (isEventObject(event)) {\n const resultEvent = event as ResultEvent<T>;\n return resultEvent.result;\n }\n return event as T;\n }),\n catchError((err) => this.processError(err)),\n finalize(() => {\n if (dialog != null) {\n dialog.close();\n }\n })\n );\n }\n\n private updateProgress(event: T | ObservableEvent<T>,\n dialog: ProgressLoaderComponent | undefined,\n canceledSubject: Subject<void>) {\n if (isEventObject(event) && (event as ObservableEvent<T>).type === ObservableEventType.Progress) {\n const progressEvent = event as ProgressEvent;\n if (dialog == null) {\n dialog = this.dialogService.showProgressLoaderDialog({\n title : 'Downloading file...',\n cancel : () => {\n canceledSubject.next();\n canceledSubject.complete();\n },\n valueFormatter: this.fileSizePipe\n });\n }\n dialog.value = progressEvent.current;\n dialog.total = progressEvent.total;\n }\n return dialog;\n }\n\n private processError(err: ErrorMessage | object) {\n let title: string | undefined = 'Failed to download file:';\n let message;\n if ('errorType' in (err as ErrorMessage)) {\n const errorMessage: ErrorMessage = err as ErrorMessage;\n switch (errorMessage.status) {\n case 401:\n case 403:\n message = 'You are not authorized to download this file.';\n break;\n case 404:\n message = 'File not found.';\n break;\n default:\n message = errorMessage.message;\n }\n } else {\n if ('message' in err) {\n message = err.message;\n } else {\n message = 'Failed to download file.';\n title = undefined;\n }\n }\n this.dialogService.showMessageDialog({\n dialogType: 'error',\n icon : 'cloud_off',\n title,\n message\n });\n return EMPTY;\n }\n\n /**\n * Blob constructor for testing purposes.\n */\n public createBlob(data: BlobPart[], contentType?: BlobPropertyBag) {\n return new Blob(data, contentType);\n }\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n Output,\n Renderer2,\n ViewChild\n} from '@angular/core';\nimport {MatAnchor} from '@angular/material/button';\nimport {MatColorTheme} from '@dbg-riskit/angular-common';\nimport {BaseComponent} from '@dbg-riskit/angular-view';\nimport {ErrorMessage, ErrorType, toString} from '@dbg-riskit/common';\nimport {Observable} from 'rxjs';\nimport {first, takeUntil} from 'rxjs/operators';\nimport {IFile} from './file.types';\n\n@Directive()\nexport abstract class AbstractFileUploadComponent<T extends IFile> extends BaseComponent implements AfterViewInit {\n private readonly renderer = inject(Renderer2);\n\n @Output()\n public readonly error = new EventEmitter<ErrorMessage>(true);\n\n @Input()\n public label?: string;\n\n @Input()\n public accept?: string;\n\n @Input()\n public multiple = true;\n\n @Output()\n public readonly filesLoaded = new EventEmitter<T[]>(true);\n\n @ViewChild(MatAnchor, {read: ElementRef})\n public anchor?: ElementRef;\n\n @ViewChild('fileInput')\n public fileInput?: ElementRef;\n\n @ViewChild('wrapper')\n public wrapper?: ElementRef;\n\n private offset: number = 0;\n\n public fileInputHidden = false;\n\n @Input()\n public raised = true;\n\n @Input()\n public color: MatColorTheme = 'primary';\n\n @Input()\n public icon?: string;\n\n @Input()\n public disabled = false;\n\n public ngAfterViewInit(): void {\n this.offset = this.wrapper!.nativeElement.getBoundingClientRect().left\n - this.anchor!.nativeElement.getBoundingClientRect().left\n + (this.wrapper!.nativeElement.getBoundingClientRect().width / 2);\n }\n\n public move(event: MouseEvent) {\n if (this.fileInput && event.target !== this.fileInput.nativeElement && this.anchor) {\n const diff = (event.target as HTMLElement)?.getBoundingClientRect().left\n - (event.currentTarget as HTMLElement)?.getBoundingClientRect().left\n - this.offset;\n this.renderer.setStyle(this.wrapper!.nativeElement, 'left', `${event.offsetX + diff}px`);\n }\n }\n\n public handleFiles(fileList: FileList) {\n // Check for the various File API support.\n if ('FileReader' in window) {\n this.readFiles(fileList).pipe(\n takeUntil(this.destroyed),\n first()\n ).subscribe({\n next : (files: T[]) => {\n this.filesLoaded.emit(files);\n this.resetInputField();\n },\n error: (error: string) => {\n this.error.emit({\n message : toString(error),\n errorType: ErrorType.ERROR,\n status : 0\n });\n this.resetInputField();\n }\n });\n } else {\n this.error.emit({\n message : 'FileReader is not supported in your browser! A newer browser (IE 11+, Chrome 50+, '\n + 'FireFox 50+, Safari 9+) is required to use this application.',\n errorType: ErrorType.ERROR,\n status : 0\n });\n }\n }\n\n protected abstract readFiles(fileList: FileList): Observable<T[]>;\n\n // Hide and show the input field to reset the selection\n private resetInputField() {\n this.fileInputHidden = true;\n setTimeout(() => {\n this.fileInputHidden = false;\n });\n }\n}\n","import {Injectable} from '@angular/core';\nimport {base64encode} from '@dbg-riskit/common';\nimport {forkJoin, Observable, Subscriber} from 'rxjs';\nimport {BinaryFile} from './file.types';\n\n@Injectable({providedIn: 'root'})\nexport class BinaryFileUploadService {\n\n public readFiles(files: FileList): Observable<BinaryFile[]> {\n const fileOservables: Array<Observable<BinaryFile>> = [];\n for (const file of Array.from(files)) {\n fileOservables.push(new Observable((observer: Subscriber<BinaryFile>) => {\n setTimeout(() => {\n try {\n const reader = new FileReader();\n // Handle errors load\n reader.onload = (event: ProgressEvent<FileReader>) => {\n observer.next({\n bodyBase64: base64encode(\n ((event.target as FileReader).result) as ArrayBuffer),\n file\n });\n observer.complete();\n };\n reader.onerror = (event: ProgressEvent<FileReader>) => {\n observer.error((event.target as FileReader).error);\n };\n // Read file into memory as UTF-8\n reader.readAsArrayBuffer(file);\n } catch (err) {\n observer.error(err);\n }\n });\n }));\n }\n return forkJoin(fileOservables);\n }\n}\n","import {ChangeDetectionStrategy, Component, inject} from '@angular/core';\nimport {MatButton} from '@angular/material/button';\nimport {MatIcon} from '@angular/material/icon';\nimport {Observable} from 'rxjs';\nimport {AbstractFileUploadComponent} from './abstract.file.upload.component';\nimport {BinaryFileUploadService} from './binary.file.upload.service';\nimport {BinaryFile} from './file.types';\n\n@Component({\n selector : 'risk-binary-file-upload',\n templateUrl : 'abstract.file.upload.component.html',\n styleUrls : [\n '../../../component.scss',\n 'abstract.file.upload.component.scss'\n ],\n host : {\n '[class.risk-binary-file-upload]': 'true'\n },\n changeDetection : ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false,\n imports : [MatButton, MatIcon]\n})\nexport class BinaryFileUploadComponent extends AbstractFileUploadComponent<BinaryFile> {\n private readonly fileUploadService = inject(BinaryFileUploadService);\n\n protected readFiles(fileList: FileList): Observable<BinaryFile[]> {\n return this.fileUploadService.readFiles(fileList);\n }\n}\n","@if (raised) {\n <a\n (mousemove)=\"move($event)\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-raised-button>\n @if (icon) {\n <mat-icon>{{ icon }}</mat-icon>\n }\n {{ label }}\n <div #wrapper\n class=\"risk-file-upload-input-wrapper\">\n @if (!fileInputHidden) {\n <input #fileInput\n (change)=\"handleFiles($event.target.files)\"\n [accept]=\"accept\"\n [disabled]=\"disabled\"\n [multiple]=\"multiple\"\n id=\"fileInput\"\n title=\"\"\n type=\"file\">\n }\n </div>\n </a>\n} @else {\n <a (mousemove)=\"move($event)\"\n [color]=\"color\"\n [disabled]=\"disabled\"\n mat-button>\n @if (icon) {\n <mat-icon>{{ icon }}</mat-icon>\n }\n {{ label }}\n <div #wrapper\n class=\"risk-file-upload-input-wrapper\">\n @if (!fileInputHidden) {\n <input #fileInput\n (change)=\"handleFiles($event.target.files)\"\n [accept]=\"accept\"\n [disabled]=\"disabled\"\n [multiple]=\"multiple\"\n id=\"fileInput\"\n title=\"\"\n type=\"file\">\n }\n </div>\n </a>\n}\n","import {Directive, inject, Input} from '@angular/core';\nimport {DateFormatter} from '@dbg-riskit/angular-view';\nimport {CONTENT_TYPE, FileWithContent, ObservableWithProgress, toString} from '@dbg-riskit/common';\nimport {Observable} from 'rxjs';\nimport {AbstractFileDownloadDirective} from './abstract.file.download.directive';\nimport {FileSizePipe} from './file.size.pipe';\nimport {CSVExportColumn} from './file.types';\n\n@Directive({\n selector : '[risk-csv-download]',\n host : {\n '[class.risk-csv-download]': 'true',\n '(click)' : 'download()'\n },\n providers: [\n FileSizePipe\n ]\n})\nexport class CSVFileDownloadDirective extends AbstractFileDownloadDirective<unknown[]> {\n private readonly dateFormatter = inject(DateFormatter);\n\n @Input('risk-csv-download-columns')\n public columns?: Array<CSVExportColumn<unknown>>;\n\n @Input('risk-csv-download')\n public data?: ObservableWithProgress<unknown[]>\n | Observable<unknown[]>\n | unknown[];\n\n @Input('risk-csv-download-filename')\n public filename = 'data.csv';\n\n @Input('risk-csv-download-crlf')\n public crlfLineEnding = false;\n\n protected mapToFile(data: unknown[]): FileWithContent {\n let csvFile = '';\n\n if (this.columns) {\n csvFile += this.createHeader();\n\n for (const row of data) {\n csvFile += this.processRow(row);\n }\n }\n\n return {\n filename: this.filename,\n content : this.createBlob([csvFile], {type: CONTENT_TYPE.TEXT_CSV})\n };\n }\n\n private processRow(row: unknown): string {\n return this.columns!.map((column: CSVExportColumn<unknown>) => {\n const value = column.get(row);\n let innerValue = toString(value);\n\n if (value instanceof Date) {\n innerValue = this.dateFormatter.transform(value) || '';\n }\n\n let result = innerValue.replace(/\"/g, '\"\"');\n\n if (result.search(/([\",\\n])/g) >= 0) {\n result = `\"${result}\"`;\n }\n\n return result;\n }).join(',') + this.getLineEnding();\n }\n\n private createHeader(): string {\n return this.columns!.map((column: CSVExportColumn<unknown>) => {\n const innerValue = toString(column.header);\n let result = innerValue.replace(/\"/g, '\"\"');\n if (result.search(/([\",\\n])/g) >= 0) {\n result = `\"${result}\"`;\n }\n return result;\n }).join(',') + this.getLineEnding();\n }\n\n private getLineEnding() {\n if (this.crlfLineEnding) {\n return '\\r\\n';\n }\n return '\\n';\n }\n}\n","import {Injectable} from '@angular/core';\nimport {toString} from '@dbg-riskit/common';\nimport {forkJoin, Observable, Subscriber} from 'rxjs';\nimport {CSVColumnNameMapper, CSVFile} from './file.types';\n\n// Create a regular expression to parse the CSV values.\nconst CSV_FILE_PATTERN = new RegExp(\n (\n // Delimiters.\n '([,;]|\\\\r?\\\\n|\\\\r|^)' +\n\n // Quoted fields.\n '(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|' +\n\n // Standard fields.\n '([^\",;\\\\r\\\\n]*))'\n ),\n 'gi'\n);\n\n@Injectable({providedIn: 'root'})\nexport class CSVFileUploadService {\n\n public readFiles(files: FileList, nameMapper: CSVColumnNameMapper = (name: string) => name): Observable<CSVFile[]> {\n const fileOservables: Array<Observable<CSVFile>> = [];\n for (const file of Array.from(files)) {\n fileOservables.push(new Observable((observer: Subscriber<CSVFile>) => {\n setTimeout(() => {\n try {\n const reader = new FileReader();\n // Handle errors load\n reader.onload = (event: ProgressEvent<FileReader>) => {\n observer.next(\n CSVFileUploadService.getCSVFile(\n toString((event.target as FileReader).result),\n file,\n nameMapper)\n );\n observer.complete();\n };\n reader.onerror = (event: ProgressEvent<FileReader>) => {\n observer.error((event.target as FileReader).error);\n };\n // Read file into memory as UTF-8\n reader.readAsText(file);\n } catch (err) {\n observer.error(err);\n }\n });\n }));\n }\n return forkJoin(fileOservables);\n }\n\n public static getCSVFile(content: string, file: File, nameMapper: CSVColumnNameMapper,\n startFromRow?: number): CSVFile {\n // Create an array to hold our data. Give the array\n // a default empty first row.\n let arrData: string[][] = [[]];\n\n // Create an array to hold our individual pattern\n // matching groups.\n\n // Keep looping over the regular expression matches\n // until we can no longer find a match.\n while (true) {\n const arrMatches = CSV_FILE_PATTERN.exec(content);\n if (arrMatches == null) {\n break;\n }\n\n // Get the delimiter that was found.\n const strMatchedDelimiter = arrMatches[1];\n\n // Check to see if the given delimiter has a length\n // (is not the start of string) and if it matches\n // field delimiter. If id does not, then we know\n // that this delimiter is a row delimiter.\n if (strMatchedDelimiter.length && strMatchedDelimiter !== ',' && strMatchedDelimiter !== ';') {\n // Since we have reached a new row of data,\n // add an empty row to our data array.\n arrData.push([]);\n }\n\n let strMatchedValue;\n\n // Now that we have our delimiter out of the way,\n // let's check to see which kind of value we\n // captured (quoted or unquoted).\n if (arrMatches[2]) {\n\n // We found a quoted value. When we capture\n // this value, unescape any double quotes.\n strMatchedValue = arrMatches[2].replace(\n new RegExp('\"\"', 'g'),\n '\"'\n );\n\n } else {\n\n // We found a non-quoted value.\n strMatchedValue = arrMatches[3];\n\n }\n\n // Now that we have our value string, let's add\n // it to the data array.\n arrData[arrData.length - 1].push(strMatchedValue);\n }\n\n // Filter out empty rows\n arrData = arrData.filter((dataRow: string[]) => {\n return dataRow.some((item: string) => item != null && item.trim() !== '');\n });\n\n // Return the parsed data.\n const fromRow = startFromRow ? startFromRow : 0;\n return {\n header: arrData[fromRow],\n body : arrData.slice(fromRow + 1).map((dataRow: string[]) => {\n const row: { [key: string]: string } = {};\n for (let i = 0; i < arrData[fromRow].length; i++) {\n row[nameMapper(arrData[fromRow][i])] = dataRow[i];\n }\n return row;\n }),\n file : {\n name: file.name,\n size: file.size,\n type: file.type\n }\n };\n }\n}\n","import {ChangeDetectionStrategy, Component, inject, Input} from '@angular/core';\nimport {MatButton} from '@angular/material/button';\nimport {MatIcon} from '@angular/material/icon';\nimport {Observable, of, throwError} from 'rxjs';\nimport {switchMap} from 'rxjs/operators';\nimport {AbstractFileUploadComponent} from './abstract.file.upload.component';\nimport {CSVFileUploadService} from './csv.file.upload.service';\nimport {CSVColumnNameMapper, CSVFile, CSVValidator} from './file.types';\n\n@Component({\n selector : 'risk-csv-file-upload',\n templateUrl : 'abstract.file.upload.component.html',\n styleUrls : [\n '../../../component.scss',\n 'abstract.file.upload.component.scss'\n ],\n host : {\n '[class.risk-csv-file-upload]': 'true'\n },\n changeDetection : ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false,\n imports : [MatButton, MatIcon]\n})\nexport class CSVFileUploadComponent extends AbstractFileUploadComponent<CSVFile> {\n private readonly fileUploadService = inject(CSVFileUploadService);\n\n @Input()\n public validator?: CSVValidator;\n\n @Input()\n public nameMapper?: CSVColumnNameMapper;\n\n protected readFiles(fileList: FileList): Observable<CSVFile[]> {\n return this.fileUploadService.readFiles(fileList, this.nameMapper).pipe(\n switchMap((files: CSVFile[]) => {\n const validationErrors: string[] = [];\n if (!this.validator || files.every(\n (file: CSVFile) => {\n const result = this.validator!(file);\n if (!result.result && result.messages != null) {\n result.messages.forEach((message: string) => {\n validationErrors.push(message);\n });\n }\n return result.result;\n })) {\n return of(files);\n } else {\n return throwError(`<li>${validationErrors.join('</li><li>')}</li>`);\n }\n })\n );\n }\n}\n","import {Injectable} from '@angular/core';\nimport {toString} from '@dbg-riskit/common';\nimport {forkJoin, Observable, Subscriber} from 'rxjs';\nimport {TextFile} from './file.types';\n\n@Injectable({providedIn: 'root'})\nexport class TextFileUploadService {\n\n public readFiles(files: FileList): Observable<TextFile[]> {\n const fileOservables: Array<Observable<TextFile>> = [];\n for (const file of Array.from(files)) {\n fileOservables.push(new Observable((observer: Subscriber<TextFile>) => {\n setTimeout(() => {\n try {\n const reader = new FileReader();\n // Handle errors load\n reader.onload = (event: ProgressEvent<FileReader>) => {\n observer.next({\n body: toString((event.target as FileReader).result),\n file\n });\n observer.complete();\n };\n reader.onerror = (event: ProgressEvent<FileReader>) => {\n observer.error((event.target as FileReader).error);\n };\n // Read file into memory as UTF-8\n reader.readAsText(file);\n } catch (err) {\n observer.error(err);\n }\n });\n }));\n }\n return forkJoin(fileOservables);\n }\n}\n","import {ChangeDetectionStrategy, Component, inject} from '@angular/core';\nimport {MatButton} from '@angular/material/button';\nimport {MatIcon} from '@angular/material/icon';\nimport {Observable} from 'rxjs';\nimport {AbstractFileUploadComponent} from './abstract.file.upload.component';\nimport {TextFile} from './file.types';\nimport {TextFileUploadService} from './text.file.upload.service';\n\n@Component({\n selector : 'risk-text-file-upload',\n templateUrl : 'abstract.file.upload.component.html',\n styleUrls : [\n '../../../component.scss',\n 'abstract.file.upload.component.scss'\n ],\n host : {\n '[class.risk-text-file-upload]': 'true'\n },\n changeDetection : ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false,\n imports : [MatButton, MatIcon]\n})\nexport class TextFileUploadComponent extends AbstractFileUploadComponent<TextFile> {\n private readonly fileUploadService = inject(TextFileUploadService);\n\n protected readFiles(fileList: FileList): Observable<TextFile[]> {\n return this.fileUploadService\n .readFiles(fileList);\n }\n}\n","import {ChangeDetectionStrategy, Component, Input} from '@angular/core';\nimport {MatButton} from '@angular/material/button';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from '@angular/material/menu';\nimport {MatTooltip} from '@angular/material/tooltip';\nimport {Observable} from 'rxjs';\nimport {CSVFileDownloadDirective} from './csv.file.download.directive';\nimport {CSVExportColumn} from './file.types';\n\n@Component({\n selector : 'risk-download-menu',\n templateUrl : 'download.menu.component.html',\n styleUrls : [\n '../../../component.scss',\n 'download.menu.component.scss'\n ],\n host : {\n '[class.risk-download-menu]': 'true'\n },\n changeDetection : ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false,\n imports : [\n MatMenu,\n MatMenuItem,\n CSVFileDownloadDirective,\n MatButton,\n MatMenuTrigger,\n MatTooltip,\n MatIcon\n ]\n})\nexport class CSVDownloadMenuComponent {\n\n @Input()\n public menuLabel = 'Download';\n\n @Input()\n public menuTooltip?: string;\n\n @Input()\n public columns?: Array<CSVExportColumn<unknown>>;\n\n @Input()\n public data?: unknown[] | Observable<unknown[]>;\n\n @Input()\n public disabled = false;\n\n @Input()\n public filename?: string;\n}\n","<mat-menu #downloadMenu=\"matMenu\"\n [overlapTrigger]=\"false\">\n <a mat-menu-item\n [risk-csv-download]=\"data\"\n [risk-csv-download-columns]=\"columns\"\n [risk-csv-download-filename]=\"filename\"\n [risk-csv-download-crlf]=\"true\">\n As CSV file (Windows)\n </a>\n <a mat-menu-item\n [risk-csv-download]=\"data\"\n [risk-csv-download-columns]=\"columns\"\n [risk-csv-download-filename]=\"filename\">\n As CSV file (Unix)\n </a>\n</mat-menu>\n\n<button mat-button\n #menu=\"matMenuTrigger\"\n [disabled]=\"disabled\"\n [matMenuTriggerFor]=\"downloadMenu\"\n [class.risk-menu-open]=\"menu.menuOpen\"\n [matTooltip]=\"menuTooltip\">\n <mat-icon>file_download</mat-icon>\n {{ menuLabel }}\n</button>\n","import {Directive, Input} from '@angular/core';\nimport {FileWithContent, ObservableWithProgress} from '@dbg-riskit/common';\nimport {Observable} from 'rxjs';\nimport {AbstractFileDownloadDirective} from './abstract.file.download.directive';\nimport {FileSizePipe} from './file.size.pipe';\n\nexport type SupportedDownloadFormats = FileWithContent | Blob | object | string;\n\n@Directive({\n selector : '[risk-download]',\n host : {\n '[class.risk-download]': 'true',\n '(click)' : 'download()'\n },\n providers: [\n FileSizePipe\n ]\n})\nexport class FileDownloadDirective extends AbstractFileDownloadDirective<SupportedDownloadFormats> {\n\n @Input('risk-download')\n public data?: ObservableWithProgress<SupportedDownloadFormats>\n | Observable<SupportedDownloadFormats>\n | SupportedDownloadFormats;\n\n @Input('risk-download-content-type')\n public contentType?: string;\n\n @Input('risk-download-filename')\n public filename?: string;\n\n protected mapToFile(data: SupportedDownloadFormats): FileWithContent {\n const filename: string = this.filename || 'data.txt';\n if (data instanceof Blob) {\n return {\n content: data,\n filename\n };\n }\n\n if (typeof data === 'object' && 'content' in data && data.content instanceof Blob) {\n return {\n content : data.content,\n filename: data.filename || filename\n };\n }\n\n const stringData = typeof data === 'string' ? data : JSON.stringify(data);\n return {\n content: this.createBlob([stringData], {type: this.contentType}),\n filename\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dbg-riskit-angular-file.mjs","sources":["../../../../pkg/dbg-riskit/angular-file/src/lib/file.size.pipe.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/abstract.file.download.directive.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/abstract.file.upload.component.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/binary.file.upload.service.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/binary.file.upload.component.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/abstract.file.upload.component.html","../../../../pkg/dbg-riskit/angular-file/src/lib/csv.file.download.directive.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/csv.file.upload.service.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/csv.file.upload.component.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/text.file.upload.service.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/text.file.upload.component.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/download.menu.component.ts","../../../../pkg/dbg-riskit/angular-file/src/lib/download.menu.component.html","../../../../pkg/dbg-riskit/angular-file/src/lib/file.download.directive.ts","../../../../pkg/dbg-riskit/angular-file/src/dbg-riskit-angular-file.ts"],"sourcesContent":["// Copyright 2017 The Kubernetes Authors.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport {DecimalPipe} from '@angular/common';\nimport {inject, LOCALE_ID, Pipe, PipeTransform} from '@angular/core';\nimport {Maybe} from '@dbg-riskit/common';\n\n@Pipe({\n name: 'riskFileSize'\n})\nexport class RiskFileSizePipe implements PipeTransform {\n private readonly base = 1024;\n private readonly powerSuffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];\n private readonly decimalPipe = new DecimalPipe(inject(LOCALE_ID));\n\n public transform(value: Maybe<number | string>): string {\n if (value == null) {\n return '';\n }\n\n if (typeof value === 'string') {\n value = parseFloat(value);\n }\n\n let divider = 1;\n let power = 0;\n\n while (value / divider > this.base && power < this.powerSuffixes.length - 1) {\n divider *= this.base;\n power += 1;\n }\n\n const formatted = this.decimalPipe.transform(value / divider, '1.2-2') || '';\n const suffix = this.powerSuffixes[power];\n return suffix ? `${formatted}${suffix}` : formatted;\n }\n}\n","import {afterNextRender, DestroyRef, Directive, ElementRef, inject, Injector, input, Signal} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {RiskDialogService, RiskProgressLoaderComponent} from '@dbg-riskit/angular-view';\nimport {\n ErrorMessage,\n FileWithContent,\n isEventObject,\n Logger,\n ObservableEvent,\n ObservableEventType,\n ObservableWithProgress,\n ProgressEvent,\n ResultEvent\n} from '@dbg-riskit/common';\nimport 'file-saver';\nimport {EMPTY, Observable, of, Subject} from 'rxjs';\nimport {catchError, filter, finalize, map, take, tap} from 'rxjs/operators';\nimport {RiskFileSizePipe} from './file.size.pipe';\n\n@Directive()\nexport abstract class AbstractRiskFileDownloadDirective<T> {\n private readonly elementRef = inject(ElementRef);\n private readonly dialogService = inject(RiskDialogService);\n private readonly fileSizePipe = inject(RiskFileSizePipe);\n private readonly logger = inject(Logger);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n\n public readonly disabled = input<boolean | string>();\n\n public abstract data: Signal<\n ObservableWithProgress<T>\n | Observable<T>\n | T\n >;\n\n private isDisabled(): boolean {\n if (this.elementRef.nativeElement.disabled === true) {\n return true;\n }\n\n const disabledValue = this.disabled();\n if (disabledValue == null) {\n return false;\n }\n\n switch (typeof disabledValue) {\n case 'boolean':\n return disabledValue;\n case 'string':\n return disabledValue.toLowerCase() === 'disabled' || disabledValue.toLowerCase() === 'true';\n }\n\n return false;\n }\n\n public download(): void {\n if (this.isDisabled()) {\n return;\n }\n\n if (this.data == null) {\n this.logger.error(new Error('No data provided for download!'));\n return;\n }\n\n this.getDataObservable(this.data()).pipe(\n takeUntilDestroyed(this.destroyRef),\n take(1),\n map((data: T) => this.mapToFile(data))\n ).subscribe((file) => this.store(file));\n }\n\n protected abstract mapToFile(data: T): FileWithContent;\n\n private store(file: FileWithContent) {\n afterNextRender(() => {\n window.saveAs(file.content, file.filename || 'data.txt');\n }, {injector: this.injector});\n }\n\n private getDataObservable(\n data: ObservableWithProgress<T>\n | Observable<T>\n | T\n ): Observable<T> {\n if (!(data instanceof Observable)) {\n return of(data);\n }\n\n return this.downloadWithProgress(data);\n }\n\n private downloadWithProgress(\n observableWithProgress: Observable<T | ObservableEvent<T>>\n ): Observable<T> {\n const canceled = new Subject<void>();\n let dialog: RiskProgressLoaderComponent | undefined;\n\n return observableWithProgress.pipe(\n takeUntilDestroyed(this.destroyRef),\n tap((event) => {\n dialog = this.updateProgress(event, dialog, canceled);\n }),\n filter((event) => !isEventObject(event)\n || (event as ObservableEvent<T>).type === ObservableEventType.Result),\n map((event) => {\n if (isEventObject(event)) {\n const resultEvent = event as ResultEvent<T>;\n return resultEvent.result;\n }\n return event as T;\n }),\n catchError((err) => this.processError(err)),\n finalize(() => {\n if (dialog != null) {\n dialog.close();\n }\n })\n );\n }\n\n private updateProgress(event: T | ObservableEvent<T>,\n dialog: RiskProgressLoaderComponent | undefined,\n canceledSubject: Subject<void>) {\n if (isEventObject(event) && (event as ObservableEvent<T>).type === ObservableEventType.Progress) {\n const progressEvent = event as ProgressEvent;\n if (dialog == null) {\n dialog = this.dialogService.showProgressLoaderDialog({\n title : 'Downloading file...',\n cancel : () => {\n canceledSubject.next();\n canceledSubject.complete();\n },\n valueFormatter: this.fileSizePipe\n });\n }\n dialog.setValue(progressEvent.current);\n dialog.setTotal(progressEvent.total);\n }\n return dialog;\n }\n\n private processError(err: ErrorMessage | object) {\n let title: string | undefined = 'Failed to download file:';\n let message;\n if ('errorType' in (err as ErrorMessage)) {\n const errorMessage: ErrorMessage = err as ErrorMessage;\n switch (errorMessage.status) {\n case 401:\n case 403:\n message = 'You are not authorized to download this file.';\n break;\n case 404:\n message = 'File not found.';\n break;\n default:\n message = errorMessage.message;\n }\n } else {\n if ('message' in err) {\n message = err.message;\n } else {\n message = 'Failed to download file.';\n title = undefined;\n }\n }\n this.dialogService.showMessageDialog({\n dialogType: 'error',\n icon : 'cloud_off',\n title,\n message\n });\n return EMPTY;\n }\n\n /**\n * Blob constructor for testing purposes.\n */\n public createBlob(data: BlobPart[], contentType?: BlobPropertyBag) {\n return new Blob(data, contentType);\n }\n}\n","import {\n afterNextRender,\n computed,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n Injector,\n input,\n linkedSignal,\n output,\n signal,\n viewChild\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {MatAnchor} from '@angular/material/button';\nimport {MatColorTheme} from '@dbg-riskit/angular-common';\nimport {ErrorMessage, ErrorType, toString} from '@dbg-riskit/common';\nimport {Observable} from 'rxjs';\nimport {first} from 'rxjs/operators';\nimport {IFile} from './file.types';\n\n@Directive()\nexport abstract class AbstractRiskFileUploadComponent<T extends IFile> {\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n\n public readonly label = input<string>();\n public readonly accept = input<string>();\n public readonly multiple = input(true);\n public readonly raised = input(true);\n public readonly color = input<MatColorTheme>('primary');\n public readonly icon = input<string>();\n public readonly disabled = input(false);\n\n public readonly error = output<ErrorMessage>();\n public readonly filesLoaded = output<T[]>();\n\n public readonly anchor = viewChild(MatAnchor, {read: ElementRef});\n public readonly fileInput = viewChild<ElementRef>('fileInput');\n public readonly wrapper = viewChild<ElementRef>('wrapper');\n\n private readonly lastMouseMoveEvent = signal<MouseEvent | null>(null);\n\n public move(event: MouseEvent) {\n this.lastMouseMoveEvent.set(event);\n }\n\n private readonly offset = computed(() => {\n const wrapperEl = this.wrapper()?.nativeElement;\n const anchorEl = this.anchor()?.nativeElement;\n if (wrapperEl && anchorEl) {\n return wrapperEl.getBoundingClientRect().left\n - anchorEl.getBoundingClientRect().left\n + (wrapperEl.getBoundingClientRect().width / 2);\n }\n return 0;\n });\n\n public wrapperLeft = linkedSignal({\n source : computed(() => ({\n event : this.lastMouseMoveEvent(),\n fileInput: this.fileInput()?.nativeElement\n })),\n computation: (\n {\n event,\n fileInput\n },\n prev) => {\n if (event == null) {\n return 0;\n }\n\n if (fileInput && event.target !== fileInput) {\n const diff = (event.target as HTMLElement)?.getBoundingClientRect().left\n - (event.currentTarget as HTMLElement)?.getBoundingClientRect().left\n - this.offset();\n return event.offsetX + diff;\n }\n\n return prev?.value ?? 0;\n }\n });\n\n public handleFiles(fileList: FileList) {\n // Check for the various File API support.\n if ('FileReader' in window) {\n this.readFiles(fileList).pipe(\n takeUntilDestroyed(this.destroyRef),\n first()\n ).subscribe({\n next : (files: T[]) => {\n this.filesLoaded.emit(files);\n this.resetInputField();\n },\n error: (error: string) => {\n this.error.emit({\n message : toString(error),\n errorType: ErrorType.ERROR,\n status : 0\n });\n this.resetInputField();\n }\n });\n } else {\n this.error.emit({\n message : 'FileReader is not supported in your browser! A newer browser (IE 11+, Chrome 50+, '\n + 'FireFox 50+, Safari 9+) is required to use this application.',\n errorType: ErrorType.ERROR,\n status : 0\n });\n }\n }\n\n protected abstract readFiles(fileList: FileList): Observable<T[]>;\n\n // Hide and show the input field to reset the selection\n public readonly fileInputHidden = signal(false);\n\n private resetInputField() {\n this.fileInputHidden.set(true);\n afterNextRender(() => {\n this.fileInputHidden.set(false);\n }, {injector: this.injector});\n }\n}\n","import {Injectable} from '@angular/core';\nimport {base64encode} from '@dbg-riskit/common';\nimport {forkJoin, Observable, Subscriber} from 'rxjs';\nimport {BinaryFile} from './file.types';\n\n@Injectable({providedIn: 'root'})\nexport class RiskBinaryFileUploadService {\n\n public readFiles(files: FileList): Observable<BinaryFile[]> {\n const fileOservables: Array<Observable<BinaryFile>> = [];\n for (const file of Array.from(files)) {\n fileOservables.push(new Observable((observer: Subscriber<BinaryFile>) => {\n setTimeout(() => {\n try {\n const reader = new FileReader();\n // Handle errors load\n reader.onload = (event: ProgressEvent<FileReader>) => {\n observer.next({\n bodyBase64: base64encode(\n ((event.target as FileReader).result) as ArrayBuffer),\n file\n });\n observer.complete();\n };\n reader.onerror = (event: ProgressEvent<FileReader>) => {\n observer.error((event.target as FileReader).error);\n };\n // Read file into memory as UTF-8\n reader.readAsArrayBuffer(file);\n } catch (err) {\n observer.error(err);\n }\n });\n }));\n }\n return forkJoin(fileOservables);\n }\n}\n","import {ChangeDetectionStrategy, Component, inject} from '@angular/core';\nimport {MatButton} from '@angular/material/button';\nimport {MatIcon} from '@angular/material/icon';\nimport {Observable} from 'rxjs';\nimport {AbstractRiskFileUploadComponent} from './abstract.file.upload.component';\nimport {RiskBinaryFileUploadService} from './binary.file.upload.service';\nimport {BinaryFile} from './file.types';\n\n@Component({\n selector : 'risk-binary-file-upload',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl : 'abstract.file.upload.component.html',\n styleUrls : [\n '../../../component.scss',\n 'abstract.file.upload.component.scss'\n ],\n host : {\n '[class.risk-binary-file-upload]': 'true'\n },\n imports : [\n MatButton,\n MatIcon\n ]\n})\nexport class RiskBinaryFileUploadComponent extends AbstractRiskFileUploadComponent<BinaryFile> {\n private readonly fileUploadService = inject(RiskBinaryFileUploadService);\n\n protected readFiles(fileList: FileList): Observable<BinaryFile[]> {\n return this.fileUploadService.readFiles(fileList);\n }\n}\n","@if (raised()) {\n <a\n (mousemove)=\"move($event)\"\n [color]=\"color()\"\n [disabled]=\"disabled()\"\n mat-raised-button>\n @if (icon()) {\n <mat-icon>{{ icon() }}</mat-icon>\n }\n {{ label() }}\n <div #wrapper\n class=\"risk-file-upload-input-wrapper\"\n [style.left.px]=\"wrapperLeft()\">\n @if (!fileInputHidden()) {\n <input #fileInput\n (change)=\"handleFiles($event.target.files)\"\n [accept]=\"accept()\"\n [disabled]=\"disabled()\"\n [multiple]=\"multiple()\"\n id=\"fileInput\"\n title=\"\"\n type=\"file\">\n }\n </div>\n </a>\n} @else {\n <a (mousemove)=\"move($event)\"\n [color]=\"color()\"\n [disabled]=\"disabled()\"\n mat-button>\n @if (icon()) {\n <mat-icon>{{ icon() }}</mat-icon>\n }\n {{ label() }}\n <div #wrapper\n class=\"risk-file-upload-input-wrapper\"\n [style.left.px]=\"wrapperLeft()\">\n @if (!fileInputHidden()) {\n <input #fileInput\n (change)=\"handleFiles($event.target.files)\"\n [accept]=\"accept()\"\n [disabled]=\"disabled()\"\n [multiple]=\"multiple()\"\n id=\"fileInput\"\n title=\"\"\n type=\"file\">\n }\n </div>\n </a>\n}\n","import {Directive, inject, input} from '@angular/core';\nimport {RiskDateFormatter} from '@dbg-riskit/angular-view';\nimport {CONTENT_TYPE, FileWithContent, ObservableWithProgress, toString} from '@dbg-riskit/common';\nimport {Observable} from 'rxjs';\nimport {AbstractRiskFileDownloadDirective} from './abstract.file.download.directive';\nimport {RiskFileSizePipe} from './file.size.pipe';\nimport {CSVExportColumn} from './file.types';\n\n@Directive({\n selector : '[risk-csv-download]',\n host : {\n '[class.risk-csv-download]': 'true',\n '(click)' : 'download()'\n },\n providers: [\n RiskFileSizePipe\n ]\n})\nexport class RiskCSVFileDownloadDirective extends AbstractRiskFileDownloadDirective<unknown[]> {\n private readonly dateFormatter = inject(RiskDateFormatter);\n\n public readonly columns = input.required<Array<CSVExportColumn<unknown>>>({alias: 'risk-csv-download-columns'});\n public readonly data = input.required<ObservableWithProgress<unknown[]> | Observable<unknown[]> | unknown[]>(\n {alias: 'risk-csv-download'});\n public readonly filename = input<string>('data.csv', {alias: 'risk-csv-download-filename'});\n public readonly crlfLineEnding = input<boolean>(false, {alias: 'risk-csv-download-crlf'});\n\n protected mapToFile(data: unknown[]): FileWithContent {\n let csvFile = '';\n const columns = this.columns();\n if (columns) {\n csvFile += this.createHeader(columns);\n\n for (const row of data) {\n csvFile += this.processRow(row, columns);\n }\n }\n\n return {\n filename: this.filename(),\n content : this.createBlob([csvFile], {type: CONTENT_TYPE.TEXT_CSV})\n };\n }\n\n private processRow(row: unknown, columns: Array<CSVExportColumn<unknown>>): string {\n return columns.map((column: CSVExportColumn<unknown>) => {\n const value = column.get(row);\n let innerValue = toString(value);\n\n if (value instanceof Date) {\n innerValue = this.dateFormatter.transform(value) || '';\n }\n\n let result = innerValue.replace(/\"/g, '\"\"');\n\n if (result.search(/([\",\\n])/g) >= 0) {\n result = `\"${result}\"`;\n }\n\n return result;\n }).join(',') + this.getLineEnding();\n }\n\n private createHeader(columns: Array<CSVExportColumn<unknown>>): string {\n return columns.map((column: CSVExportColumn<unknown>) => {\n const innerValue = toString(column.header);\n let result = innerValue.replace(/\"/g, '\"\"');\n if (result.search(/([\",\\n])/g) >= 0) {\n result = `\"${result}\"`;\n }\n return result;\n }).join(',') + this.getLineEnding();\n }\n\n private getLineEnding() {\n return this.crlfLineEnding() ? '\\r\\n' : '\\n';\n }\n}\n","import {Injectable} from '@angular/core';\nimport {toString} from '@dbg-riskit/common';\nimport {forkJoin, Observable, Subscriber} from 'rxjs';\nimport {CSVColumnNameMapper, CSVFile} from './file.types';\n\n// Create a regular expression to parse the CSV values.\nconst CSV_FILE_PATTERN = new RegExp(\n (\n // Delimiters.\n '([,;]|\\\\r?\\\\n|\\\\r|^)' +\n\n // Quoted fields.\n '(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|' +\n\n // Standard fields.\n '([^\",;\\\\r\\\\n]*))'\n ),\n 'gi'\n);\n\n@Injectable({providedIn: 'root'})\nexport class RiskCSVFileUploadService {\n\n public readFiles(files: FileList, nameMapper: CSVColumnNameMapper = (name: string) => name): Observable<CSVFile[]> {\n const fileOservables: Array<Observable<CSVFile>> = [];\n for (const file of Array.from(files)) {\n fileOservables.push(new Observable((observer: Subscriber<CSVFile>) => {\n setTimeout(() => {\n try {\n const reader = new FileReader();\n // Handle errors load\n reader.onload = (event: ProgressEvent<FileReader>) => {\n observer.next(\n RiskCSVFileUploadService.getCSVFile(\n toString((event.target as FileReader).result),\n file,\n nameMapper)\n );\n observer.complete();\n };\n reader.onerror = (event: ProgressEvent<FileReader>) => {\n observer.error((event.target as FileReader).error);\n };\n // Read file into memory as UTF-8\n reader.readAsText(file);\n } catch (err) {\n observer.error(err);\n }\n });\n }));\n }\n return forkJoin(fileOservables);\n }\n\n public static getCSVFile(content: string, file: File, nameMapper: CSVColumnNameMapper,\n startFromRow?: number): CSVFile {\n // Create an array to hold our data. Give the array\n // a default empty first row.\n let arrData: string[][] = [[]];\n\n // Create an array to hold our individual pattern\n // matching groups.\n\n // Keep looping over the regular expression matches\n // until we can no longer find a match.\n while (true) {\n const arrMatches = CSV_FILE_PATTERN.exec(content);\n if (arrMatches == null) {\n break;\n }\n\n // Get the delimiter that was found.\n const strMatchedDelimiter = arrMatches[1];\n\n // Check to see if the given delimiter has a length\n // (is not the start of string) and if it matches\n // field delimiter. If id does not, then we know\n // that this delimiter is a row delimiter.\n if (strMatchedDelimiter.length && strMatchedDelimiter !== ',' && strMatchedDelimiter !== ';') {\n // Since we have reached a new row of data,\n // add an empty row to our data array.\n arrData.push([]);\n }\n\n let strMatchedValue;\n\n // Now that we have our delimiter out of the way,\n // let's check to see which kind of value we\n // captured (quoted or unquoted).\n if (arrMatches[2]) {\n\n // We found a quoted value. When we capture\n // this value, unescape any double quotes.\n strMatchedValue = arrMatches[2].replace(\n new RegExp('\"\"', 'g'),\n '\"'\n );\n\n } else {\n\n // We found a non-quoted value.\n strMatchedValue = arrMatches[3];\n\n }\n\n // Now that we have our value string, let's add\n // it to the data array.\n arrData[arrData.length - 1].push(strMatchedValue);\n }\n\n // Filter out empty rows\n arrData = arrData.filter((dataRow: string[]) => {\n return dataRow.some((item: string) => item != null && item.trim() !== '');\n });\n\n // Return the parsed data.\n const fromRow = startFromRow ? startFromRow : 0;\n return {\n header: arrData[fromRow],\n body : arrData.slice(fromRow + 1).map((dataRow: string[]) => {\n const row: { [key: string]: string } = {};\n for (let i = 0; i < arrData[fromRow].length; i++) {\n row[nameMapper(arrData[fromRow][i])] = dataRow[i];\n }\n return row;\n }),\n file : {\n name: file.name,\n size: file.size,\n type: file.type\n }\n };\n }\n}\n","import {ChangeDetectionStrategy, Component, inject, input} from '@angular/core';\nimport {MatButton} from '@angular/material/button';\nimport {MatIcon} from '@angular/material/icon';\nimport {Observable, of, throwError} from 'rxjs';\nimport {switchMap} from 'rxjs/operators';\nimport {AbstractRiskFileUploadComponent} from './abstract.file.upload.component';\nimport {RiskCSVFileUploadService} from './csv.file.upload.service';\nimport {CSVColumnNameMapper, CSVFile, CSVValidator} from './file.types';\n\n@Component({\n selector : 'risk-csv-file-upload',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl : 'abstract.file.upload.component.html',\n styleUrls : [\n '../../../component.scss',\n 'abstract.file.upload.component.scss'\n ],\n host : {\n '[class.risk-csv-file-upload]': 'true'\n },\n imports : [\n MatButton,\n MatIcon\n ]\n})\nexport class RiskCSVFileUploadComponent extends AbstractRiskFileUploadComponent<CSVFile> {\n private readonly fileUploadService = inject(RiskCSVFileUploadService);\n\n public readonly validator = input<CSVValidator>();\n public readonly nameMapper = input<CSVColumnNameMapper>();\n\n protected readFiles(fileList: FileList): Observable<CSVFile[]> {\n return this.fileUploadService.readFiles(fileList, this.nameMapper()).pipe(\n switchMap((files: CSVFile[]) => {\n const validationErrors: string[] = [];\n const validatorFn = this.validator();\n if (!validatorFn || files.every(\n (file: CSVFile) => {\n const result = validatorFn!(file);\n if (!result.result && result.messages != null) {\n result.messages.forEach((message: string) => {\n validationErrors.push(message);\n });\n }\n return result.result;\n })) {\n return of(files);\n } else {\n return throwError(`<li>${validationErrors.join('</li><li>')}</li>`);\n }\n })\n );\n }\n}\n","import {Injectable} from '@angular/core';\nimport {toString} from '@dbg-riskit/common';\nimport {forkJoin, Observable, Subscriber} from 'rxjs';\nimport {TextFile} from './file.types';\n\n@Injectable({providedIn: 'root'})\nexport class RiskTextFileUploadService {\n\n public readFiles(files: FileList): Observable<TextFile[]> {\n const fileOservables: Array<Observable<TextFile>> = [];\n for (const file of Array.from(files)) {\n fileOservables.push(new Observable((observer: Subscriber<TextFile>) => {\n setTimeout(() => {\n try {\n const reader = new FileReader();\n // Handle errors load\n reader.onload = (event: ProgressEvent<FileReader>) => {\n observer.next({\n body: toString((event.target as FileReader).result),\n file\n });\n observer.complete();\n };\n reader.onerror = (event: ProgressEvent<FileReader>) => {\n observer.error((event.target as FileReader).error);\n };\n // Read file into memory as UTF-8\n reader.readAsText(file);\n } catch (err) {\n observer.error(err);\n }\n });\n }));\n }\n return forkJoin(fileOservables);\n }\n}\n","import {ChangeDetectionStrategy, Component, inject} from '@angular/core';\nimport {MatButton} from '@angular/material/button';\nimport {MatIcon} from '@angular/material/icon';\nimport {Observable} from 'rxjs';\nimport {AbstractRiskFileUploadComponent} from './abstract.file.upload.component';\nimport {TextFile} from './file.types';\nimport {RiskTextFileUploadService} from './text.file.upload.service';\n\n@Component({\n selector : 'risk-text-file-upload',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl : 'abstract.file.upload.component.html',\n styleUrls : [\n '../../../component.scss',\n 'abstract.file.upload.component.scss'\n ],\n host : {\n '[class.risk-text-file-upload]': 'true'\n },\n imports : [\n MatButton,\n MatIcon\n ]\n})\nexport class RiskTextFileUploadComponent extends AbstractRiskFileUploadComponent<TextFile> {\n private readonly fileUploadService = inject(RiskTextFileUploadService);\n\n protected readFiles(fileList: FileList): Observable<TextFile[]> {\n return this.fileUploadService.readFiles(fileList);\n }\n}\n","import {ChangeDetectionStrategy, Component, input} from '@angular/core';\nimport {MatButton} from '@angular/material/button';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from '@angular/material/menu';\nimport {MatTooltip} from '@angular/material/tooltip';\nimport {Observable} from 'rxjs';\nimport {RiskCSVFileDownloadDirective} from './csv.file.download.directive';\nimport {CSVExportColumn} from './file.types';\n\n@Component({\n selector : 'risk-download-menu',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl : 'download.menu.component.html',\n styleUrls : [\n '../../../component.scss',\n 'download.menu.component.scss'\n ],\n host : {\n '[class.risk-download-menu]': 'true'\n },\n imports : [\n MatButton,\n MatIcon,\n MatMenu,\n MatMenuItem,\n MatMenuTrigger,\n MatTooltip,\n RiskCSVFileDownloadDirective\n ]\n})\nexport class RiskCSVDownloadMenuComponent {\n\n public readonly menuLabel = input('Download');\n public readonly menuTooltip = input<string>();\n public readonly columns = input<Array<CSVExportColumn<unknown>>>();\n public readonly data = input<unknown[] | Observable<unknown[]>>();\n public readonly disabled = input(false);\n public readonly filename = input<string>();\n}\n","<mat-menu #downloadMenu=\"matMenu\"\n [overlapTrigger]=\"false\">\n <a mat-menu-item\n [risk-csv-download]=\"data()\"\n [risk-csv-download-columns]=\"columns()\"\n [risk-csv-download-filename]=\"filename()\"\n [risk-csv-download-crlf]=\"true\">\n As CSV file (Windows)\n </a>\n <a mat-menu-item\n [risk-csv-download]=\"data()\"\n [risk-csv-download-columns]=\"columns()\"\n [risk-csv-download-filename]=\"filename()\">\n As CSV file (Unix)\n </a>\n</mat-menu>\n\n<button mat-button\n #menu=\"matMenuTrigger\"\n [disabled]=\"disabled()\"\n [matMenuTriggerFor]=\"downloadMenu\"\n [class.risk-menu-open]=\"menu.menuOpen\"\n [matTooltip]=\"menuTooltip()\">\n <mat-icon>file_download</mat-icon>\n {{ menuLabel() }}\n</button>\n","import {Directive, input} from '@angular/core';\nimport {CONTENT_TYPE, FileWithContent, ObservableWithProgress} from '@dbg-riskit/common';\nimport {Observable} from 'rxjs';\nimport {AbstractRiskFileDownloadDirective} from './abstract.file.download.directive';\nimport {RiskFileSizePipe} from './file.size.pipe';\n\nexport type SupportedDownloadFormats = FileWithContent | Blob | object | string;\n\n@Directive({\n selector : '[risk-download]',\n host : {\n '[class.risk-download]': 'true',\n '(click)' : 'download()'\n },\n providers: [\n RiskFileSizePipe\n ]\n})\nexport class RiskFileDownloadDirective extends AbstractRiskFileDownloadDirective<SupportedDownloadFormats> {\n\n public readonly data = input.required<ObservableWithProgress<SupportedDownloadFormats>\n | Observable<SupportedDownloadFormats>\n | SupportedDownloadFormats>({alias: 'risk-download'});\n public readonly contentType = input<string>(CONTENT_TYPE.TEXT_PLAIN, {alias: 'risk-download-content-type'});\n public readonly filename = input<string>('data.txt', {alias: 'risk-download-filename'});\n\n protected mapToFile(data: SupportedDownloadFormats): FileWithContent {\n const filename: string = this.filename();\n if (data instanceof Blob) {\n return {\n content: data,\n filename\n };\n }\n if (typeof data === 'object' && data != null && !('content' in (data as any))) {\n // treat plain object (non FileWithContent) by JSON stringify later\n }\n if (typeof data === 'object' && data != null && 'content' in data) {\n const fc = data as FileWithContent;\n if (fc.content instanceof Blob) {\n return {\n content : fc.content,\n filename: fc.filename || filename\n };\n }\n }\n const stringData = typeof data === 'string' ? data : JSON.stringify(data);\n return {\n content: this.createBlob([stringData], {type: this.contentType()}),\n filename\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,17 +1,18 @@
1
- import { BaseComponent } from '@dbg-riskit/angular-view';
1
+ import * as _angular_core from '@angular/core';
2
+ import { Signal, ElementRef, PipeTransform } from '@angular/core';
2
3
  import { ObservableWithProgress, FileWithContent, ValueGetter, ErrorMessage, Maybe } from '@dbg-riskit/common';
3
4
  import { Observable } from 'rxjs';
4
- import * as i0 from '@angular/core';
5
- import { AfterViewInit, EventEmitter, ElementRef, PipeTransform } from '@angular/core';
6
5
  import { MatColorTheme } from '@dbg-riskit/angular-common';
7
6
 
8
- declare abstract class AbstractFileDownloadDirective<T> extends BaseComponent {
7
+ declare abstract class AbstractRiskFileDownloadDirective<T> {
9
8
  private readonly elementRef;
10
9
  private readonly dialogService;
11
10
  private readonly fileSizePipe;
12
11
  private readonly logger;
13
- disabled?: boolean | string;
14
- data?: ObservableWithProgress<T> | Observable<T> | T;
12
+ private readonly destroyRef;
13
+ private readonly injector;
14
+ readonly disabled: _angular_core.InputSignal<string | boolean | undefined>;
15
+ abstract data: Signal<ObservableWithProgress<T> | Observable<T> | T>;
15
16
  private isDisabled;
16
17
  download(): void;
17
18
  protected abstract mapToFile(data: T): FileWithContent;
@@ -24,8 +25,8 @@ declare abstract class AbstractFileDownloadDirective<T> extends BaseComponent {
24
25
  * Blob constructor for testing purposes.
25
26
  */
26
27
  createBlob(data: BlobPart[], contentType?: BlobPropertyBag): Blob;
27
- static ɵfac: i0.ɵɵFactoryDeclaration<AbstractFileDownloadDirective<any>, never>;
28
- static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractFileDownloadDirective<any>, never, never, { "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, never, true, never>;
28
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AbstractRiskFileDownloadDirective<any>, never>;
29
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AbstractRiskFileDownloadDirective<any>, never, never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
29
30
  }
30
31
 
31
32
  interface File$1 {
@@ -60,116 +61,118 @@ interface BinaryFile extends IFile {
60
61
  bodyBase64: string;
61
62
  }
62
63
 
63
- declare abstract class AbstractFileUploadComponent<T extends IFile> extends BaseComponent implements AfterViewInit {
64
- private readonly renderer;
65
- readonly error: EventEmitter<ErrorMessage>;
66
- label?: string;
67
- accept?: string;
68
- multiple: boolean;
69
- readonly filesLoaded: EventEmitter<T[]>;
70
- anchor?: ElementRef;
71
- fileInput?: ElementRef;
72
- wrapper?: ElementRef;
73
- private offset;
74
- fileInputHidden: boolean;
75
- raised: boolean;
76
- color: MatColorTheme;
77
- icon?: string;
78
- disabled: boolean;
79
- ngAfterViewInit(): void;
64
+ declare abstract class AbstractRiskFileUploadComponent<T extends IFile> {
65
+ private readonly injector;
66
+ private readonly destroyRef;
67
+ readonly label: _angular_core.InputSignal<string | undefined>;
68
+ readonly accept: _angular_core.InputSignal<string | undefined>;
69
+ readonly multiple: _angular_core.InputSignal<boolean>;
70
+ readonly raised: _angular_core.InputSignal<boolean>;
71
+ readonly color: _angular_core.InputSignal<MatColorTheme>;
72
+ readonly icon: _angular_core.InputSignal<string | undefined>;
73
+ readonly disabled: _angular_core.InputSignal<boolean>;
74
+ readonly error: _angular_core.OutputEmitterRef<ErrorMessage>;
75
+ readonly filesLoaded: _angular_core.OutputEmitterRef<T[]>;
76
+ readonly anchor: _angular_core.Signal<ElementRef<any> | undefined>;
77
+ readonly fileInput: _angular_core.Signal<ElementRef<any> | undefined>;
78
+ readonly wrapper: _angular_core.Signal<ElementRef<any> | undefined>;
79
+ private readonly lastMouseMoveEvent;
80
80
  move(event: MouseEvent): void;
81
+ private readonly offset;
82
+ wrapperLeft: _angular_core.WritableSignal<unknown>;
81
83
  handleFiles(fileList: FileList): void;
82
84
  protected abstract readFiles(fileList: FileList): Observable<T[]>;
85
+ readonly fileInputHidden: _angular_core.WritableSignal<boolean>;
83
86
  private resetInputField;
84
- static ɵfac: i0.ɵɵFactoryDeclaration<AbstractFileUploadComponent<any>, never>;
85
- static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractFileUploadComponent<any>, never, never, { "label": { "alias": "label"; "required": false; }; "accept": { "alias": "accept"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "raised": { "alias": "raised"; "required": false; }; "color": { "alias": "color"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "error": "error"; "filesLoaded": "filesLoaded"; }, never, never, true, never>;
87
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AbstractRiskFileUploadComponent<any>, never>;
88
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AbstractRiskFileUploadComponent<any>, never, never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "raised": { "alias": "raised"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "error": "error"; "filesLoaded": "filesLoaded"; }, never, never, true, never>;
86
89
  }
87
90
 
88
- declare class BinaryFileUploadService {
91
+ declare class RiskBinaryFileUploadService {
89
92
  readFiles(files: FileList): Observable<BinaryFile[]>;
90
- static ɵfac: i0.ɵɵFactoryDeclaration<BinaryFileUploadService, never>;
91
- static ɵprov: i0.ɵɵInjectableDeclaration<BinaryFileUploadService>;
93
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RiskBinaryFileUploadService, never>;
94
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<RiskBinaryFileUploadService>;
92
95
  }
93
96
 
94
- declare class BinaryFileUploadComponent extends AbstractFileUploadComponent<BinaryFile> {
97
+ declare class RiskBinaryFileUploadComponent extends AbstractRiskFileUploadComponent<BinaryFile> {
95
98
  private readonly fileUploadService;
96
99
  protected readFiles(fileList: FileList): Observable<BinaryFile[]>;
97
- static ɵfac: i0.ɵɵFactoryDeclaration<BinaryFileUploadComponent, never>;
98
- static ɵcmp: i0.ɵɵComponentDeclaration<BinaryFileUploadComponent, "risk-binary-file-upload", never, {}, {}, never, never, true, never>;
100
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RiskBinaryFileUploadComponent, never>;
101
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RiskBinaryFileUploadComponent, "risk-binary-file-upload", never, {}, {}, never, never, true, never>;
99
102
  }
100
103
 
101
- declare class CSVFileDownloadDirective extends AbstractFileDownloadDirective<unknown[]> {
104
+ declare class RiskCSVFileDownloadDirective extends AbstractRiskFileDownloadDirective<unknown[]> {
102
105
  private readonly dateFormatter;
103
- columns?: Array<CSVExportColumn<unknown>>;
104
- data?: ObservableWithProgress<unknown[]> | Observable<unknown[]> | unknown[];
105
- filename: string;
106
- crlfLineEnding: boolean;
106
+ readonly columns: _angular_core.InputSignal<CSVExportColumn<unknown>[]>;
107
+ readonly data: _angular_core.InputSignal<unknown[] | ObservableWithProgress<unknown[]> | Observable<unknown[]>>;
108
+ readonly filename: _angular_core.InputSignal<string>;
109
+ readonly crlfLineEnding: _angular_core.InputSignal<boolean>;
107
110
  protected mapToFile(data: unknown[]): FileWithContent;
108
111
  private processRow;
109
112
  private createHeader;
110
113
  private getLineEnding;
111
- static ɵfac: i0.ɵɵFactoryDeclaration<CSVFileDownloadDirective, never>;
112
- static ɵdir: i0.ɵɵDirectiveDeclaration<CSVFileDownloadDirective, "[risk-csv-download]", never, { "columns": { "alias": "risk-csv-download-columns"; "required": false; }; "data": { "alias": "risk-csv-download"; "required": false; }; "filename": { "alias": "risk-csv-download-filename"; "required": false; }; "crlfLineEnding": { "alias": "risk-csv-download-crlf"; "required": false; }; }, {}, never, never, true, never>;
114
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RiskCSVFileDownloadDirective, never>;
115
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RiskCSVFileDownloadDirective, "[risk-csv-download]", never, { "columns": { "alias": "risk-csv-download-columns"; "required": true; "isSignal": true; }; "data": { "alias": "risk-csv-download"; "required": true; "isSignal": true; }; "filename": { "alias": "risk-csv-download-filename"; "required": false; "isSignal": true; }; "crlfLineEnding": { "alias": "risk-csv-download-crlf"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
113
116
  }
114
117
 
115
- declare class CSVFileUploadComponent extends AbstractFileUploadComponent<CSVFile> {
118
+ declare class RiskCSVFileUploadComponent extends AbstractRiskFileUploadComponent<CSVFile> {
116
119
  private readonly fileUploadService;
117
- validator?: CSVValidator;
118
- nameMapper?: CSVColumnNameMapper;
120
+ readonly validator: _angular_core.InputSignal<CSVValidator | undefined>;
121
+ readonly nameMapper: _angular_core.InputSignal<CSVColumnNameMapper | undefined>;
119
122
  protected readFiles(fileList: FileList): Observable<CSVFile[]>;
120
- static ɵfac: i0.ɵɵFactoryDeclaration<CSVFileUploadComponent, never>;
121
- static ɵcmp: i0.ɵɵComponentDeclaration<CSVFileUploadComponent, "risk-csv-file-upload", never, { "validator": { "alias": "validator"; "required": false; }; "nameMapper": { "alias": "nameMapper"; "required": false; }; }, {}, never, never, true, never>;
123
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RiskCSVFileUploadComponent, never>;
124
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RiskCSVFileUploadComponent, "risk-csv-file-upload", never, { "validator": { "alias": "validator"; "required": false; "isSignal": true; }; "nameMapper": { "alias": "nameMapper"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
122
125
  }
123
126
 
124
- declare class CSVFileUploadService {
127
+ declare class RiskCSVFileUploadService {
125
128
  readFiles(files: FileList, nameMapper?: CSVColumnNameMapper): Observable<CSVFile[]>;
126
129
  static getCSVFile(content: string, file: File, nameMapper: CSVColumnNameMapper, startFromRow?: number): CSVFile;
127
- static ɵfac: i0.ɵɵFactoryDeclaration<CSVFileUploadService, never>;
128
- static ɵprov: i0.ɵɵInjectableDeclaration<CSVFileUploadService>;
130
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RiskCSVFileUploadService, never>;
131
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<RiskCSVFileUploadService>;
129
132
  }
130
133
 
131
- declare class TextFileUploadService {
134
+ declare class RiskTextFileUploadService {
132
135
  readFiles(files: FileList): Observable<TextFile[]>;
133
- static ɵfac: i0.ɵɵFactoryDeclaration<TextFileUploadService, never>;
134
- static ɵprov: i0.ɵɵInjectableDeclaration<TextFileUploadService>;
136
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RiskTextFileUploadService, never>;
137
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<RiskTextFileUploadService>;
135
138
  }
136
139
 
137
- declare class TextFileUploadComponent extends AbstractFileUploadComponent<TextFile> {
140
+ declare class RiskTextFileUploadComponent extends AbstractRiskFileUploadComponent<TextFile> {
138
141
  private readonly fileUploadService;
139
142
  protected readFiles(fileList: FileList): Observable<TextFile[]>;
140
- static ɵfac: i0.ɵɵFactoryDeclaration<TextFileUploadComponent, never>;
141
- static ɵcmp: i0.ɵɵComponentDeclaration<TextFileUploadComponent, "risk-text-file-upload", never, {}, {}, never, never, true, never>;
143
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RiskTextFileUploadComponent, never>;
144
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RiskTextFileUploadComponent, "risk-text-file-upload", never, {}, {}, never, never, true, never>;
142
145
  }
143
146
 
144
- declare class CSVDownloadMenuComponent {
145
- menuLabel: string;
146
- menuTooltip?: string;
147
- columns?: Array<CSVExportColumn<unknown>>;
148
- data?: unknown[] | Observable<unknown[]>;
149
- disabled: boolean;
150
- filename?: string;
151
- static ɵfac: i0.ɵɵFactoryDeclaration<CSVDownloadMenuComponent, never>;
152
- static ɵcmp: i0.ɵɵComponentDeclaration<CSVDownloadMenuComponent, "risk-download-menu", never, { "menuLabel": { "alias": "menuLabel"; "required": false; }; "menuTooltip": { "alias": "menuTooltip"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "data": { "alias": "data"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "filename": { "alias": "filename"; "required": false; }; }, {}, never, never, true, never>;
147
+ declare class RiskCSVDownloadMenuComponent {
148
+ readonly menuLabel: _angular_core.InputSignal<string>;
149
+ readonly menuTooltip: _angular_core.InputSignal<string | undefined>;
150
+ readonly columns: _angular_core.InputSignal<CSVExportColumn<unknown>[] | undefined>;
151
+ readonly data: _angular_core.InputSignal<unknown[] | Observable<unknown[]> | undefined>;
152
+ readonly disabled: _angular_core.InputSignal<boolean>;
153
+ readonly filename: _angular_core.InputSignal<string | undefined>;
154
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RiskCSVDownloadMenuComponent, never>;
155
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RiskCSVDownloadMenuComponent, "risk-download-menu", never, { "menuLabel": { "alias": "menuLabel"; "required": false; "isSignal": true; }; "menuTooltip": { "alias": "menuTooltip"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "filename": { "alias": "filename"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
153
156
  }
154
157
 
155
158
  type SupportedDownloadFormats = FileWithContent | Blob | object | string;
156
- declare class FileDownloadDirective extends AbstractFileDownloadDirective<SupportedDownloadFormats> {
157
- data?: ObservableWithProgress<SupportedDownloadFormats> | Observable<SupportedDownloadFormats> | SupportedDownloadFormats;
158
- contentType?: string;
159
- filename?: string;
159
+ declare class RiskFileDownloadDirective extends AbstractRiskFileDownloadDirective<SupportedDownloadFormats> {
160
+ readonly data: _angular_core.InputSignal<SupportedDownloadFormats | ObservableWithProgress<SupportedDownloadFormats> | Observable<SupportedDownloadFormats>>;
161
+ readonly contentType: _angular_core.InputSignal<string>;
162
+ readonly filename: _angular_core.InputSignal<string>;
160
163
  protected mapToFile(data: SupportedDownloadFormats): FileWithContent;
161
- static ɵfac: i0.ɵɵFactoryDeclaration<FileDownloadDirective, never>;
162
- static ɵdir: i0.ɵɵDirectiveDeclaration<FileDownloadDirective, "[risk-download]", never, { "data": { "alias": "risk-download"; "required": false; }; "contentType": { "alias": "risk-download-content-type"; "required": false; }; "filename": { "alias": "risk-download-filename"; "required": false; }; }, {}, never, never, true, never>;
164
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RiskFileDownloadDirective, never>;
165
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RiskFileDownloadDirective, "[risk-download]", never, { "data": { "alias": "risk-download"; "required": true; "isSignal": true; }; "contentType": { "alias": "risk-download-content-type"; "required": false; "isSignal": true; }; "filename": { "alias": "risk-download-filename"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
163
166
  }
164
167
 
165
- declare class FileSizePipe implements PipeTransform {
168
+ declare class RiskFileSizePipe implements PipeTransform {
166
169
  private readonly base;
167
170
  private readonly powerSuffixes;
168
171
  private readonly decimalPipe;
169
172
  transform(value: Maybe<number | string>): string;
170
- static ɵfac: i0.ɵɵFactoryDeclaration<FileSizePipe, never>;
171
- static ɵpipe: i0.ɵɵPipeDeclaration<FileSizePipe, "riskFileSize", true>;
173
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RiskFileSizePipe, never>;
174
+ static ɵpipe: _angular_core.ɵɵPipeDeclaration<RiskFileSizePipe, "riskFileSize", true>;
172
175
  }
173
176
 
174
- export { AbstractFileDownloadDirective, AbstractFileUploadComponent, BinaryFileUploadComponent, BinaryFileUploadService, CSVDownloadMenuComponent, CSVFileDownloadDirective, CSVFileUploadComponent, CSVFileUploadService, FileDownloadDirective, FileSizePipe, TextFileUploadComponent, TextFileUploadService };
177
+ export { AbstractRiskFileDownloadDirective, AbstractRiskFileUploadComponent, RiskBinaryFileUploadComponent, RiskBinaryFileUploadService, RiskCSVDownloadMenuComponent, RiskCSVFileDownloadDirective, RiskCSVFileUploadComponent, RiskCSVFileUploadService, RiskFileDownloadDirective, RiskFileSizePipe, RiskTextFileUploadComponent, RiskTextFileUploadService };
175
178
  export type { BinaryFile, CSVColumnNameMapper, CSVExportColumn, CSVFile, CSVRow, CSVValidator, File$1 as File, IFile, SupportedDownloadFormats, TextFile, ValidationResult };
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@dbg-riskit/angular-file",
3
- "version": "20.0.1",
3
+ "version": "20.1.0",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "peerDependencies": {
6
- "@angular/core": "^20.3.12",
7
- "@angular/platform-browser": "^20.3.12",
8
- "@angular/common": "^20.3.12",
9
- "@dbg-riskit/common": "~20.0.1",
10
- "@dbg-riskit/angular-common": "~20.0.1",
11
- "@dbg-riskit/angular-logging": "~20.0.1",
12
- "@dbg-riskit/angular-view": "~20.0.1",
6
+ "@angular/core": "^20.3.15",
7
+ "@angular/platform-browser": "^20.3.15",
8
+ "@angular/common": "^20.3.15",
9
+ "@dbg-riskit/common": "~20.1.0",
10
+ "@dbg-riskit/angular-common": "~20.1.0",
11
+ "@dbg-riskit/angular-logging": "~20.1.0",
12
+ "@dbg-riskit/angular-view": "~20.1.0",
13
13
  "rxjs": "~7.8.2",
14
14
  "file-saver": "^2.0.5"
15
15
  },