@arsedizioni/ars-utils 22.5.6 → 22.5.7
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.
- package/README.md +4 -1
- package/fesm2022/arsedizioni-ars-utils-core.mjs +3 -700
- package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.validators.mjs +717 -0
- package/fesm2022/arsedizioni-ars-utils-core.validators.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs +2 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs +2 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs +2 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.files.mjs +2 -1
- package/fesm2022/arsedizioni-ars-utils-ui.files.mjs.map +1 -1
- package/package.json +5 -1
- package/types/arsedizioni-ars-utils-clipper.ui.d.ts +1 -1
- package/types/arsedizioni-ars-utils-core.d.ts +1 -266
- package/types/arsedizioni-ars-utils-core.validators.d.ts +268 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arsedizioni-ars-utils-ui.files.mjs","sources":["../../../projects/ars-utils/ui.files/file-input/file-input.component.ts","../../../projects/ars-utils/ui.files/file-input/file-input.component.html","../../../projects/ars-utils/ui.files/file-preview/file-preview.component.ts","../../../projects/ars-utils/ui.files/file-preview/file-preview.component.html","../../../projects/ars-utils/ui.files/select-file/select-file-dialog.component.ts","../../../projects/ars-utils/ui.files/select-file/select-file-dialog.component.html","../../../projects/ars-utils/ui.files/select-picture/select-picture-dialog.component.ts","../../../projects/ars-utils/ui.files/select-picture/select-picture-dialog.component.html","../../../projects/ars-utils/ui.files/public_api.ts","../../../projects/ars-utils/ui.files/arsedizioni-ars-utils-ui.files.ts"],"sourcesContent":["import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { afterNextRender, ChangeDetectionStrategy, Component, DoCheck, ElementRef, Input, OnDestroy, Optional, Renderer2, Self, inject, input, model, output, signal, viewChild } from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormsModule } from '@angular/forms';\nimport { MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';\nimport { FileInfo, FileSizeValidatorDirective, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { Subject } from 'rxjs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { UIService } from '@arsedizioni/ars-utils/ui';\n\n@Component({\n selector: 'file-input',\n templateUrl: './file-input.component.html',\n styleUrl: './file-input.component.scss',\n providers: [{ provide: MatFormFieldControl, useExisting: FileInputComponent }],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatFormFieldModule, MatInputModule, FormsModule, FileSizeValidatorDirective, MatButtonModule,\n MatIconModule, MatTooltipModule],\n host: {\n '[id]': 'id',\n '[class.floating]': 'shouldLabelFloat',\n '[attr.aria-describedBy]': 'describedBy',\n },\n})\nexport class FileInputComponent\n implements\n OnDestroy,\n DoCheck,\n MatFormFieldControl<FileInfo>,\n ControlValueAccessor {\n\n /** Reference to the hidden native file input element. */\n protected readonly __file = viewChild.required<ElementRef>('__file');\n\n private readonly renderer = inject(Renderer2);\n private readonly uiService = inject(UIService);\n\n // Initialize\n static nextId = 0;\n readonly stateChanges = new Subject<void>();\n private previousNativeValue: any;\n controlType: string = 'file-input';\n focused = false;\n\n /** Whether the device supports camera capture. */\n protected readonly canCapture = signal<boolean>(false);\n\n /** Size in MB of the currently selected file. */\n protected readonly fileSize = signal<number>(0);\n\n private readonly _placeholder = signal<string>('');\n\n private _value: FileInfo = new FileInfo();\n set value(value: FileInfo) {\n this.setValue(value, true);\n }\n\n /**\n * Updates the internal state. Form propagation is skipped for model->view\n * writes (writeValue) to avoid the CVA echo loop, and performed for\n * user-driven changes (selectFile/clearFile) and the public value setter.\n * @param value - The new file info to store and display.\n * @param propagate - When `true`, notifies the registered onChange callback.\n */\n private setValue(value: FileInfo, propagate: boolean): void {\n this._value = value;\n if (propagate) {\n this.propagateChange(this._value);\n }\n this.stateChanges.next();\n this.changed.emit(this._value);\n }\n get value() {\n return this._value;\n }\n get size() {\n return this._value?.file?.size;\n }\n\n private _required: boolean = false;\n @Input()\n get required() {\n return this._required;\n }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n private _disabled: boolean = false;\n @Input()\n get disabled() {\n if (this.ngControl && this.ngControl.disabled != null) {\n return this.ngControl.disabled;\n }\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n }\n @Input()\n get placeholder(): string {\n return this._placeholder();\n }\n set placeholder(value: string) {\n this._placeholder.set(value);\n this.stateChanges.next();\n }\n\n /** The currently displayed file name. Can be bound two-way from outside or updated on file selection. */\n readonly fileName = model<string | undefined>(undefined);\n readonly maxSizeMb = input<number>(5);\n readonly minSizeMb = input<number>(0);\n readonly isNew = input<boolean>(false);\n readonly canPreview = input<boolean>(false);\n readonly appearance = input<'fill' | 'outline' | undefined>(this.uiService.appearance());\n readonly accept = input<string>();\n get empty(): boolean {\n return !this._value || !this._value.file;\n }\n /** True when the control has validation errors and has been touched. */\n get errorState(): boolean {\n return (this.ngControl?.errors != null) && (this.ngControl?.touched ?? false);\n }\n\n id = `${this.controlType}-${FileInputComponent.nextId++}`;\n\n /** True when the label should float above the field. */\n get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n describedBy = '';\n\n readonly changed = output<FileInfo>();\n readonly download = output();\n readonly preview = output();\n\n private propagateChange: (_: any) => void = (_: any) => { };\n private propagateTouched: () => void = () => { };\n\n\n constructor(\n @Optional() @Self() public ngControl: NgControl) {\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n // Detect camera availability and set the default placeholder after the first render\n afterNextRender(() => { this.setupDevices(); });\n }\n\n /**\n * Detects camera availability and updates the placeholder accordingly.\n */\n private async setupDevices(): Promise<void> {\n this.canCapture.set(false);\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ video: true });\n if (stream) {\n this.canCapture.set(true);\n }\n } catch { }\n }\n if (!this.placeholder || this.placeholder === 'Seleziona file') {\n this._placeholder.set(\n this.canCapture()\n ? 'Seleziona file o acquisisci con fotocamera'\n : 'Seleziona file'\n );\n }\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n\n ngDoCheck(): void {\n this.updateInputDirtyCheck();\n }\n\n /**\n * Writes a new value to the component (called by the form layer).\n * @param value - The new file info to display.\n */\n writeValue(value: any): void {\n // Model -> view write: must NOT propagate back to the form (echo loop)\n this.setValue(value as FileInfo, false);\n }\n\n /**\n * Registers the on-change callback (called by the form layer).\n * @param fn - Callback to invoke whenever the value changes.\n */\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n /**\n * Registers the on-touched callback (called by the form layer).\n * @param fn - Callback to invoke when the control is touched.\n */\n registerOnTouched(fn: any): void {\n this.propagateTouched = fn;\n }\n\n /**\n * Sets the ARIA describedby attribute from the given element IDs.\n * @param ids - Array of element IDs that describe this control.\n */\n setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(' ');\n }\n\n /**\n * Updates the disabled state of the underlying native element.\n * @param isDisabled - Whether the control should be disabled.\n */\n setDisabledState?(isDisabled: boolean): void {\n if (!SystemUtils.isBrowser()) return;\n const elem = document.getElementById(this.id);\n if (elem) {\n this.renderer.setProperty(elem, 'disabled', isDisabled);\n }\n }\n\n /** Focuses the native input element and marks the control as touched. */\n onContainerClick(): void {\n if (!this.focused) {\n if (!SystemUtils.isBrowser()) return;\n const elem = document.getElementById(this.id);\n if (elem) {\n elem.focus();\n this.propagateTouched();\n }\n }\n }\n\n /**\n * Checks whether the value has changed since the last dirty check and emits `stateChanges` if needed.\n */\n protected updateInputDirtyCheck(): void {\n const newValue = this._value;\n if (this.previousNativeValue !== newValue) {\n this.previousNativeValue = newValue;\n this.stateChanges.next();\n }\n }\n\n /**\n * Handles file selection from the native input element.\n * @param e - The DOM change event from the file input.\n */\n protected selectFile(e: Event): void {\n const input = e.target as HTMLInputElement;\n if (input.files?.length) {\n const f = input.files[0];\n const fileInfo = new FileInfo();\n const fileSizeMb = f.size / 1048576;\n fileInfo.file = f;\n fileInfo.valid =\n (!this.maxSizeMb() || fileSizeMb <= this.maxSizeMb()) &&\n (!this.minSizeMb() || fileSizeMb >= this.minSizeMb());\n this.setValue(fileInfo, true);\n this.fileName.set(f.name);\n this.fileSize.set(Math.round(fileSizeMb));\n }\n }\n\n /**\n * Checks whether a file is currently selected.\n * @returns `true` if a file is attached to the current value.\n */\n protected hasFile(): boolean {\n return !!(this._value?.file);\n }\n\n /**\n * Clears the currently selected file and resets the control.\n */\n protected clearFile(): void {\n if (this.hasFile()) {\n this.fileName.set(undefined);\n this.fileSize.set(0);\n const fi = new FileInfo();\n fi.file = undefined;\n fi.valid = !this.required;\n this.setValue(fi, true);\n this.__file().nativeElement.value = '';\n }\n }\n\n /**\n * Emits the `download` output event if the file is not newly added.\n */\n protected downloadFile(): void {\n if (!this.isNew()) this.download.emit();\n }\n\n /**\n * Emits the `preview` output event if the file is not new and preview is enabled.\n */\n protected previewFile(): void {\n if (!this.isNew() && this.canPreview()) this.preview.emit();\n }\n}\n","<mat-form-field style=\"width:100%\" [appearance]=\"appearance()\">\r\n <mat-label>{{placeholder}}</mat-label>\r\n <input type=\"file\" [hidden]=\"true\" [accept]=\"accept()\" (change)=\"selectFile($event)\" #__file />\r\n <input name=\"_fileName\" #_fileName=\"ngModel\" [ngModel]=\"fileName()\" (ngModelChange)=\"fileName.set($event)\" [id]=\"id\" matInput readonly [required]=\"required\"\r\n fileSize [size]=\"fileSize()\" [maxSizeMb]=\"maxSizeMb()\" [minSizeMb]=\"minSizeMb()\" [disabled]=\"disabled\" />\r\n @if (hasFile()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\" (click)=\"clearFile()\" [disabled]=\"disabled\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (!disabled) {\r\n <button type=\"button\" type=\"button\" mat-icon-button matSuffix (click)=\"__file.click()\" aria-label=\"Seleziona file\"\r\n matTooltip=\"Seleziona\" [disabled]=\"disabled\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew() && canPreview()) {\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"previewFile()\" aria-label=\"Anteprima\" matTooltip=\"Anteprima\" [disabled]=\"disabled\">\r\n <mat-icon>preview</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew()) {\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"downloadFile()\" aria-label=\"Scarica file\"\r\n matTooltip=\"Scarica\" [disabled]=\"disabled\">\r\n <mat-icon>save_alt</mat-icon>\r\n </button>\r\n }\r\n @if (hasFile() && fileSize() > 0) {\r\n <mat-hint align=\"start\">{{fileSize()}} MB</mat-hint>\r\n }\r\n @if (hasFile() && fileSize() == 0) {\r\n <mat-hint align=\"start\">\r\n > 1 MB</mat-hint>\r\n } @if (maxSizeMb()) {\r\n <mat-hint align=\"end\">Massimo {{maxSizeMb()}} MB\r\n </mat-hint>\r\n }\r\n @if (_fileName.invalid && !hasFile()) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n @if (_fileName.invalid && hasFile()) {\r\n <mat-error>Dimensione non consentita.</mat-error>\r\n }\r\n</mat-form-field>","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { DialogService } from '@arsedizioni/ars-utils/ui.dialogs';\nimport { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, signal, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent } from '@angular/material/dialog';\nimport { SafeUrlPipe } from '@arsedizioni/ars-utils/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\n\nexport interface FilePreviewDialogData {\n url?: string;\n embed?: boolean;\n authToken?: string;\n}\n\n\n@Component({\n templateUrl: './file-preview.component.html',\n styleUrl: './file-preview.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogContent, FlexLayoutModule, MatDialogActions, MatButtonModule, MatTooltipModule,\n MatDialogClose, SafeUrlPipe]\n})\nexport class FilePreviewComponent {\n readonly iframe = viewChild<ElementRef>('iframe');\n private readonly httpClient = inject(HttpClient);\n private readonly dialogService = inject(DialogService);\n protected readonly dialogData = inject<FilePreviewDialogData>(MAT_DIALOG_DATA) ?? {};\n protected readonly url = signal<string | null>(null);\n\n constructor() {\n // Revoke the blob object URL on destroy: createObjectURL keeps the whole\n // downloaded blob alive until revoked — repeated previews leaked memory.\n inject(DestroyRef).onDestroy(() => {\n const u = this.url();\n if (u?.startsWith('blob:')) URL.revokeObjectURL(u);\n });\n\n const data = this.dialogData;\n if (!data?.url) return;\n\n if (!data.embed) {\n this.dialogService.setBusy('Download in corso...');\n this.httpClient.get(data.url, {\n headers: data.authToken\n ? new HttpHeaders().set('Authorization', data.authToken)\n : new HttpHeaders(),\n responseType: 'blob'\n })\n .pipe(takeUntilDestroyed())\n .subscribe({\n next: (res: Blob) => {\n this.url.set(URL.createObjectURL(res));\n this.dialogService.clearBusy();\n },\n error: () => {\n this.dialogService.clearBusy();\n }\n });\n } else {\n this.url.set('https://view.officeapps.live.com/op/embed.aspx?src=' + encodeURIComponent(data.url));\n }\n }\n\n /**\n * Handles the iframe load event: scrolls to the top and centers a single image when present.\n */\n protected loaded(): void {\n const iframe = this.iframe()?.nativeElement;\n if (!iframe) { return; }\n \n try {\n iframe.contentWindow?.scrollTo(0, 0);\n \n // Resize and center single image\n if (!this.dialogData?.embed && iframe.contentDocument) { \n const images = iframe.contentDocument.querySelectorAll('img') || [];\n if (images.length === 1) { \n Object.assign(images[0].style, {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n maxWidth: images[0].style.maxWidth || '100%',\n maxHeight: images[0].style.maxHeight || '100%'\n });\n const iframeBody = iframe.contentDocument.body;\n if (iframeBody && !iframeBody.style.height) {\n iframeBody.style.height = '100%';\n }\n }\n }\n } catch (e) {\n console.error('Impossibile accedere al contenuto dell\\'iframe:', e);\n }\n }\n\n /**\n * Opens the current file URL in a new browser tab for manual download.\n */\n protected download(): void {\n const currentUrl = this.url();\n if (currentUrl) {\n window.open(currentUrl, '_blank');\n }\n }\n\n /**\n * Displays a help dialog with browser-specific instructions for enabling PDF preview.\n */\n protected troubles(): void {\n this.dialogService.info(\n \"<p>Se non riesci a visualizzare l'anteprima dei file PDF probabilmente devi abilitare un'impostazione del tuo browser.</p>\" +\n \"<b>Per Google Chrome</b><br>\" +\n \"<p class='small' style='padding-left:10px'><i>impostazioni > privacy e sicurezza > impostazioni sito > documenti PDF</i></p>\" +\n \"<b>Per Microsoft Edge</b><br>\" +\n \"<p class='small' style='padding-left:10px'><i>impostazioni > cookie e autorizzazioni sito > documenti PDF</i></p>\" +\n \"<b>Per Mozilla Firefox</b><br>\" +\n \"<p class='small' style='padding-left:10px'><i>impostazioni > generale > applicazioni</i></p>\" +\n \"<b>Altri browser</b><br>\" +\n \"<p class='small' style='padding-left:10px'>Fate riferimento alla documentazione specifica del vostro browser.</p>\",\n \"Problemi con le anteprime dei file PDF?\"\n )\n }\n}\n\n\n\n","<mat-dialog-content class=\"file-preview\" id=\"file-preview-scrollable\">\r\n <div class=\"content\">\r\n @if (!url()) {\r\n <div class=\"loading\">Caricamento in corso...</div>\r\n } @else {\r\n <iframe class=\"iframe\" #iframe (load)=\"loaded()\" [src]=\"url() | safeUrl\"></iframe>\r\n }\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions id=\"file-preview-fixed\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"50\">\r\n <button mat-stroked-button (click)=\"troubles()\"\r\n matTooltip=\"Fai click se non riesci a visualizzare l'anteprima dei file PDF\">Problemi con i PDF?</button>\r\n </div>\r\n <div fxFlex=\"50\" fxLayoutAlign=\"end\">\r\n <button mat-stroked-button (click)=\"download()\">Scarica</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >Chiudi</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\nimport { FlexLayoutModule, SelectFile, SelectFileDialogData } from '@arsedizioni/ars-utils/ui';\nimport { DialogService } from '@arsedizioni/ars-utils/ui.dialogs';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\n\n@Component({\n templateUrl: './select-file-dialog.component.html',\n styleUrl: './select-file-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, FlexLayoutModule, MatButtonModule, MatCheckboxModule, FormsModule,\n MatDialogActions, MatDialogClose, SafeHtmlPipe]\n})\nexport class SelectFileDialogComponent {\n readonly done = output<SelectFile>();\n private readonly dialogService = inject(DialogService);\n private readonly dialogRef = inject(MatDialogRef<SelectFileDialogComponent>);\n protected readonly dialogData = signal<SelectFileDialogData>(inject(MAT_DIALOG_DATA) ?? {});\n protected readonly file = signal<File | undefined>(undefined);\n protected fileClass = signal<'selectfile-file' | 'selectfile-file-drop'>('selectfile-file');\n\n /**\n * Handles the native file input change event and delegates to `selectFile`.\n * @param e - The DOM change event from the file input.\n */\n protected update(e: Event): void {\n const input = e.target as HTMLInputElement;\n if (input.files?.length) {\n this.selectFile(input.files[0]);\n }\n }\n\n /**\n * Validates and sets the selected file, showing an error if size or type constraints are violated.\n * @param file - The `File` object to validate and store.\n */\n private selectFile(file: File): void {\n const data = this.dialogData();\n const maxSize = data.maxSize ?? 0;\n if (maxSize > 0) {\n const size = file.size / 1048576;\n if (size > maxSize) {\n this.dialogService.error(`File troppo grande (massimo ${SystemUtils.formatFileSize(maxSize * 1048576)})`);\n return;\n }\n }\n if (data.accept) {\n const accept = data.accept.toLowerCase();\n const a = file.name.split('.').pop()?.toLowerCase();\n let b = file.type.toLowerCase();\n if (b.startsWith('image/') && accept.includes('image/*')) {\n b = 'image/*';\n } else if (b.startsWith('video/') && accept.includes('video/*')) {\n b = 'video/*';\n } else if (b.startsWith('audio/') && accept.includes('audio/*')) {\n b = 'audio/*';\n }\n if (!accept.includes(a ?? '') && !accept.includes(b)) {\n this.dialogService.error(`Sono accettati solo questi tipi di file: ${accept}`);\n return;\n }\n }\n this.file.set(file);\n }\n\n /**\n * Formats a byte count into a human-readable size string.\n * @param size - File size in bytes.\n * @returns A formatted size string (e.g. \"1.2 MB\").\n */\n protected size(size: number): string {\n return SystemUtils.formatFileSize(size);\n }\n\n /** Emits the selected file and options, then closes the dialog. */\n protected ok(): void {\n this.done.emit({ file: this.file(), options: this.dialogData().options });\n setTimeout(() => {\n this.dialogRef.close();\n }, 500);\n }\n\n /** Highlights the drop zone when a drag enters the area.\n * @param e - The drag event.\n */\n protected onDragOver(e: DragEvent): void {\n this.fileClass.set('selectfile-file-drop');\n e.preventDefault();\n }\n\n /** Highlights the drop zone when a dragged item enters.\n * @param e - The drag event.\n */\n protected onDragEnter(e: DragEvent): void {\n this.fileClass.set('selectfile-file-drop');\n e.preventDefault();\n }\n\n /** Resets the drop zone style when dragging ends.\n * @param e - The drag event.\n */\n protected onDragEnd(e: DragEvent): void {\n this.fileClass.set('selectfile-file');\n e.preventDefault();\n }\n\n /** Resets the drop zone style when a dragged item leaves the area.\n * @param e - The drag event.\n */\n protected onDragLeave(e: DragEvent): void {\n this.fileClass.set('selectfile-file');\n e.preventDefault();\n }\n\n /**\n * Handles a file drop event, extracting and processing the dropped files.\n * @param e - The drop event.\n */\n protected onDrop(e: DragEvent): void {\n this.fileClass.set('selectfile-file');\n e.preventDefault();\n e.stopPropagation();\n if (e.dataTransfer?.files?.length) {\n this.addFiles(e.dataTransfer.files);\n }\n }\n\n /**\n * Picks the first file from the list and passes it to `selectFile`.\n * @param files - The `FileList` from the drag-and-drop event.\n */\n private addFiles(files: FileList): void {\n if (files.length > 0) {\n this.selectFile(files[0]);\n }\n }\n}\n\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n@if (dialogData().description) {\n<div class=\"selectfile-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n}\n<mat-dialog-content class=\"dialog-content\">\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxLayoutAlign=\"center center\" fxFill>\n <div fxFlex=\"*\" [class]=\"fileClass()\" (drop)=\"onDrop($event)\" (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\" (dragenter)=\"onDragEnter($event)\" (dragend)=\"onDragEnd($event)\">\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxLayoutAlign=\"center center\" fxFill>\n <div fxFlex=\"10px\" fxFlexAlign=\"start\" class=\"x-small secondary\"><i>Trascina qui il file o selezionalo</i></div>\n <div>\n <input #_file type=\"file\" [accept]=\"dialogData().accept\" [hidden]=\"true\" (change)=\"update($event)\" />\n <button type=\"button\" mat-stroked-button (click)=\"_file.click()\">Seleziona file...</button>\n </div>\n @if (file()) {\n <div style=\"padding:0 24px\">\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFill>\n <div class=\"small accent bold\"><i>{{file().name}}</i></div>\n <div class=\"small\">Dimensioni: <i>{{size(file().size)}}</i></div>\n </div>\n </div>\n }\n </div>\n </div>\n @if (dialogData().options) {\n <div style=\"padding-bottom: 24px;\">\n @for (o of dialogData().options; track o; let i = $index) {\n <div>\n <mat-checkbox (change)=\"o.selected = $event.checked\" [checked]=\"o.selected === true\" name=\"opt_{{i}}\" >\n {{o.description}}\n </mat-checkbox>\n </div>\n }\n </div>\n }\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\n <div fxFlex=\"50\">\n @if (dialogData().helpLink) {\n <a mat-stroked-button href=\"{{dialogData().helpLink}}\" target=\"_blank\">{{dialogData().helpCaption}}</a>\n }\n </div>\n <div fxFlex=\"50\" fxLayoutAlign=\"end\">\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"!file()\">{{dialogData().okCaption}}</button>\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\n </div>\n </div>\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\nimport { FlexLayoutModule, SelectFile, SelectPictureFileDialogData } from '@arsedizioni/ars-utils/ui';\nimport { DialogService } from '@arsedizioni/ars-utils/ui.dialogs';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n templateUrl: './select-picture-dialog.component.html',\n styleUrl: './select-picture-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, FlexLayoutModule, MatButtonModule, MatCheckboxModule, FormsModule,\n MatDialogActions, MatDialogClose, SafeHtmlPipe]\n})\nexport class SelectPictureDialogComponent {\n readonly done = output<SelectFile>();\n private readonly dialogService = inject(DialogService);\n private readonly dialogRef = inject(MatDialogRef<SelectPictureDialogComponent>);\n protected readonly dialogData = signal<SelectPictureFileDialogData>(inject(MAT_DIALOG_DATA) ?? {});\n protected readonly file = signal<File | undefined>(undefined);\n protected fileClass = signal<'selectpicture-file' | 'selectpicture-file-drop'>('selectpicture-file');\n protected pictureWidth = signal<number>(0);\n protected pictureHeight = signal<number>(0);\n protected picturePreview = signal<any>(undefined);\n\n /**\n * Handles the native file input change event and delegates to `selectFile`.\n * @param e - The DOM change event from the file input.\n */\n protected update(e: Event): void {\n const input = e.target as HTMLInputElement;\n if (input.files?.length) {\n this.selectFile(input.files[0]);\n }\n }\n\n /**\n * Validates the file size and type, then reads it as a data URL to generate a preview.\n * @param file - The `File` object to validate and preview.\n */\n private selectFile(file: File): void {\n const data = this.dialogData();\n const maxSize = data.maxSize ?? 0;\n if (maxSize > 0) {\n const size = file.size / 1048576;\n if (size > maxSize) {\n this.dialogService.error(`File troppo grande (massimo ${SystemUtils.formatFileSize(maxSize * 1048576)})`);\n return;\n }\n }\n if (data.accept) {\n const accept = data.accept.toLowerCase();\n const a = file.name.split('.').pop()?.toLowerCase();\n let b = file.type.toLowerCase();\n if (b.startsWith('image/') && accept.includes('image/*')) {\n b = 'image/*';\n } else if (b.startsWith('video/') && accept.includes('video/*')) {\n b = 'video/*';\n } else if (b.startsWith('audio/') && accept.includes('audio/*')) {\n b = 'audio/*';\n }\n if (!accept.includes(a ?? '') && !accept.includes(b)) {\n this.dialogService.error(`Sono accettati solo questi tipi di file: ${accept}`);\n return;\n }\n }\n const reader = new FileReader();\n reader.onload = (_e: ProgressEvent<FileReader>) => {\n const img = new Image();\n img.onload = () => {\n const maxWidth = data.maxWidth ?? 0;\n if (maxWidth > 0 && img.width > maxWidth) {\n this.dialogService.error(`Immagine troppo larga (massimo ${maxWidth} pixel)`);\n return;\n }\n const maxHeight = data.maxHeight ?? 0;\n if (maxHeight > 0 && img.height > maxHeight) {\n this.dialogService.error(`Immagine troppo alta (massimo ${maxHeight} pixel)`);\n return;\n }\n this.pictureWidth.set(img.width);\n this.pictureHeight.set(img.height);\n this.picturePreview.set((_e.target as FileReader).result);\n this.file.set(file);\n };\n img.src = (_e.target as FileReader).result as string;\n };\n reader.readAsDataURL(file);\n }\n\n /**\n * Formats a byte count into a human-readable size string.\n * @param size - File size in bytes.\n * @returns A formatted size string (e.g. \"1.2 MB\").\n */\n protected size(size: number): string {\n return SystemUtils.formatFileSize(size);\n }\n\n /** Emits the selected file and options, then closes the dialog. */\n protected ok(): void {\n this.done.emit({ file: this.file(), options: this.dialogData().options });\n setTimeout(() => {\n this.dialogRef.close();\n }, 500);\n }\n\n /** Highlights the drop zone when a dragged item is over it.\n * @param e - The drag event.\n */\n protected onDragOver(e: DragEvent): void {\n this.fileClass.set('selectpicture-file-drop');\n e.preventDefault();\n }\n\n /** Highlights the drop zone when a dragged item enters.\n * @param e - The drag event.\n */\n protected onDragEnter(e: DragEvent): void {\n this.fileClass.set('selectpicture-file-drop');\n e.preventDefault();\n }\n\n /** Resets the drop zone style when dragging ends.\n * @param e - The drag event.\n */\n protected onDragEnd(e: DragEvent): void {\n this.fileClass.set('selectpicture-file');\n e.preventDefault();\n }\n\n /** Resets the drop zone style when a dragged item leaves.\n * @param e - The drag event.\n */\n protected onDragLeave(e: DragEvent): void {\n this.fileClass.set('selectpicture-file');\n e.preventDefault();\n }\n\n /**\n * Handles a file drop event, extracting and processing the dropped image.\n * @param e - The drop event.\n */\n protected onDrop(e: DragEvent): void {\n this.fileClass.set('selectpicture-file');\n e.preventDefault();\n e.stopPropagation();\n if (e.dataTransfer?.files?.length) {\n this.addFiles(e.dataTransfer.files);\n }\n }\n\n /**\n * Picks the first file from the list and passes it to `selectFile`.\n * @param files - The `FileList` from the drag-and-drop event.\n */\n private addFiles(files: FileList): void {\n if (files.length > 0) {\n this.selectFile(files[0]);\n }\n }\n}\n\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n@if (dialogData().description) {\n<div class=\"selectpicture-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n}\n<mat-dialog-content class=\"dialog-content\">\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxLayoutGap=\"24px\" fxFill>\n <div fxFlex=\"*\" [class]=\"fileClass()\" (drop)=\"onDrop($event)\" (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\" (dragenter)=\"onDragEnter($event)\" (dragend)=\"onDragEnd($event)\">\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxLayoutAlign=\"center center\" fxFill>\n <div fxFlex=\"10px\" fxFlexAlign=\"start\" class=\"x-small secondary\"><i>Trascina qui l'immagine o selezionala</i></div>\n <div>\n <input #_file type=\"file\" [hidden]=\"true\" [accept]=\"dialogData().accept ?? 'image/*'\"\n (change)=\"update($event)\" />\n <button type=\"button\" mat-stroked-button (click)=\"_file.click()\">Seleziona file...</button>\n </div>\n @if (file()) {\n <div style=\"padding:0 24px\">\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFill>\n <img [src]=\"picturePreview()\" class=\"selectpicture-preview\">\n <div class=\"small accent bold \"><i>{{file().name}}</i></div>\n <div class=\"small\">Dimensioni:<i>{{pictureWidth()}} x {{pictureHeight()}} ({{size(file().size)}})</i></div>\n </div>\n </div>\n }\n </div>\n </div>\n @if (dialogData().options) {\n <div style=\"padding-bottom: 24px;\">\n @for (o of dialogData().options; track o; let i = $index) {\n <div>\n <mat-checkbox (change)=\"o.selected = $event.checked\" [checked]=\"o.selected === true\" name=\"opt_{{i}}\" >\n {{o.description}}\n </mat-checkbox>\n </div>\n }\n </div>\n }\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"!file()\">{{dialogData().okCaption}}</button>\n <button mat-stroked-button mat-dialog-close >Annulla</button>\n </div>\n</mat-dialog-actions>\n","/*\n * Public API Surface of @arsedizioni/ars-utils/ui.files\n */\nexport * from './file-input/file-input.component';\nexport * from './file-preview/file-preview.component';\nexport * from './select-file/select-file-dialog.component';\nexport * from './select-picture/select-picture-dialog.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i4","i1","i2","i3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"arsedizioni-ars-utils-ui.files.mjs","sources":["../../../projects/ars-utils/ui.files/file-input/file-input.component.ts","../../../projects/ars-utils/ui.files/file-input/file-input.component.html","../../../projects/ars-utils/ui.files/file-preview/file-preview.component.ts","../../../projects/ars-utils/ui.files/file-preview/file-preview.component.html","../../../projects/ars-utils/ui.files/select-file/select-file-dialog.component.ts","../../../projects/ars-utils/ui.files/select-file/select-file-dialog.component.html","../../../projects/ars-utils/ui.files/select-picture/select-picture-dialog.component.ts","../../../projects/ars-utils/ui.files/select-picture/select-picture-dialog.component.html","../../../projects/ars-utils/ui.files/public_api.ts","../../../projects/ars-utils/ui.files/arsedizioni-ars-utils-ui.files.ts"],"sourcesContent":["import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { afterNextRender, ChangeDetectionStrategy, Component, DoCheck, ElementRef, Input, OnDestroy, Optional, Renderer2, Self, inject, input, model, output, signal, viewChild } from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormsModule } from '@angular/forms';\nimport { MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';\nimport { FileInfo, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { FileSizeValidatorDirective } from '@arsedizioni/ars-utils/core.validators';\nimport { Subject } from 'rxjs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { UIService } from '@arsedizioni/ars-utils/ui';\n\n@Component({\n selector: 'file-input',\n templateUrl: './file-input.component.html',\n styleUrl: './file-input.component.scss',\n providers: [{ provide: MatFormFieldControl, useExisting: FileInputComponent }],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatFormFieldModule, MatInputModule, FormsModule, FileSizeValidatorDirective, MatButtonModule,\n MatIconModule, MatTooltipModule],\n host: {\n '[id]': 'id',\n '[class.floating]': 'shouldLabelFloat',\n '[attr.aria-describedBy]': 'describedBy',\n },\n})\nexport class FileInputComponent\n implements\n OnDestroy,\n DoCheck,\n MatFormFieldControl<FileInfo>,\n ControlValueAccessor {\n\n /** Reference to the hidden native file input element. */\n protected readonly __file = viewChild.required<ElementRef>('__file');\n\n private readonly renderer = inject(Renderer2);\n private readonly uiService = inject(UIService);\n\n // Initialize\n static nextId = 0;\n readonly stateChanges = new Subject<void>();\n private previousNativeValue: any;\n controlType: string = 'file-input';\n focused = false;\n\n /** Whether the device supports camera capture. */\n protected readonly canCapture = signal<boolean>(false);\n\n /** Size in MB of the currently selected file. */\n protected readonly fileSize = signal<number>(0);\n\n private readonly _placeholder = signal<string>('');\n\n private _value: FileInfo = new FileInfo();\n set value(value: FileInfo) {\n this.setValue(value, true);\n }\n\n /**\n * Updates the internal state. Form propagation is skipped for model->view\n * writes (writeValue) to avoid the CVA echo loop, and performed for\n * user-driven changes (selectFile/clearFile) and the public value setter.\n * @param value - The new file info to store and display.\n * @param propagate - When `true`, notifies the registered onChange callback.\n */\n private setValue(value: FileInfo, propagate: boolean): void {\n this._value = value;\n if (propagate) {\n this.propagateChange(this._value);\n }\n this.stateChanges.next();\n this.changed.emit(this._value);\n }\n get value() {\n return this._value;\n }\n get size() {\n return this._value?.file?.size;\n }\n\n private _required: boolean = false;\n @Input()\n get required() {\n return this._required;\n }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n private _disabled: boolean = false;\n @Input()\n get disabled() {\n if (this.ngControl && this.ngControl.disabled != null) {\n return this.ngControl.disabled;\n }\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n }\n @Input()\n get placeholder(): string {\n return this._placeholder();\n }\n set placeholder(value: string) {\n this._placeholder.set(value);\n this.stateChanges.next();\n }\n\n /** The currently displayed file name. Can be bound two-way from outside or updated on file selection. */\n readonly fileName = model<string | undefined>(undefined);\n readonly maxSizeMb = input<number>(5);\n readonly minSizeMb = input<number>(0);\n readonly isNew = input<boolean>(false);\n readonly canPreview = input<boolean>(false);\n readonly appearance = input<'fill' | 'outline' | undefined>(this.uiService.appearance());\n readonly accept = input<string>();\n get empty(): boolean {\n return !this._value || !this._value.file;\n }\n /** True when the control has validation errors and has been touched. */\n get errorState(): boolean {\n return (this.ngControl?.errors != null) && (this.ngControl?.touched ?? false);\n }\n\n id = `${this.controlType}-${FileInputComponent.nextId++}`;\n\n /** True when the label should float above the field. */\n get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n describedBy = '';\n\n readonly changed = output<FileInfo>();\n readonly download = output();\n readonly preview = output();\n\n private propagateChange: (_: any) => void = (_: any) => { };\n private propagateTouched: () => void = () => { };\n\n\n constructor(\n @Optional() @Self() public ngControl: NgControl) {\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n // Detect camera availability and set the default placeholder after the first render\n afterNextRender(() => { this.setupDevices(); });\n }\n\n /**\n * Detects camera availability and updates the placeholder accordingly.\n */\n private async setupDevices(): Promise<void> {\n this.canCapture.set(false);\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ video: true });\n if (stream) {\n this.canCapture.set(true);\n }\n } catch { }\n }\n if (!this.placeholder || this.placeholder === 'Seleziona file') {\n this._placeholder.set(\n this.canCapture()\n ? 'Seleziona file o acquisisci con fotocamera'\n : 'Seleziona file'\n );\n }\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n\n ngDoCheck(): void {\n this.updateInputDirtyCheck();\n }\n\n /**\n * Writes a new value to the component (called by the form layer).\n * @param value - The new file info to display.\n */\n writeValue(value: any): void {\n // Model -> view write: must NOT propagate back to the form (echo loop)\n this.setValue(value as FileInfo, false);\n }\n\n /**\n * Registers the on-change callback (called by the form layer).\n * @param fn - Callback to invoke whenever the value changes.\n */\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n /**\n * Registers the on-touched callback (called by the form layer).\n * @param fn - Callback to invoke when the control is touched.\n */\n registerOnTouched(fn: any): void {\n this.propagateTouched = fn;\n }\n\n /**\n * Sets the ARIA describedby attribute from the given element IDs.\n * @param ids - Array of element IDs that describe this control.\n */\n setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(' ');\n }\n\n /**\n * Updates the disabled state of the underlying native element.\n * @param isDisabled - Whether the control should be disabled.\n */\n setDisabledState?(isDisabled: boolean): void {\n if (!SystemUtils.isBrowser()) return;\n const elem = document.getElementById(this.id);\n if (elem) {\n this.renderer.setProperty(elem, 'disabled', isDisabled);\n }\n }\n\n /** Focuses the native input element and marks the control as touched. */\n onContainerClick(): void {\n if (!this.focused) {\n if (!SystemUtils.isBrowser()) return;\n const elem = document.getElementById(this.id);\n if (elem) {\n elem.focus();\n this.propagateTouched();\n }\n }\n }\n\n /**\n * Checks whether the value has changed since the last dirty check and emits `stateChanges` if needed.\n */\n protected updateInputDirtyCheck(): void {\n const newValue = this._value;\n if (this.previousNativeValue !== newValue) {\n this.previousNativeValue = newValue;\n this.stateChanges.next();\n }\n }\n\n /**\n * Handles file selection from the native input element.\n * @param e - The DOM change event from the file input.\n */\n protected selectFile(e: Event): void {\n const input = e.target as HTMLInputElement;\n if (input.files?.length) {\n const f = input.files[0];\n const fileInfo = new FileInfo();\n const fileSizeMb = f.size / 1048576;\n fileInfo.file = f;\n fileInfo.valid =\n (!this.maxSizeMb() || fileSizeMb <= this.maxSizeMb()) &&\n (!this.minSizeMb() || fileSizeMb >= this.minSizeMb());\n this.setValue(fileInfo, true);\n this.fileName.set(f.name);\n this.fileSize.set(Math.round(fileSizeMb));\n }\n }\n\n /**\n * Checks whether a file is currently selected.\n * @returns `true` if a file is attached to the current value.\n */\n protected hasFile(): boolean {\n return !!(this._value?.file);\n }\n\n /**\n * Clears the currently selected file and resets the control.\n */\n protected clearFile(): void {\n if (this.hasFile()) {\n this.fileName.set(undefined);\n this.fileSize.set(0);\n const fi = new FileInfo();\n fi.file = undefined;\n fi.valid = !this.required;\n this.setValue(fi, true);\n this.__file().nativeElement.value = '';\n }\n }\n\n /**\n * Emits the `download` output event if the file is not newly added.\n */\n protected downloadFile(): void {\n if (!this.isNew()) this.download.emit();\n }\n\n /**\n * Emits the `preview` output event if the file is not new and preview is enabled.\n */\n protected previewFile(): void {\n if (!this.isNew() && this.canPreview()) this.preview.emit();\n }\n}\n","<mat-form-field style=\"width:100%\" [appearance]=\"appearance()\">\r\n <mat-label>{{placeholder}}</mat-label>\r\n <input type=\"file\" [hidden]=\"true\" [accept]=\"accept()\" (change)=\"selectFile($event)\" #__file />\r\n <input name=\"_fileName\" #_fileName=\"ngModel\" [ngModel]=\"fileName()\" (ngModelChange)=\"fileName.set($event)\" [id]=\"id\" matInput readonly [required]=\"required\"\r\n fileSize [size]=\"fileSize()\" [maxSizeMb]=\"maxSizeMb()\" [minSizeMb]=\"minSizeMb()\" [disabled]=\"disabled\" />\r\n @if (hasFile()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\" (click)=\"clearFile()\" [disabled]=\"disabled\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (!disabled) {\r\n <button type=\"button\" type=\"button\" mat-icon-button matSuffix (click)=\"__file.click()\" aria-label=\"Seleziona file\"\r\n matTooltip=\"Seleziona\" [disabled]=\"disabled\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew() && canPreview()) {\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"previewFile()\" aria-label=\"Anteprima\" matTooltip=\"Anteprima\" [disabled]=\"disabled\">\r\n <mat-icon>preview</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew()) {\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"downloadFile()\" aria-label=\"Scarica file\"\r\n matTooltip=\"Scarica\" [disabled]=\"disabled\">\r\n <mat-icon>save_alt</mat-icon>\r\n </button>\r\n }\r\n @if (hasFile() && fileSize() > 0) {\r\n <mat-hint align=\"start\">{{fileSize()}} MB</mat-hint>\r\n }\r\n @if (hasFile() && fileSize() == 0) {\r\n <mat-hint align=\"start\">\r\n > 1 MB</mat-hint>\r\n } @if (maxSizeMb()) {\r\n <mat-hint align=\"end\">Massimo {{maxSizeMb()}} MB\r\n </mat-hint>\r\n }\r\n @if (_fileName.invalid && !hasFile()) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n @if (_fileName.invalid && hasFile()) {\r\n <mat-error>Dimensione non consentita.</mat-error>\r\n }\r\n</mat-form-field>","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { DialogService } from '@arsedizioni/ars-utils/ui.dialogs';\nimport { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, signal, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent } from '@angular/material/dialog';\nimport { SafeUrlPipe } from '@arsedizioni/ars-utils/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\n\nexport interface FilePreviewDialogData {\n url?: string;\n embed?: boolean;\n authToken?: string;\n}\n\n\n@Component({\n templateUrl: './file-preview.component.html',\n styleUrl: './file-preview.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogContent, FlexLayoutModule, MatDialogActions, MatButtonModule, MatTooltipModule,\n MatDialogClose, SafeUrlPipe]\n})\nexport class FilePreviewComponent {\n readonly iframe = viewChild<ElementRef>('iframe');\n private readonly httpClient = inject(HttpClient);\n private readonly dialogService = inject(DialogService);\n protected readonly dialogData = inject<FilePreviewDialogData>(MAT_DIALOG_DATA) ?? {};\n protected readonly url = signal<string | null>(null);\n\n constructor() {\n // Revoke the blob object URL on destroy: createObjectURL keeps the whole\n // downloaded blob alive until revoked — repeated previews leaked memory.\n inject(DestroyRef).onDestroy(() => {\n const u = this.url();\n if (u?.startsWith('blob:')) URL.revokeObjectURL(u);\n });\n\n const data = this.dialogData;\n if (!data?.url) return;\n\n if (!data.embed) {\n this.dialogService.setBusy('Download in corso...');\n this.httpClient.get(data.url, {\n headers: data.authToken\n ? new HttpHeaders().set('Authorization', data.authToken)\n : new HttpHeaders(),\n responseType: 'blob'\n })\n .pipe(takeUntilDestroyed())\n .subscribe({\n next: (res: Blob) => {\n this.url.set(URL.createObjectURL(res));\n this.dialogService.clearBusy();\n },\n error: () => {\n this.dialogService.clearBusy();\n }\n });\n } else {\n this.url.set('https://view.officeapps.live.com/op/embed.aspx?src=' + encodeURIComponent(data.url));\n }\n }\n\n /**\n * Handles the iframe load event: scrolls to the top and centers a single image when present.\n */\n protected loaded(): void {\n const iframe = this.iframe()?.nativeElement;\n if (!iframe) { return; }\n \n try {\n iframe.contentWindow?.scrollTo(0, 0);\n \n // Resize and center single image\n if (!this.dialogData?.embed && iframe.contentDocument) { \n const images = iframe.contentDocument.querySelectorAll('img') || [];\n if (images.length === 1) { \n Object.assign(images[0].style, {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n maxWidth: images[0].style.maxWidth || '100%',\n maxHeight: images[0].style.maxHeight || '100%'\n });\n const iframeBody = iframe.contentDocument.body;\n if (iframeBody && !iframeBody.style.height) {\n iframeBody.style.height = '100%';\n }\n }\n }\n } catch (e) {\n console.error('Impossibile accedere al contenuto dell\\'iframe:', e);\n }\n }\n\n /**\n * Opens the current file URL in a new browser tab for manual download.\n */\n protected download(): void {\n const currentUrl = this.url();\n if (currentUrl) {\n window.open(currentUrl, '_blank');\n }\n }\n\n /**\n * Displays a help dialog with browser-specific instructions for enabling PDF preview.\n */\n protected troubles(): void {\n this.dialogService.info(\n \"<p>Se non riesci a visualizzare l'anteprima dei file PDF probabilmente devi abilitare un'impostazione del tuo browser.</p>\" +\n \"<b>Per Google Chrome</b><br>\" +\n \"<p class='small' style='padding-left:10px'><i>impostazioni > privacy e sicurezza > impostazioni sito > documenti PDF</i></p>\" +\n \"<b>Per Microsoft Edge</b><br>\" +\n \"<p class='small' style='padding-left:10px'><i>impostazioni > cookie e autorizzazioni sito > documenti PDF</i></p>\" +\n \"<b>Per Mozilla Firefox</b><br>\" +\n \"<p class='small' style='padding-left:10px'><i>impostazioni > generale > applicazioni</i></p>\" +\n \"<b>Altri browser</b><br>\" +\n \"<p class='small' style='padding-left:10px'>Fate riferimento alla documentazione specifica del vostro browser.</p>\",\n \"Problemi con le anteprime dei file PDF?\"\n )\n }\n}\n\n\n\n","<mat-dialog-content class=\"file-preview\" id=\"file-preview-scrollable\">\r\n <div class=\"content\">\r\n @if (!url()) {\r\n <div class=\"loading\">Caricamento in corso...</div>\r\n } @else {\r\n <iframe class=\"iframe\" #iframe (load)=\"loaded()\" [src]=\"url() | safeUrl\"></iframe>\r\n }\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions id=\"file-preview-fixed\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"50\">\r\n <button mat-stroked-button (click)=\"troubles()\"\r\n matTooltip=\"Fai click se non riesci a visualizzare l'anteprima dei file PDF\">Problemi con i PDF?</button>\r\n </div>\r\n <div fxFlex=\"50\" fxLayoutAlign=\"end\">\r\n <button mat-stroked-button (click)=\"download()\">Scarica</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >Chiudi</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\nimport { FlexLayoutModule, SelectFile, SelectFileDialogData } from '@arsedizioni/ars-utils/ui';\nimport { DialogService } from '@arsedizioni/ars-utils/ui.dialogs';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\n\n@Component({\n templateUrl: './select-file-dialog.component.html',\n styleUrl: './select-file-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, FlexLayoutModule, MatButtonModule, MatCheckboxModule, FormsModule,\n MatDialogActions, MatDialogClose, SafeHtmlPipe]\n})\nexport class SelectFileDialogComponent {\n readonly done = output<SelectFile>();\n private readonly dialogService = inject(DialogService);\n private readonly dialogRef = inject(MatDialogRef<SelectFileDialogComponent>);\n protected readonly dialogData = signal<SelectFileDialogData>(inject(MAT_DIALOG_DATA) ?? {});\n protected readonly file = signal<File | undefined>(undefined);\n protected fileClass = signal<'selectfile-file' | 'selectfile-file-drop'>('selectfile-file');\n\n /**\n * Handles the native file input change event and delegates to `selectFile`.\n * @param e - The DOM change event from the file input.\n */\n protected update(e: Event): void {\n const input = e.target as HTMLInputElement;\n if (input.files?.length) {\n this.selectFile(input.files[0]);\n }\n }\n\n /**\n * Validates and sets the selected file, showing an error if size or type constraints are violated.\n * @param file - The `File` object to validate and store.\n */\n private selectFile(file: File): void {\n const data = this.dialogData();\n const maxSize = data.maxSize ?? 0;\n if (maxSize > 0) {\n const size = file.size / 1048576;\n if (size > maxSize) {\n this.dialogService.error(`File troppo grande (massimo ${SystemUtils.formatFileSize(maxSize * 1048576)})`);\n return;\n }\n }\n if (data.accept) {\n const accept = data.accept.toLowerCase();\n const a = file.name.split('.').pop()?.toLowerCase();\n let b = file.type.toLowerCase();\n if (b.startsWith('image/') && accept.includes('image/*')) {\n b = 'image/*';\n } else if (b.startsWith('video/') && accept.includes('video/*')) {\n b = 'video/*';\n } else if (b.startsWith('audio/') && accept.includes('audio/*')) {\n b = 'audio/*';\n }\n if (!accept.includes(a ?? '') && !accept.includes(b)) {\n this.dialogService.error(`Sono accettati solo questi tipi di file: ${accept}`);\n return;\n }\n }\n this.file.set(file);\n }\n\n /**\n * Formats a byte count into a human-readable size string.\n * @param size - File size in bytes.\n * @returns A formatted size string (e.g. \"1.2 MB\").\n */\n protected size(size: number): string {\n return SystemUtils.formatFileSize(size);\n }\n\n /** Emits the selected file and options, then closes the dialog. */\n protected ok(): void {\n this.done.emit({ file: this.file(), options: this.dialogData().options });\n setTimeout(() => {\n this.dialogRef.close();\n }, 500);\n }\n\n /** Highlights the drop zone when a drag enters the area.\n * @param e - The drag event.\n */\n protected onDragOver(e: DragEvent): void {\n this.fileClass.set('selectfile-file-drop');\n e.preventDefault();\n }\n\n /** Highlights the drop zone when a dragged item enters.\n * @param e - The drag event.\n */\n protected onDragEnter(e: DragEvent): void {\n this.fileClass.set('selectfile-file-drop');\n e.preventDefault();\n }\n\n /** Resets the drop zone style when dragging ends.\n * @param e - The drag event.\n */\n protected onDragEnd(e: DragEvent): void {\n this.fileClass.set('selectfile-file');\n e.preventDefault();\n }\n\n /** Resets the drop zone style when a dragged item leaves the area.\n * @param e - The drag event.\n */\n protected onDragLeave(e: DragEvent): void {\n this.fileClass.set('selectfile-file');\n e.preventDefault();\n }\n\n /**\n * Handles a file drop event, extracting and processing the dropped files.\n * @param e - The drop event.\n */\n protected onDrop(e: DragEvent): void {\n this.fileClass.set('selectfile-file');\n e.preventDefault();\n e.stopPropagation();\n if (e.dataTransfer?.files?.length) {\n this.addFiles(e.dataTransfer.files);\n }\n }\n\n /**\n * Picks the first file from the list and passes it to `selectFile`.\n * @param files - The `FileList` from the drag-and-drop event.\n */\n private addFiles(files: FileList): void {\n if (files.length > 0) {\n this.selectFile(files[0]);\n }\n }\n}\n\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n@if (dialogData().description) {\n<div class=\"selectfile-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n}\n<mat-dialog-content class=\"dialog-content\">\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxLayoutAlign=\"center center\" fxFill>\n <div fxFlex=\"*\" [class]=\"fileClass()\" (drop)=\"onDrop($event)\" (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\" (dragenter)=\"onDragEnter($event)\" (dragend)=\"onDragEnd($event)\">\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxLayoutAlign=\"center center\" fxFill>\n <div fxFlex=\"10px\" fxFlexAlign=\"start\" class=\"x-small secondary\"><i>Trascina qui il file o selezionalo</i></div>\n <div>\n <input #_file type=\"file\" [accept]=\"dialogData().accept\" [hidden]=\"true\" (change)=\"update($event)\" />\n <button type=\"button\" mat-stroked-button (click)=\"_file.click()\">Seleziona file...</button>\n </div>\n @if (file()) {\n <div style=\"padding:0 24px\">\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFill>\n <div class=\"small accent bold\"><i>{{file().name}}</i></div>\n <div class=\"small\">Dimensioni: <i>{{size(file().size)}}</i></div>\n </div>\n </div>\n }\n </div>\n </div>\n @if (dialogData().options) {\n <div style=\"padding-bottom: 24px;\">\n @for (o of dialogData().options; track o; let i = $index) {\n <div>\n <mat-checkbox (change)=\"o.selected = $event.checked\" [checked]=\"o.selected === true\" name=\"opt_{{i}}\" >\n {{o.description}}\n </mat-checkbox>\n </div>\n }\n </div>\n }\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\n <div fxFlex=\"50\">\n @if (dialogData().helpLink) {\n <a mat-stroked-button href=\"{{dialogData().helpLink}}\" target=\"_blank\">{{dialogData().helpCaption}}</a>\n }\n </div>\n <div fxFlex=\"50\" fxLayoutAlign=\"end\">\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"!file()\">{{dialogData().okCaption}}</button>\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\n </div>\n </div>\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\nimport { FlexLayoutModule, SelectFile, SelectPictureFileDialogData } from '@arsedizioni/ars-utils/ui';\nimport { DialogService } from '@arsedizioni/ars-utils/ui.dialogs';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n templateUrl: './select-picture-dialog.component.html',\n styleUrl: './select-picture-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, FlexLayoutModule, MatButtonModule, MatCheckboxModule, FormsModule,\n MatDialogActions, MatDialogClose, SafeHtmlPipe]\n})\nexport class SelectPictureDialogComponent {\n readonly done = output<SelectFile>();\n private readonly dialogService = inject(DialogService);\n private readonly dialogRef = inject(MatDialogRef<SelectPictureDialogComponent>);\n protected readonly dialogData = signal<SelectPictureFileDialogData>(inject(MAT_DIALOG_DATA) ?? {});\n protected readonly file = signal<File | undefined>(undefined);\n protected fileClass = signal<'selectpicture-file' | 'selectpicture-file-drop'>('selectpicture-file');\n protected pictureWidth = signal<number>(0);\n protected pictureHeight = signal<number>(0);\n protected picturePreview = signal<any>(undefined);\n\n /**\n * Handles the native file input change event and delegates to `selectFile`.\n * @param e - The DOM change event from the file input.\n */\n protected update(e: Event): void {\n const input = e.target as HTMLInputElement;\n if (input.files?.length) {\n this.selectFile(input.files[0]);\n }\n }\n\n /**\n * Validates the file size and type, then reads it as a data URL to generate a preview.\n * @param file - The `File` object to validate and preview.\n */\n private selectFile(file: File): void {\n const data = this.dialogData();\n const maxSize = data.maxSize ?? 0;\n if (maxSize > 0) {\n const size = file.size / 1048576;\n if (size > maxSize) {\n this.dialogService.error(`File troppo grande (massimo ${SystemUtils.formatFileSize(maxSize * 1048576)})`);\n return;\n }\n }\n if (data.accept) {\n const accept = data.accept.toLowerCase();\n const a = file.name.split('.').pop()?.toLowerCase();\n let b = file.type.toLowerCase();\n if (b.startsWith('image/') && accept.includes('image/*')) {\n b = 'image/*';\n } else if (b.startsWith('video/') && accept.includes('video/*')) {\n b = 'video/*';\n } else if (b.startsWith('audio/') && accept.includes('audio/*')) {\n b = 'audio/*';\n }\n if (!accept.includes(a ?? '') && !accept.includes(b)) {\n this.dialogService.error(`Sono accettati solo questi tipi di file: ${accept}`);\n return;\n }\n }\n const reader = new FileReader();\n reader.onload = (_e: ProgressEvent<FileReader>) => {\n const img = new Image();\n img.onload = () => {\n const maxWidth = data.maxWidth ?? 0;\n if (maxWidth > 0 && img.width > maxWidth) {\n this.dialogService.error(`Immagine troppo larga (massimo ${maxWidth} pixel)`);\n return;\n }\n const maxHeight = data.maxHeight ?? 0;\n if (maxHeight > 0 && img.height > maxHeight) {\n this.dialogService.error(`Immagine troppo alta (massimo ${maxHeight} pixel)`);\n return;\n }\n this.pictureWidth.set(img.width);\n this.pictureHeight.set(img.height);\n this.picturePreview.set((_e.target as FileReader).result);\n this.file.set(file);\n };\n img.src = (_e.target as FileReader).result as string;\n };\n reader.readAsDataURL(file);\n }\n\n /**\n * Formats a byte count into a human-readable size string.\n * @param size - File size in bytes.\n * @returns A formatted size string (e.g. \"1.2 MB\").\n */\n protected size(size: number): string {\n return SystemUtils.formatFileSize(size);\n }\n\n /** Emits the selected file and options, then closes the dialog. */\n protected ok(): void {\n this.done.emit({ file: this.file(), options: this.dialogData().options });\n setTimeout(() => {\n this.dialogRef.close();\n }, 500);\n }\n\n /** Highlights the drop zone when a dragged item is over it.\n * @param e - The drag event.\n */\n protected onDragOver(e: DragEvent): void {\n this.fileClass.set('selectpicture-file-drop');\n e.preventDefault();\n }\n\n /** Highlights the drop zone when a dragged item enters.\n * @param e - The drag event.\n */\n protected onDragEnter(e: DragEvent): void {\n this.fileClass.set('selectpicture-file-drop');\n e.preventDefault();\n }\n\n /** Resets the drop zone style when dragging ends.\n * @param e - The drag event.\n */\n protected onDragEnd(e: DragEvent): void {\n this.fileClass.set('selectpicture-file');\n e.preventDefault();\n }\n\n /** Resets the drop zone style when a dragged item leaves.\n * @param e - The drag event.\n */\n protected onDragLeave(e: DragEvent): void {\n this.fileClass.set('selectpicture-file');\n e.preventDefault();\n }\n\n /**\n * Handles a file drop event, extracting and processing the dropped image.\n * @param e - The drop event.\n */\n protected onDrop(e: DragEvent): void {\n this.fileClass.set('selectpicture-file');\n e.preventDefault();\n e.stopPropagation();\n if (e.dataTransfer?.files?.length) {\n this.addFiles(e.dataTransfer.files);\n }\n }\n\n /**\n * Picks the first file from the list and passes it to `selectFile`.\n * @param files - The `FileList` from the drag-and-drop event.\n */\n private addFiles(files: FileList): void {\n if (files.length > 0) {\n this.selectFile(files[0]);\n }\n }\n}\n\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n@if (dialogData().description) {\n<div class=\"selectpicture-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n}\n<mat-dialog-content class=\"dialog-content\">\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxLayoutGap=\"24px\" fxFill>\n <div fxFlex=\"*\" [class]=\"fileClass()\" (drop)=\"onDrop($event)\" (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\" (dragenter)=\"onDragEnter($event)\" (dragend)=\"onDragEnd($event)\">\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxLayoutAlign=\"center center\" fxFill>\n <div fxFlex=\"10px\" fxFlexAlign=\"start\" class=\"x-small secondary\"><i>Trascina qui l'immagine o selezionala</i></div>\n <div>\n <input #_file type=\"file\" [hidden]=\"true\" [accept]=\"dialogData().accept ?? 'image/*'\"\n (change)=\"update($event)\" />\n <button type=\"button\" mat-stroked-button (click)=\"_file.click()\">Seleziona file...</button>\n </div>\n @if (file()) {\n <div style=\"padding:0 24px\">\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFill>\n <img [src]=\"picturePreview()\" class=\"selectpicture-preview\">\n <div class=\"small accent bold \"><i>{{file().name}}</i></div>\n <div class=\"small\">Dimensioni:<i>{{pictureWidth()}} x {{pictureHeight()}} ({{size(file().size)}})</i></div>\n </div>\n </div>\n }\n </div>\n </div>\n @if (dialogData().options) {\n <div style=\"padding-bottom: 24px;\">\n @for (o of dialogData().options; track o; let i = $index) {\n <div>\n <mat-checkbox (change)=\"o.selected = $event.checked\" [checked]=\"o.selected === true\" name=\"opt_{{i}}\" >\n {{o.description}}\n </mat-checkbox>\n </div>\n }\n </div>\n }\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"!file()\">{{dialogData().okCaption}}</button>\n <button mat-stroked-button mat-dialog-close >Annulla</button>\n </div>\n</mat-dialog-actions>\n","/*\n * Public API Surface of @arsedizioni/ars-utils/ui.files\n */\nexport * from './file-input/file-input.component';\nexport * from './file-preview/file-preview.component';\nexport * from './select-file/select-file-dialog.component';\nexport * from './select-picture/select-picture-dialog.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i4","i1","i2","i3"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arsedizioni/ars-utils",
|
|
3
|
-
"version": "22.5.
|
|
3
|
+
"version": "22.5.7",
|
|
4
4
|
"author": {
|
|
5
5
|
"email": "software@arsedizioni.it",
|
|
6
6
|
"name": "Fabio Buscaroli, Alberto Doria"
|
|
@@ -70,6 +70,10 @@
|
|
|
70
70
|
"types": "./types/arsedizioni-ars-utils-core.markdown.d.ts",
|
|
71
71
|
"default": "./fesm2022/arsedizioni-ars-utils-core.markdown.mjs"
|
|
72
72
|
},
|
|
73
|
+
"./core.validators": {
|
|
74
|
+
"types": "./types/arsedizioni-ars-utils-core.validators.d.ts",
|
|
75
|
+
"default": "./fesm2022/arsedizioni-ars-utils-core.validators.mjs"
|
|
76
|
+
},
|
|
73
77
|
"./evolution.common": {
|
|
74
78
|
"types": "./types/arsedizioni-ars-utils-evolution.common.d.ts",
|
|
75
79
|
"default": "./fesm2022/arsedizioni-ars-utils-evolution.common.mjs"
|
|
@@ -1052,7 +1052,7 @@ declare class ClipperDocumentMenuComponent {
|
|
|
1052
1052
|
private readonly renderer2;
|
|
1053
1053
|
private readonly clipperService;
|
|
1054
1054
|
readonly useSelections: _angular_core.InputSignal<boolean>;
|
|
1055
|
-
readonly selectionSource: _angular_core.InputSignal<"
|
|
1055
|
+
readonly selectionSource: _angular_core.InputSignal<"selection" | "bag" | "none">;
|
|
1056
1056
|
/**
|
|
1057
1057
|
* Computed signal that returns the current effective document selection.
|
|
1058
1058
|
* Re-evaluates when any input signal or the underlying selection model changes.
|