{"version":3,"file":"koobiq-components-file-upload.mjs","sources":["../../../packages/components/file-upload/primitives/file-drop.ts","../../../packages/components/file-upload/primitives/file-picker.ts","../../../packages/components/file-upload/dropzone.ts","../../../packages/components/file-upload/file-upload.ts","../../../packages/components/file-upload/multiple-file-upload.component.ts","../../../packages/components/file-upload/multiple-file-upload.component.html","../../../packages/components/file-upload/single-file-upload.component.ts","../../../packages/components/file-upload/single-file-upload.component.html","../../../packages/components/file-upload/file-upload.module.ts","../../../packages/components/file-upload/koobiq-components-file-upload.ts"],"sourcesContent":["import { Platform } from '@angular/cdk/platform';\nimport { DestroyRef, Directive, inject, model, NgZone, output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { isHtmlElementOrNull, kbqInjectNativeElement } from '@koobiq/components/core';\nimport { filter, fromEvent } from 'rxjs';\nimport { KbqFile } from '../file-upload';\n\nconst isFolderCanBeDragged = (): boolean => 'webkitGetAsEntry' in DataTransferItem.prototype;\nconst entryIsDirectory = (entry?: FileSystemEntry): entry is FileSystemDirectoryEntry => !!entry && entry.isDirectory;\nconst entryIsFile = (entry?: FileSystemEntry): entry is FileSystemFileEntry => !!entry && entry.isFile;\n\n@Directive()\nexport class KbqDrop {\n    /** @docs-private */\n    isSafari = inject(Platform).SAFARI;\n    /**\n     * Controls whether drag-and-drop functionality is enabled.\n     * When true, all drag events are filtered out and ignored.\n     */\n    readonly disabled = model(false);\n\n    /** Emits an event when file items were dropped. */\n    readonly filesDropped = output<KbqFile[]>();\n\n    /** @docs-private */\n    protected onDrop(event: DragEvent) {\n        if (!isFolderCanBeDragged()) {\n            // eslint-disable-next-line no-console\n            console.warn('Drag-and-drop functionality for folders is not supported by this browser.');\n        }\n\n        event.preventDefault();\n        event.stopPropagation();\n\n        if (event.dataTransfer && event.dataTransfer.items.length > 0) {\n            const fileEntries: FileSystemEntry[] = Array.from(event.dataTransfer.items)\n                .filter((item: DataTransferItem) => item.kind === 'file')\n                .map((item: DataTransferItem) => item.webkitGetAsEntry()!);\n\n            Promise.all(fileEntries.map(unwrapDirectory))\n                .then((fileList) => fileList.reduce((res, next) => res.concat(next), []))\n                .then((entries: KbqFile[]) => this.filesDropped.emit(entries));\n        }\n    }\n}\n\n@Directive({\n    selector: '[kbqFileDrop]',\n    exportAs: 'kbqFileDrop',\n    host: {\n        class: 'kbq-file-drop',\n        '[class.kbq-file-drop_dragover]': 'dragover()'\n    }\n})\nexport class KbqFileDropDirective extends KbqDrop {\n    /** Flag that controls css-class modifications on drag events. */\n    protected readonly dragover = signal(false);\n\n    private readonly ngZone = inject(NgZone);\n    private readonly nativeElement = kbqInjectNativeElement();\n    private readonly destroyRef = inject(DestroyRef);\n\n    constructor() {\n        super();\n\n        this.init();\n    }\n\n    onDragEnter(event: DragEvent): void {\n        event.preventDefault();\n        event.stopPropagation();\n\n        this.dragover.set(true);\n    }\n\n    /** @docs-private */\n    onDragOver(event: DragEvent): void {\n        event.preventDefault();\n        event.stopPropagation();\n    }\n\n    /** @docs-private */\n    onDragLeave(event: DragEvent): void {\n        if (\n            isHtmlElementOrNull(event.currentTarget) &&\n            isHtmlElementOrNull(event.relatedTarget) &&\n            event.currentTarget?.contains(event.relatedTarget)\n        )\n            return;\n\n        event.preventDefault();\n        event.stopPropagation();\n        this.dragover.set(false);\n    }\n\n    /** @docs-private */\n    onDrop(event: DragEvent): void {\n        super.onDrop(event);\n        this.dragover.set(false);\n    }\n\n    private init(): void {\n        this.ngZone.runOutsideAngular(() => {\n            fromEvent<DragEvent>(this.nativeElement, 'dragenter')\n                .pipe(\n                    filter(() => !this.disabled()),\n                    takeUntilDestroyed(this.destroyRef)\n                )\n                .subscribe((e) => this.onDragEnter(e));\n\n            fromEvent<DragEvent>(this.nativeElement, 'dragover')\n                .pipe(\n                    filter(() => !this.disabled()),\n                    takeUntilDestroyed(this.destroyRef)\n                )\n                .subscribe((e) => this.onDragOver(e));\n\n            fromEvent<DragEvent>(this.nativeElement, 'dragleave')\n                .pipe(\n                    filter(() => !this.disabled()),\n                    takeUntilDestroyed(this.destroyRef)\n                )\n                .subscribe((e) => this.onDragLeave(e));\n\n            fromEvent<DragEvent>(this.nativeElement, 'drop')\n                .pipe(\n                    filter(() => !this.disabled()),\n                    takeUntilDestroyed(this.destroyRef)\n                )\n                .subscribe((e) => {\n                    this.ngZone.run(() => this.onDrop(e));\n                });\n        });\n    }\n}\n\nconst unwrapDirectory = async (item: FileSystemEntry): Promise<KbqFile[]> => {\n    const queue: (FileSystemEntry | Promise<FileSystemEntry[]>)[] = [item];\n    const result: Promise<KbqFile>[] = [];\n\n    while (queue.length > 0) {\n        const next = queue.pop();\n\n        if (next instanceof Promise) {\n            queue.push(...(await next));\n        } else if (entryIsDirectory(next)) {\n            const directoryReader = next.createReader();\n\n            queue.push(\n                new Promise<FileSystemEntry[]>((resolve, reject) => directoryReader.readEntries(resolve, reject))\n            );\n        } else if (entryIsFile(next)) {\n            const fileEntry = next;\n\n            result.push(\n                new Promise((resolve, reject) => {\n                    fileEntry.file((file) => {\n                        (file as KbqFile).fullPath = fileEntry.fullPath;\n                        resolve(file as KbqFile);\n                    }, reject);\n                })\n            );\n        }\n    }\n\n    return Promise.all(result);\n};\n","import {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    Directive,\n    ElementRef,\n    inject,\n    input,\n    model,\n    output,\n    viewChild\n} from '@angular/core';\n\n/**\n * File upload context.\n */\n@Directive({\n    selector: '[kbqFileUploadContext]',\n    exportAs: 'kbqFileUploadContext'\n})\nexport class KbqFileUploadContext {\n    /** id for file input */\n    readonly id = input<string | null>(null);\n    /** Whether file input selectable or not */\n    readonly disabled = model<boolean | null>(null);\n    /** Selection mode for file input */\n    readonly multiple = input(null, { transform: booleanAttribute });\n    /** File type specifiers */\n    readonly accept = input<string | null>(null);\n    /**\n     * Reflects webkitdirectory attribute, which indicates that elements can only select directories instead of files.\n     */\n    readonly onlyDirectory = input<boolean | null>(null);\n}\n\n/**\n * Loader component to trigger Browser API.\n */\n@Component({\n    selector: '[kbqFileLoader]',\n    exportAs: 'kbqFileLoader',\n    template: `\n        <ng-content />\n        <input\n            #input\n            tabindex=\"0\"\n            type=\"file\"\n            class=\"cdk-visually-hidden\"\n            [attr.multiple]=\"innerMultiple()\"\n            [attr.webkitdirectory]=\"innerOnlyDirectory()\"\n            [accept]=\"innerAccept()\"\n            [disabled]=\"innerDisabled()\"\n            [id]=\"innerFor()\"\n            (change)=\"fileChange.emit($event)\"\n        />\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        class: 'kbq-file-loader'\n    }\n})\nexport class KbqFileLoader {\n    private fileUploadContext = inject(KbqFileUploadContext, { optional: true });\n\n    /** Whether file input selectable or not */\n    readonly disabled = input<boolean>(false);\n    /** Selection mode for file input */\n    readonly multiple = input<boolean | null>(null);\n    /** File type specifiers */\n    readonly accept = input<string | null>(null);\n    /** id for file input  */\n    readonly for = input<string | null>(null);\n    /**\n     * Reflects webkitdirectory attribute,\n     * which indicates that elements can only select directories instead of files.\n     * @link [`HTMLInputElement: webkitdirectory property`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory)\n     */\n    readonly onlyDirectory = input<boolean | null>(null);\n\n    /** Event fires when file selected in file-picker. */\n    readonly fileChange = output<Event>();\n\n    /** Underlying file input element */\n    readonly input = viewChild.required<ElementRef<HTMLInputElement>>('input');\n\n    /** @docs-private */\n    protected readonly innerDisabled = computed(() => this.fileUploadContext?.disabled() ?? this.disabled());\n    /** @docs-private */\n    protected readonly innerMultiple = computed(() => this.fileUploadContext?.multiple() ?? this.multiple());\n    /** @docs-private */\n    protected readonly innerAccept = computed(() => this.fileUploadContext?.accept() ?? this.accept());\n    /** @docs-private */\n    protected readonly innerFor = computed(() => this.fileUploadContext?.id() ?? this.for());\n    /** @docs-private */\n    protected readonly innerOnlyDirectory = computed(\n        () => this.fileUploadContext?.onlyDirectory() ?? this.onlyDirectory()\n    );\n}\n\n/**\n * Responsible for list update (add/remove)\n */\n@Directive({\n    selector: '[kbqFileList]',\n    exportAs: 'kbqFileList',\n    host: {\n        class: 'kbq-file-list'\n    }\n})\nexport class KbqFileList<T> {\n    /** Current list of items. */\n    readonly list = model<T[]>([]);\n    /**\n     * Emits an event containing a tuple of file and file's index when removed from the file list.\n     * Useful when handle removed files, skipping filtering file list.\n     */\n    readonly itemRemoved = output<[T, number]>();\n    /** Emits array of items that were added to the list. */\n    readonly itemsAdded = output<T[]>();\n\n    /** Adds a single item to the list and emits event */\n    add(item: T): void {\n        this.update((current) => [...current, item]);\n        this.itemsAdded.emit([item]);\n    }\n\n    /** Adds multiple items to the list and emits event */\n    addArray(items: T[]): void {\n        this.update((current) => [...current, ...items]);\n        this.itemsAdded.emit(items);\n    }\n\n    /** Removes the first occurrence of the specified item. Returns removed items and emits event. */\n    remove(item: T): T[] {\n        const removed: T[] = [];\n\n        this.update((current) =>\n            current.filter((currentItem) => {\n                const isRemoved = currentItem !== item;\n\n                if (isRemoved) {\n                    removed.push(currentItem);\n                }\n\n                return isRemoved;\n            })\n        );\n\n        return removed;\n    }\n\n    /** Removes item at specified index. Returns removed items and emits event. */\n    removeAt(index: number): T[] {\n        const removed: T[] = [];\n\n        this.update((current) => {\n            const removedItem = current.splice(index, 1);\n\n            removed.push(...removedItem);\n\n            return current;\n        });\n        this.itemRemoved.emit([removed[0], index]);\n\n        return removed;\n    }\n\n    private update(fn: (current: T[]) => T[]): void {\n        this.list.update(fn);\n    }\n}\n","import { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    DestroyRef,\n    Directive,\n    inject,\n    Injectable,\n    InjectionToken,\n    Injector,\n    input,\n    NgZone,\n    OnDestroy,\n    TemplateRef,\n    ViewContainerRef,\n    ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport {\n    isHtmlElementOrNull,\n    KBQ_DEFAULT_LOCALE_ID,\n    KBQ_LOCALE_SERVICE,\n    KBQ_WINDOW,\n    KbqDefaultSizes,\n    kbqInjectNativeElement,\n    ruRULocaleData\n} from '@koobiq/components/core';\nimport {\n    KbqEmptyState,\n    KbqEmptyStateIcon,\n    KbqEmptyStateText,\n    KbqEmptyStateTitle\n} from '@koobiq/components/empty-state';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { filter, fromEvent, of, Subject, takeUntil } from 'rxjs';\nimport { KbqMultipleFileUploadComponent } from './multiple-file-upload.component';\nimport { KbqDrop } from './primitives';\nimport { KbqSingleFileUploadComponent } from './single-file-upload.component';\n\n/** Dropzone overlay content configuration. */\nexport type KbqDropzoneData = Partial<{\n    /** Optional caption text displayed below the title. */\n    caption: string;\n    /** Visual size of the dropzone empty state content. */\n    size: KbqDefaultSizes;\n    /** Title text displayed in the dropzone; falls back to localized default. */\n    title: string;\n    /** Whether focus should be automatically captured when the overlay opens. */\n    autoCapture: boolean;\n}>;\n\n/** Injection token that can be used to access the data that was passed in to a modal. */\nexport const KBQ_DROPZONE_DATA = new InjectionToken<KbqDropzoneData>('KbqDropzoneData');\n\n/**\n * Determines if a mouse event occurred outside the viewport boundaries.\n * @docs-private\n */\nexport const isOutsideViewport = ({\n    event,\n    innerWidth,\n    innerHeight,\n    xAxisMinThreshold,\n    yAxisMinThreshold\n}: {\n    event: MouseEvent;\n    innerWidth: number;\n    innerHeight: number;\n    xAxisMinThreshold: number;\n    yAxisMinThreshold: number;\n}): boolean => {\n    return (\n        event.clientX <= xAxisMinThreshold ||\n        event.clientY <= yAxisMinThreshold ||\n        event.clientX >= innerWidth ||\n        event.clientY >= innerHeight\n    );\n};\n\n/**\n * Service that provides full-screen drag-and-drop overlay functionality.\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class KbqFullScreenDropzoneService extends KbqDrop implements OnDestroy {\n    /** Completely terminates all subscriptions when emitted */\n    private readonly dropAbort = new Subject<void>();\n    private readonly overlay: Overlay = inject(Overlay);\n    private readonly window = inject(KBQ_WINDOW);\n    private readonly injector = inject(Injector);\n    private readonly ngZone = inject(NgZone);\n    private overlayRef?: OverlayRef;\n\n    constructor() {\n        super();\n    }\n\n    ngOnDestroy() {\n        this.close();\n    }\n\n    /**\n     * Initializes drag-and-drop event listeners on the document body.\n     * @param config - Dropzone configuration\n     */\n    init(config?: KbqDropzoneData): void {\n        this.ngZone.runOutsideAngular(() => {\n            fromEvent<DragEvent>(this.window.document.body, 'dragenter')\n                .pipe(\n                    filter(() => !this.disabled()),\n                    takeUntil(this.dropAbort)\n                )\n                .subscribe((event) => {\n                    event.preventDefault();\n                    event.stopPropagation();\n                    this.open(config);\n                });\n\n            fromEvent<DragEvent>(this.window.document.body, 'dragover')\n                .pipe(\n                    filter(() => !this.disabled()),\n                    takeUntil(this.dropAbort)\n                )\n                .subscribe((event) => {\n                    event.preventDefault();\n                    event.stopPropagation();\n                });\n\n            fromEvent<DragEvent>(this.window.document.body, 'dragleave')\n                .pipe(\n                    filter(() => !this.disabled()),\n                    takeUntil(this.dropAbort)\n                )\n                .subscribe((event) => this.onDragLeave(event));\n\n            fromEvent<DragEvent>(this.window.document.body, 'drop')\n                .pipe(\n                    filter(() => !this.disabled()),\n                    takeUntil(this.dropAbort)\n                )\n                .subscribe((event) => {\n                    this.ngZone.run(() => this.onDrop(event));\n                });\n        });\n    }\n\n    /** Stops all drag-and-drop event listeners and cleans up subscriptions. */\n    stop(): void {\n        this.dropAbort.next();\n    }\n\n    /**\n     * Opens the dropzone overlay.\n     * @param config - Dropzone configuration\n     */\n    open(config?: KbqDropzoneData): void {\n        if (this.overlayRef?.hasAttached()) return;\n\n        this.overlayRef = this.createOverlay();\n\n        let injector: Injector | null = null;\n\n        if (config) {\n            injector = Injector.create({\n                parent: this.injector,\n                providers: [{ provide: KBQ_DROPZONE_DATA, useValue: config }]\n            });\n        }\n\n        this.overlayRef.attach(new ComponentPortal(KbqDropzoneContent, undefined, injector));\n\n        setTimeout(() => this.overlayRef?.addPanelClass('kbq-dropzone-overlay__attached'));\n    }\n\n    /** Closes and disposes the overlay. */\n    close(): void {\n        this.overlayRef?.dispose();\n    }\n\n    /** @docs-private */\n    onDrop(event: DragEvent): void {\n        super.onDrop(event);\n        this.close();\n    }\n\n    /** @docs-private */\n    protected createOverlay(): OverlayRef {\n        return this.overlay.create({\n            hasBackdrop: false,\n            panelClass: ['kbq-dropzone-overlay', 'kbq-fullscreen-dropzone'],\n            width: '100%',\n            height: '100%',\n            positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically()\n        });\n    }\n\n    /** @see https://bugs.webkit.org/show_bug.cgi?id=66547 */\n    private onDragLeave(event: DragEvent): void {\n        if (!isHtmlElementOrNull(event.currentTarget) || !isHtmlElementOrNull(event.relatedTarget)) return;\n\n        const isWithinViewport = this.isSafari\n            ? !isOutsideViewport({\n                  event,\n                  innerWidth: this.window.innerWidth,\n                  innerHeight: this.window.innerHeight,\n                  xAxisMinThreshold: 0,\n                  yAxisMinThreshold: 0\n              })\n            : event.currentTarget?.contains(event.relatedTarget);\n\n        if (isWithinViewport) return;\n\n        event.preventDefault();\n        event.stopPropagation();\n        this.close();\n    }\n}\n\n/**\n * Directive that turns an element into a local drag-and-drop zone.\n *\n * Displays an overlay over the host element on drag enter, handles drag events,\n * and emits dropped files to a connected file upload component.\n */\n@Directive({\n    selector: '[kbqLocalDropzone]',\n    exportAs: 'kbqLocalDropzone',\n    host: { class: 'kbq-local-dropzone__trigger' }\n})\nexport class KbqLocalDropzone extends KbqDrop {\n    /** File upload component to connect dropped files to */\n    readonly connectedTo = input<KbqSingleFileUploadComponent | KbqMultipleFileUploadComponent>(undefined, {\n        alias: 'kbqConnectedTo'\n    });\n\n    private readonly elementRef = kbqInjectNativeElement();\n    private readonly rects = this.elementRef.getBoundingClientRect();\n    private readonly overlay: Overlay = inject(Overlay);\n    private readonly viewContainerRef: ViewContainerRef = inject(ViewContainerRef);\n    private readonly injector = inject(Injector);\n    private readonly ngZone = inject(NgZone);\n    private readonly destroyRef = inject(DestroyRef);\n    private overlayRef?: OverlayRef;\n\n    constructor() {\n        super();\n\n        this.filesDropped.subscribe((files) => this.connectedTo()?.onFileDropped(files));\n\n        fromEvent<DragEvent>(this.elementRef, 'dragenter')\n            .pipe(takeUntilDestroyed())\n            .subscribe((event) => {\n                event.preventDefault();\n                event.stopPropagation();\n                this.open();\n            });\n    }\n\n    /** Opens the dropzone overlay positioned over the host element. */\n    open(config?: KbqDropzoneData): void {\n        if (this.overlayRef?.hasAttached()) return;\n\n        this.overlayRef = this.createOverlay();\n\n        let injector: Injector | null = null;\n\n        if (config) {\n            injector = Injector.create({\n                parent: this.injector,\n                providers: [{ provide: KBQ_DROPZONE_DATA, useValue: config }]\n            });\n        }\n\n        this.overlayRef.attach(new ComponentPortal(KbqDropzoneContent, this.viewContainerRef, injector));\n\n        this.init();\n\n        setTimeout(() => this.overlayRef?.addPanelClass('kbq-dropzone-overlay__attached'));\n    }\n\n    /** Closes and disposes the overlay. */\n    close(): void {\n        this.overlayRef?.dispose();\n    }\n\n    /** @docs-private */\n    onDrop(event: DragEvent) {\n        super.onDrop(event);\n        this.close();\n    }\n\n    /**\n     * Initializes drag-and-drop event listeners on the overlay element.\n     * Handles dragover, dragleave, and drop events to manage overlay state and file drops.\n     */\n    protected init(): void {\n        this.ngZone.runOutsideAngular(() => {\n            if (!this.overlayRef) return;\n            fromEvent<DragEvent>(this.overlayRef.overlayElement, 'dragover')\n                .pipe(\n                    filter(() => !this.disabled()),\n                    takeUntilDestroyed(this.destroyRef)\n                )\n                .subscribe((event) => {\n                    event.preventDefault();\n                    event.stopPropagation();\n                });\n\n            fromEvent<DragEvent>(this.overlayRef.overlayElement, 'dragleave')\n                .pipe(\n                    filter(() => !this.disabled()),\n                    takeUntilDestroyed(this.destroyRef)\n                )\n                .subscribe((event) => this.onDragLeave(event));\n\n            fromEvent<DragEvent>(this.overlayRef.overlayElement, 'drop')\n                .pipe(\n                    filter(() => !this.disabled()),\n                    takeUntilDestroyed(this.destroyRef)\n                )\n                .subscribe((event) => this.onDrop(event));\n        });\n    }\n\n    /** Creates an overlay positioned and sized to match the host element. */\n    protected createOverlay(): OverlayRef {\n        return this.overlay.create({\n            hasBackdrop: false,\n            panelClass: ['kbq-dropzone-overlay', 'kbq-local-dropzone'],\n            width: this.elementRef.offsetWidth,\n            height: this.elementRef.offsetHeight,\n            positionStrategy: this.overlay\n                .position()\n                .flexibleConnectedTo(this.elementRef)\n                .withFlexibleDimensions(false)\n                .withPositions([\n                    { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'top' }\n                ])\n        });\n    }\n\n    private onDragLeave(event: DragEvent): void {\n        if (!isHtmlElementOrNull(event.currentTarget) || !isHtmlElementOrNull(event.relatedTarget)) return;\n\n        const isWithinViewport = this.isSafari\n            ? !isOutsideViewport({\n                  event,\n                  innerWidth: this.rects.x + this.elementRef.offsetWidth,\n                  innerHeight: this.rects.y + this.elementRef.offsetHeight,\n                  xAxisMinThreshold: this.rects.x,\n                  yAxisMinThreshold: this.rects.y\n              })\n            : event.currentTarget?.contains(event.relatedTarget);\n\n        if (isWithinViewport) return;\n\n        event.preventDefault();\n        event.stopPropagation();\n        this.close();\n    }\n}\n\n/** Component that displays an empty state for file upload areas. */\n@Component({\n    selector: 'kbq-file-upload-empty-state',\n    imports: [\n        KbqEmptyStateIcon,\n        KbqEmptyStateTitle,\n        KbqEmptyStateText,\n        KbqIcon,\n        NgTemplateOutlet\n    ],\n    template: `\n        <i\n            class=\"kbq-multiple-file-upload__empty-state-upload-icon\"\n            kbq-empty-state-icon\n            kbq-icon=\"kbq-cloud-arrow-up-o_24\"\n        ></i>\n        @if (title()) {\n            <div kbq-empty-state-title>{{ title() }}</div>\n        }\n        @if (caption(); as captionText) {\n            <div kbq-empty-state-text>\n                @if (isTemplateRef(captionText)) {\n                    <ng-container [ngTemplateOutlet]=\"captionText\" />\n                } @else if (captionText) {\n                    {{ captionText }}\n                }\n            </div>\n        }\n    `,\n    styleUrls: ['./dropzone.scss', '../empty-state/empty-state.scss'],\n    host: {\n        class: 'kbq-multiple-file-upload__empty-state'\n    },\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KbqFileUploadEmptyState extends KbqEmptyState {\n    /** Title text to display below the upload icon */\n    title = input<string>();\n    /** Caption text or template to display below the title */\n    caption = input<string | TemplateRef<any>>();\n\n    constructor() {\n        super();\n        this.size = 'big';\n    }\n\n    /** @docs-private */\n    protected isTemplateRef(value: string | TemplateRef<any>): value is TemplateRef<any> {\n        return value instanceof TemplateRef;\n    }\n}\n\n@Component({\n    selector: 'kbq-dropzone-content',\n    imports: [KbqFileUploadEmptyState],\n    template: `\n        <kbq-file-upload-empty-state\n            [size]=\"config?.size ?? 'normal'\"\n            [title]=\"config?.title ?? title()\"\n            [caption]=\"config?.caption ?? ''\"\n        />\n    `,\n    styleUrls: ['./dropzone.scss'],\n    host: {\n        class: 'kbq-dropzone-content',\n        '[attr.tabindex]': '0'\n    },\n    hostDirectives: [CdkTrapFocus],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KbqDropzoneContent {\n    /** @docs-private */\n    protected readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n    /** @docs-private */\n    protected readonly config = inject<KbqDropzoneData>(KBQ_DROPZONE_DATA, { optional: true });\n\n    private readonly trapFocus = inject(CdkTrapFocus, { host: true });\n    private readonly localeId = toSignal(this.localeService?.changes.asObservable() ?? of(KBQ_DEFAULT_LOCALE_ID));\n\n    constructor() {\n        this.trapFocus.autoCapture = this.config?.autoCapture ?? true;\n    }\n\n    /** @docs-private */\n    protected readonly title = computed(() => {\n        return this.localeService && this.localeId()\n            ? this.localeService.getParams('fileUpload').multiple.title\n            : ruRULocaleData.fileUpload.multiple.title;\n    });\n}\n","import {\n    ChangeDetectorRef,\n    DestroyRef,\n    ElementRef,\n    inject,\n    InjectionToken,\n    InputSignal,\n    Renderer2\n} from '@angular/core';\nimport { FormGroupDirective, NgControl, NgForm, UntypedFormControl } from '@angular/forms';\nimport {\n    CanUpdateErrorState,\n    ErrorStateMatcher,\n    KBQ_LOCALE_SERVICE,\n    KbqBaseFileUploadLocaleConfig,\n    KbqEnumValues,\n    KbqMultipleFileUploadLocaleConfig\n} from '@koobiq/components/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { KbqFullScreenDropzoneService } from './dropzone';\nimport { KbqFileList, KbqFileUploadContext } from './primitives';\n\nexport interface KbqFile extends File {\n    /* used when directory dropped */\n    fullPath: string;\n}\n\nexport interface KbqFileItem {\n    file: File;\n    hasError?: boolean;\n    loading?: BehaviorSubject<boolean>;\n    progress?: BehaviorSubject<number>;\n}\n\n/**\n * @docs-private\n * @deprecated Will be removed in next major release\n */\nexport interface KbqInputFile {\n    disabled: boolean;\n    accept?: string[];\n    onFileSelectedViaClick(event: Event): void;\n    onFileDropped(files: FileList | KbqFile[]): void;\n}\n\n/**\n * @docs-private\n * @deprecated Will be removed in next major release\n */\nexport interface KbqInputFileLabel {\n    /* Text for description, used with `browseLink` */\n    captionText: string;\n    /* Text for link with which the file(s) can be selected to download */\n    browseLink: string;\n    /* Header for multiple file-upload in default size */\n    title?: string | undefined;\n}\n\n/** Upload modes enum. */\nexport enum KbqFileUploadAllowedType {\n    File = 'file',\n    Folder = 'folder',\n    Mixed = 'mixed'\n}\n\n/** Allowed upload modes for the upload component. */\nexport type KbqFileUploadAllowedTypeValues = KbqEnumValues<KbqFileUploadAllowedType>;\n\n/** @docs-private */\nexport type KbqFileUploadCaptionContext = {\n    captionText: string;\n    browseLink?: string;\n    captionTextSeparator?: string;\n    browseLinkFolder?: string;\n};\n\n/**\n * @deprecated use FormControl for validation\n */\nexport type KbqFileValidatorFn = (file: File) => string | null;\n\n/* Object for labels customization inside file upload component */\nexport const KBQ_FILE_UPLOAD_CONFIGURATION = new InjectionToken<\n    KbqBaseFileUploadLocaleConfig | KbqMultipleFileUploadLocaleConfig\n>('KbqFileUploadConfiguration');\n\n/** @deprecated use `FileValidators.isCorrectExtension` instead. Will be removed in next major release. */\nexport const isCorrectExtension = (file: File, accept?: string[]): boolean => {\n    if (!accept?.length) return true;\n\n    const { name, type } = file;\n    const fileExt: string = name.split('.').pop() || '';\n\n    for (const acceptedExtensionOrMimeType of accept) {\n        const typeAsRegExp = new RegExp(acceptedExtensionOrMimeType);\n\n        if (typeAsRegExp.test(fileExt) || typeAsRegExp.test(type)) {\n            return true;\n        }\n    }\n\n    return false;\n};\n\n/** @docs-private */\nexport abstract class KbqFileUploadBase<T = KbqBaseFileUploadLocaleConfig> implements CanUpdateErrorState {\n    protected abstract localeConfig: InputSignal<Partial<T> | undefined>;\n    /** Tracks whether the component is in an error state based on the control, parent form,\n     * and `errorStateMatcher`, triggering visual updates and state changes if needed. */\n    errorState: boolean = false;\n\n    /** An object used to control the error state of the component. */\n    abstract errorStateMatcher: ErrorStateMatcher;\n\n    /**\n     * Emits whenever the component state changes and should cause the parent\n     * form-field to update. Implemented as part of `KbqFormFieldControl`.\n     * @docs-private\n     */\n    readonly stateChanges = new Subject<void>();\n\n    /** @docs-private */\n    protected readonly fileUploadContext = inject(KbqFileUploadContext, { host: true });\n    /** @docs-private */\n    protected readonly fileList = inject<KbqFileList<KbqFileItem>>(KbqFileList, { host: true });\n\n    /** @docs-private */\n    get disabled(): boolean {\n        return this.fileUploadContext.disabled() ?? false;\n    }\n\n    /** @docs-private */\n    protected readonly cdr = inject(ChangeDetectorRef);\n    /** @docs-private */\n    protected readonly renderer = inject(Renderer2);\n    /** @docs-private */\n    protected readonly destroyRef = inject(DestroyRef);\n    /** @docs-private */\n    protected readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n    /** @docs-private */\n    protected readonly ngControl = inject(NgControl, { optional: true, self: true });\n    /** @docs-private */\n    protected readonly parentForm = inject(NgForm, { optional: true });\n    /** @docs-private */\n    protected readonly parentFormGroup = inject(FormGroupDirective, { optional: true });\n    /** @docs-private */\n    protected readonly defaultErrorStateMatcher = inject(ErrorStateMatcher);\n    /** @docs-private */\n    protected readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n    /** @docs-private */\n    protected readonly dropzoneService = inject(KbqFullScreenDropzoneService);\n\n    /** implemented as part of base class. Decided not use mixinErrorState, not to overcomplicate\n     * @docs-private */\n    updateErrorState() {\n        const oldState = this.errorState;\n        const parent = this.parentFormGroup || this.parentForm;\n        const matcher = this.errorStateMatcher || this.defaultErrorStateMatcher;\n        const control = this.ngControl ? (this.ngControl.control as UntypedFormControl) : null;\n        const newState = matcher.isErrorState(control, parent);\n\n        if (newState !== oldState) {\n            this.errorState = newState;\n            this.stateChanges.next();\n        }\n    }\n\n    /** Merges base configuration with locale-specific overrides. */\n    protected buildConfig<T>(config: T): T {\n        const localeConfig = this.localeConfig();\n\n        return { ...config, ...localeConfig };\n    }\n}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { AsyncPipe, isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    ContentChild,\n    ContentChildren,\n    DoCheck,\n    effect,\n    ElementRef,\n    EventEmitter,\n    inject,\n    input,\n    Input,\n    Output,\n    PLATFORM_ID,\n    QueryList,\n    TemplateRef,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor } from '@angular/forms';\nimport {\n    ErrorStateMatcher,\n    KBQ_DEFAULT_LOCALE_ID,\n    KbqDataSizePipe,\n    KbqEnumValues,\n    KbqMultipleFileUploadLocaleConfig,\n    ruRULocaleData\n} from '@koobiq/components/core';\nimport { KbqEllipsisCenterDirective } from '@koobiq/components/ellipsis-center';\nimport { KbqHint } from '@koobiq/components/form-field';\nimport { KbqIcon, KbqIconButton } from '@koobiq/components/icon';\nimport { KbqLink } from '@koobiq/components/link';\nimport { KbqListModule } from '@koobiq/components/list';\nimport { KbqProgressSpinnerModule, ProgressSpinnerMode } from '@koobiq/components/progress-spinner';\nimport { BehaviorSubject, of } from 'rxjs';\nimport { KbqDropzoneData, KbqFileUploadEmptyState, KbqFullScreenDropzoneService } from './dropzone';\nimport {\n    KBQ_FILE_UPLOAD_CONFIGURATION,\n    KbqFile,\n    KbqFileItem,\n    KbqFileUploadAllowedType,\n    KbqFileUploadBase,\n    KbqFileUploadCaptionContext,\n    KbqFileValidatorFn\n} from './file-upload';\nimport { KbqFileDropDirective, KbqFileList, KbqFileLoader, KbqFileUploadContext } from './primitives';\n\nlet nextMultipleFileUploadUniqueId = 0;\n\nexport interface KbqInputFileMultipleLabel extends KbqMultipleFileUploadLocaleConfig {\n    [k: string | number | symbol]: unknown;\n}\n\nexport const KBQ_MULTIPLE_FILE_UPLOAD_DEFAULT_CONFIGURATION: KbqMultipleFileUploadLocaleConfig =\n    ruRULocaleData.fileUpload.multiple;\n\n@Component({\n    selector: 'kbq-multiple-file-upload,kbq-file-upload[multiple]',\n    imports: [\n        AsyncPipe,\n        NgTemplateOutlet,\n        KbqFileDropDirective,\n        KbqIconButton,\n        KbqIcon,\n        KbqLink,\n        KbqListModule,\n        KbqDataSizePipe,\n        KbqProgressSpinnerModule,\n        KbqEllipsisCenterDirective,\n        KbqFileLoader,\n        KbqFileUploadEmptyState\n    ],\n    templateUrl: './multiple-file-upload.component.html',\n    styleUrls: ['./file-upload.scss', './file-upload-tokens.scss', './multiple-file-upload.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        class: 'kbq-multiple-file-upload'\n    },\n    hostDirectives: [\n        {\n            directive: KbqFileUploadContext,\n            inputs: ['id', 'disabled']\n        },\n        { directive: KbqFileList, outputs: ['listChange: filesChange', 'itemsAdded', 'itemRemoved'] }\n    ],\n    providers: [KbqFullScreenDropzoneService]\n})\nexport class KbqMultipleFileUploadComponent\n    extends KbqFileUploadBase\n    implements AfterViewInit, ControlValueAccessor, DoCheck\n{\n    /**\n     * A value responsible for progress spinner type.\n     * Loading logic depends on selected mode */\n    @Input() progressMode: ProgressSpinnerMode = 'determinate';\n    /** Array of file type specifiers */\n    @Input() accept?: string[];\n    /**\n     * @deprecated use `FormControl.errors`\n     */\n    @Input() errors: string[] = [];\n    @Input() size: 'compact' | 'default' = 'default';\n    /**\n     * custom ID for the file input element.\n     */\n    @Input() inputId: string = `kbq-multiple-file-upload-${nextMultipleFileUploadUniqueId++}`;\n    /**\n     * @deprecated use FormControl for validation\n     */\n    @Input() customValidation?: KbqFileValidatorFn[];\n\n    /** An object used to control the error state of the component. */\n    @Input() errorStateMatcher: ErrorStateMatcher;\n\n    get files(): KbqFileItem[] {\n        return this.fileList.list();\n    }\n\n    @Input()\n    set files(currentFileList: KbqFileItem[]) {\n        this.fileList.list.set(currentFileList);\n        this.cvaOnChange(this.files);\n    }\n\n    /**\n     * Determines which kind of items the upload component can accept.\n     * @default mixed\n     */\n    allowed = input<KbqEnumValues<KbqFileUploadAllowedType>>(KbqFileUploadAllowedType.File);\n    /**\n     * Controls whether to display fullscreen dropzone.\n     * Provide configuration object to enable, or undefined to disable.\n     */\n    fullScreenDropZone = input<KbqDropzoneData | boolean>();\n\n    /** Optional configuration to override default labels with localized text.*/\n    readonly localeConfig = input<Partial<KbqMultipleFileUploadLocaleConfig>>();\n\n    /** Emits an event containing updated file list.\n     * public output will be renamed to filesChange in next major release (#DS-3700) */\n    @Output('fileQueueChanged') readonly filesChange: EventEmitter<KbqFileItem[]> = new EventEmitter<KbqFileItem[]>();\n    /**\n     * Emits an event containing a chunk of files added to the file list.\n     * Useful when handling added files, skipping filtering file list.\n     */\n    @Output() readonly filesAdded: EventEmitter<KbqFileItem[]> = new EventEmitter<KbqFileItem[]>();\n    /**\n     * Emits an event containing a tuple of file and file's index when removed from the file list.\n     * Useful when handle removed files, skipping filtering file list.\n     */\n    @Output() readonly fileRemoved: EventEmitter<[KbqFileItem, number]> = new EventEmitter<[KbqFileItem, number]>();\n\n    /** File Icon Template */\n    @ContentChild('kbqFileIcon', { static: false, read: TemplateRef })\n    protected readonly customFileIcon: TemplateRef<HTMLElement>;\n\n    @ViewChild(KbqFileLoader) protected readonly fileLoader: KbqFileLoader | undefined;\n\n    /** @docs-private */\n    @ContentChildren(KbqHint) protected readonly hint: QueryList<TemplateRef<any>>;\n\n    /** @docs-private */\n    hasFocus = false;\n\n    /** @docs-private */\n    readonly resolvedLocaleConfig = computed<KbqMultipleFileUploadLocaleConfig>(() => {\n        const localeId = this.localeId();\n        const localeConfig = this.localeConfig();\n\n        const defaultLocaleConfig: KbqMultipleFileUploadLocaleConfig =\n            this.localeService && localeId\n                ? this.localeService.getParams('fileUpload').multiple\n                : KBQ_MULTIPLE_FILE_UPLOAD_DEFAULT_CONFIGURATION;\n\n        const baseLocaleConfig: KbqMultipleFileUploadLocaleConfig = this.configuration || defaultLocaleConfig;\n\n        return { ...baseLocaleConfig, ...localeConfig };\n    });\n\n    /** @docs-private */\n    protected readonly captionContext = computed<KbqFileUploadCaptionContext>(() => {\n        const config = this.resolvedLocaleConfig();\n\n        switch (this.allowed()) {\n            case KbqFileUploadAllowedType.Mixed: {\n                const [before, after] = config.captionTextWithFolder.split('{{ browseLink }}');\n\n                const [captionTextSeparator] = after.split('{{ browseLinkFolderMixed }}');\n\n                return {\n                    captionText: before,\n                    browseLink: config.browseLink,\n                    captionTextSeparator,\n                    browseLinkFolder: config.browseLinkFolderMixed\n                };\n            }\n            case KbqFileUploadAllowedType.Folder: {\n                const [before] = config.captionTextOnlyFolder.split('{{ browseLinkFolder }}');\n\n                return { captionText: before, browseLinkFolder: config.browseLinkFolder };\n            }\n            case KbqFileUploadAllowedType.File:\n            default: {\n                const caption = this.size === 'compact' ? config.captionTextForCompactSize : config.captionText;\n                const [before] = caption.split('{{ browseLink }}');\n\n                return { captionText: before, browseLink: config.browseLink };\n            }\n        }\n    });\n\n    /** cvaOnChange function registered via registerOnChange (ControlValueAccessor).\n     * @docs-private\n     */\n    cvaOnChange = (_: KbqFileItem[]) => {};\n\n    /** onTouch function registered via registerOnTouch (ControlValueAccessor).\n     * @docs-private */\n    onTouched = () => {};\n\n    /** @docs-private */\n    get input(): ElementRef<HTMLInputElement> | undefined {\n        return this.fileLoader?.input();\n    }\n\n    /** @docs-private */\n    get acceptedFiles(): string {\n        return this.accept?.join(',') || '*/*';\n    }\n\n    /**\n     * @deprecated use `FormControl.errors`\n     */\n    get hasErrors(): boolean {\n        return this.errors && !!this.errors.length;\n    }\n\n    /** @docs-private */\n    get hasHint(): boolean {\n        return this.hint.length > 0;\n    }\n\n    /**\n     * Indicates an invalid state based on `errorState`,\n     * applying a CSS class in HTML for visual feedback.\n     * @docs-private\n     */\n    get invalid(): boolean {\n        return this.errorState;\n    }\n\n    /** @docs-private */\n    protected get captionTextWhenSelected(): string {\n        return this.resolvedLocaleConfig().captionTextWhenSelected.split('{{ browseLink }}')[0];\n    }\n\n    /** @docs-private */\n    readonly configuration = inject<KbqMultipleFileUploadLocaleConfig>(KBQ_FILE_UPLOAD_CONFIGURATION, {\n        optional: true\n    });\n\n    private readonly localeId = toSignal(this.localeService?.changes.asObservable() ?? of(KBQ_DEFAULT_LOCALE_ID));\n\n    private readonly focusMonitor = inject(FocusMonitor);\n    private readonly platformId = inject(PLATFORM_ID);\n\n    constructor() {\n        super();\n\n        if (this.ngControl) {\n            // Note: we provide the value accessor through here, instead of\n            // the `providers` to avoid running into a circular import.\n            this.ngControl.valueAccessor = this;\n        }\n\n        this.dropzoneService.filesDropped.subscribe((files) => this.onFileDropped(files));\n\n        effect(() => {\n            const fullScreenDropZone = this.fullScreenDropZone();\n\n            if (fullScreenDropZone) {\n                const config = fullScreenDropZone === true ? ({} satisfies KbqDropzoneData) : fullScreenDropZone;\n\n                this.dropzoneService.init(config);\n            } else {\n                this.dropzoneService.stop();\n            }\n        });\n    }\n\n    ngDoCheck() {\n        if (this.ngControl) {\n            // We need to re-evaluate this on every change detection cycle, because there are some\n            // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n            // that whatever logic is in here has to be super lean or we risk destroying the performance.\n            this.updateErrorState();\n        }\n    }\n\n    ngAfterViewInit() {\n        // FormControl specific errors update\n        this.ngControl?.statusChanges?.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n            this.errors = Object.values(this.ngControl?.errors || {});\n            this.cdr.markForCheck();\n        });\n\n        this.stateChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.cdr.markForCheck());\n    }\n\n    /** Implemented as part of ControlValueAccessor.\n     * @docs-private */\n    writeValue(files: FileList | KbqFileItem[] | null): void {\n        // @TODO: remove FileList from arguments since it redundant. It resolves SSR (#DS-4414)\n        if (!isPlatformBrowser(this.platformId)) return;\n\n        this.files = files instanceof FileList || !files ? this.mapToFileItem(files) : files;\n        this.filesChange.emit(this.files);\n    }\n\n    /** Implemented as part of ControlValueAccessor.\n     * @docs-private */\n    registerOnChange(fn: any): void {\n        this.cvaOnChange = fn;\n    }\n\n    /** Implemented as part of ControlValueAccessor.\n     * @docs-private */\n    registerOnTouched(fn: any): void {\n        this.onTouched = fn;\n    }\n    /**\n     * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n     * @param isDisabled Whether the control should be disabled.\n     * @docs-private\n     */\n    setDisabledState(isDisabled: boolean): void {\n        this.fileUploadContext.disabled.set(isDisabled);\n        this.cdr.markForCheck();\n    }\n\n    /** @docs-private */\n    onFileSelectedViaClick({ target }: Event) {\n        if (this.disabled) return;\n\n        const filesToAdd = target instanceof HTMLInputElement ? this.mapToFileItem(target.files) : [];\n\n        this.onFileAdded(filesToAdd);\n        // allows the same file selection every time user clicks on the control.\n        this.renderer.setProperty(target, 'value', null);\n    }\n\n    /** @docs-private */\n    onFileDropped(files: KbqFile[]) {\n        if (this.disabled) return;\n\n        const filesToAdd = this.mapToFileItem(files);\n\n        this.onFileAdded(filesToAdd);\n    }\n\n    /** @docs-private */\n    deleteFile(index: number, event?: MouseEvent, origin?: FocusOrigin): void {\n        if (this.disabled) return;\n\n        event?.stopPropagation();\n\n        const removedFile = this.fileList.removeAt(index)[0];\n\n        this.cvaOnChange(this.files);\n\n        this.fileRemoved.emit([removedFile, index]);\n        this.filesChange.emit(this.files);\n        this.onTouched();\n\n        if (this.files.length === 0) {\n            setTimeout(() => {\n                const input = this.input?.nativeElement;\n\n                if (input) {\n                    this.focusMonitor.focusVia(input, origin ?? 'keyboard');\n                }\n            });\n\n            return;\n        }\n    }\n\n    private mapToFileItem(files: FileList | KbqFile[] | null): KbqFileItem[] {\n        if (!files) {\n            return [];\n        }\n\n        return Array.from(files).map((file: File) => ({\n            file,\n            hasError: this.validateFile(file),\n            loading: new BehaviorSubject<boolean>(false),\n            progress: new BehaviorSubject<number>(0)\n        }));\n    }\n\n    private validateFile(file: File): boolean | undefined {\n        if (!this.customValidation?.length) {\n            return;\n        }\n\n        const errorsPerFile = this.customValidation\n            .reduce((errors: (string | null)[], validatorFn: KbqFileValidatorFn) => {\n                errors.push(validatorFn(file));\n\n                return errors;\n            }, [])\n            .filter(Boolean) as string[];\n\n        this.errors = [\n            ...this.errors,\n            ...errorsPerFile\n        ];\n\n        return !!errorsPerFile.length;\n    }\n\n    private onFileAdded(filesToAdd: KbqFileItem[]) {\n        this.fileList.addArray(filesToAdd);\n\n        this.cvaOnChange(this.files);\n\n        this.filesAdded.emit(filesToAdd);\n        this.filesChange.emit(this.files);\n        this.onTouched();\n    }\n}\n","<div\n    kbqFileDrop\n    class=\"kbq-file-upload\"\n    [class.kbq-disabled]=\"disabled\"\n    [class.kbq-error]=\"invalid\"\n    [class.kbq-selected]=\"files.length\"\n    [class.kbq-file-upload_default]=\"size === 'default'\"\n    [class.kbq-file-upload_compact]=\"size === 'compact'\"\n    [disabled]=\"!!fullScreenDropZone()\"\n    (filesDropped)=\"onFileDropped($event)\"\n>\n    @let localeData = resolvedLocaleConfig();\n    @if (!files.length) {\n        @if (size === 'default') {\n            <kbq-file-upload-empty-state [size]=\"'normal'\" [title]=\"localeData.title\" [caption]=\"captionText\" />\n        } @else {\n            <div class=\"kbq-file-dropzone\">\n                <i kbq-icon=\"kbq-arrow-up-from-bracket_16\" class=\"kbq-file-upload__dropzone-icon\"></i>\n                <span class=\"kbq-file-upload__dropzone-caption\">\n                    <ng-container *ngTemplateOutlet=\"captionText\" />\n                </span>\n            </div>\n        }\n    } @else {\n        <div class=\"kbq-file-upload__wrapper\">\n            <kbq-list class=\"kbq-file-upload__list kbq-scrollbar\" role=\"list\">\n                @for (file of files; track file) {\n                    <kbq-list-item\n                        role=\"listitem\"\n                        class=\"kbq-file-upload__item\"\n                        [class.kbq-disabled]=\"disabled\"\n                        (keydown.backspace)=\"deleteFile($index)\"\n                        (keydown.delete)=\"deleteFile($index)\"\n                    >\n                        <div class=\"kbq-file-upload__row\" [class.kbq-error]=\"file.hasError\">\n                            <div class=\"kbq-file-upload__file kbq-file-upload__grid-cell\">\n                                @if ({ loading: file.loading | async, progress: file.progress | async }; as asyncData) {\n                                    @if (!asyncData.loading) {\n                                        <ng-container\n                                            [ngTemplateOutlet]=\"$any(customFileIcon)\"\n                                            [ngTemplateOutletContext]=\"{ $implicit: file }\"\n                                        />\n                                    }\n                                    @if (asyncData.loading) {\n                                        <kbq-progress-spinner\n                                            class=\"kbq-file-upload-name-cell__icon\"\n                                            [mode]=\"progressMode\"\n                                            [value]=\"asyncData.progress || 0\"\n                                        />\n                                    }\n                                }\n                                <span\n                                    class=\"kbq-file-item__text\"\n                                    [debounceInterval]=\"0\"\n                                    [kbqTooltipDisabled]=\"disabled\"\n                                    [kbqEllipsisCenter]=\"file.file.name\"\n                                ></span>\n                            </div>\n                            <div class=\"kbq-file-upload__size kbq-file-upload__grid-cell\">\n                                {{ file.file.size | kbqDataSize }}\n                            </div>\n                            <i\n                                kbq-icon-button=\"kbq-circle-xmark_16\"\n                                class=\"kbq-file-upload__action kbq-file-upload__grid-cell\"\n                                [color]=\"file.hasError ? 'error' : 'contrast-fade'\"\n                                [disabled]=\"disabled\"\n                                (click)=\"deleteFile($index, $event, 'program')\"\n                            ></i>\n                        </div>\n                    </kbq-list-item>\n                }\n            </kbq-list>\n            <div class=\"kbq-file-upload__list-footer kbq-file-dropzone\">\n                <i kbq-icon=\"kbq-arrow-up-from-bracket_16\" class=\"kbq-file-upload__dropzone-icon\"></i>\n                <span class=\"kbq-file-upload__dropzone-caption\">\n                    <ng-container *ngTemplateOutlet=\"captionText\" />\n                </span>\n            </div>\n        </div>\n    }\n</div>\n\n@if (hasHint) {\n    <div class=\"kbq-file-upload__hint\">\n        <ng-content select=\"kbq-hint\" />\n    </div>\n}\n\n<ng-template #captionText>\n    @let context = captionContext();\n    @if (files.length) {\n        {{ captionTextWhenSelected }}\n    } @else if (context.captionText) {\n        {{ context.captionText }}\n    }\n    @if (context.browseLink) {\n        <label\n            kbq-link\n            pseudo\n            kbqFileLoader\n            [onlyDirectory]=\"null\"\n            [accept]=\"acceptedFiles\"\n            [disabled]=\"disabled\"\n            [for]=\"fileUploadContext.id() || inputId\"\n            [tabIndex]=\"-1\"\n            [multiple]=\"true\"\n            (fileChange)=\"onFileSelectedViaClick($event)\"\n        >\n            {{ context.browseLink }}\n        </label>\n    }\n    @if (context.captionTextSeparator) {\n        {{ context.captionTextSeparator }}\n    }\n    @if (context.browseLinkFolder) {\n        <label\n            kbq-link\n            pseudo\n            kbqFileLoader\n            [onlyDirectory]=\"true\"\n            [disabled]=\"disabled\"\n            [tabIndex]=\"-1\"\n            (fileChange)=\"onFileSelectedViaClick($event)\"\n        >\n            {{ context.browseLinkFolder }}\n        </label>\n    }\n</ng-template>\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { AsyncPipe, isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    ContentChildren,\n    DoCheck,\n    effect,\n    ElementRef,\n    EventEmitter,\n    inject,\n    input,\n    Input,\n    Output,\n    PLATFORM_ID,\n    QueryList,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormControlStatus } from '@angular/forms';\nimport {\n    ErrorStateMatcher,\n    KBQ_DEFAULT_LOCALE_ID,\n    KbqBaseFileUploadLocaleConfig,\n    KbqDataSizePipe,\n    KbqFileUploadLocaleConfig,\n    ruRULocaleData\n} from '@koobiq/components/core';\nimport { KbqEllipsisCenterDirective } from '@koobiq/components/ellipsis-center';\nimport { KbqHint } from '@koobiq/components/form-field';\nimport { KbqIcon, KbqIconButton } from '@koobiq/components/icon';\nimport { KbqLink } from '@koobiq/components/link';\nimport { KbqProgressSpinner, ProgressSpinnerMode } from '@koobiq/components/progress-spinner';\nimport { BehaviorSubject, of } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { KbqDropzoneData, KbqFullScreenDropzoneService } from './dropzone';\nimport {\n    KBQ_FILE_UPLOAD_CONFIGURATION,\n    KbqFile,\n    KbqFileItem,\n    KbqFileUploadAllowedType,\n    KbqFileUploadAllowedTypeValues,\n    KbqFileUploadBase,\n    KbqFileUploadCaptionContext,\n    KbqFileValidatorFn\n} from './file-upload';\nimport { KbqFileDropDirective, KbqFileList, KbqFileLoader, KbqFileUploadContext } from './primitives';\n\nlet nextSingleFileUploadUniqueId = 0;\n\nexport const KBQ_SINGLE_FILE_UPLOAD_DEFAULT_CONFIGURATION: KbqFileUploadLocaleConfig['single'] =\n    ruRULocaleData.fileUpload.single;\n\n@Component({\n    selector: 'kbq-single-file-upload,kbq-file-upload:not([multiple])',\n    imports: [\n        AsyncPipe,\n        KbqFileDropDirective,\n        KbqLink,\n        KbqIcon,\n        KbqIconButton,\n        KbqProgressSpinner,\n        KbqEllipsisCenterDirective,\n        KbqDataSizePipe,\n        KbqFileLoader,\n        NgTemplateOutlet\n    ],\n    templateUrl: './single-file-upload.component.html',\n    styleUrls: ['./file-upload.scss', './file-upload-tokens.scss', './single-file-upload.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        class: 'kbq-single-file-upload',\n        '[class.kbq-single-file-upload_selected]': '!!file'\n    },\n    hostDirectives: [\n        {\n            directive: KbqFileUploadContext,\n            inputs: ['id', 'disabled', 'multiple']\n        },\n        { directive: KbqFileList, outputs: ['listChange: fileChange'] }\n    ],\n    providers: [KbqFullScreenDropzoneService]\n})\nexport class KbqSingleFileUploadComponent\n    extends KbqFileUploadBase\n    implements AfterViewInit, ControlValueAccessor, DoCheck\n{\n    /**\n     * A value responsible for progress spinner type.\n     * Loading logic depends on selected mode */\n    @Input() progressMode: ProgressSpinnerMode = 'determinate';\n    /** Array of file type specifiers */\n    @Input() accept?: string[];\n    /**\n     * @deprecated use `FormControl.errors`\n     */\n    @Input() errors: string[] = [];\n    @Input() inputId: string = `kbq-single-file-upload-${nextSingleFileUploadUniqueId++}`;\n    /**\n     * @deprecated use FormControl for validation\n     */\n    @Input() customValidation?: KbqFileValidatorFn[];\n\n    /** An object used to control the error state of the component. */\n    @Input() errorStateMatcher: ErrorStateMatcher;\n\n    @Input()\n    get file(): KbqFileItem | null {\n        const files = this.fileList.list();\n\n        return files.length === 0 ? null : files[0];\n    }\n\n    set file(currentFile: KbqFileItem | null) {\n        this.fileList.list.set(currentFile === null ? [] : [currentFile]);\n        this.cvaOnChange(currentFile);\n        this.cdr.markForCheck();\n    }\n\n    /**\n     * Controls whether to display the file size information.\n     * @default true\n     */\n    @Input({ transform: booleanAttribute }) showFileSize: boolean = true;\n\n    /**\n     * Determines which kind of items the upload component can accept.\n     * @default mixed\n     */\n    allowed = input<KbqFileUploadAllowedTypeValues>(KbqFileUploadAllowedType.File);\n    /**\n     * Controls whether to display fullscreen dropzone.\n     * Provide configuration object to enable, or undefined to disable.\n     */\n    fullScreenDropZone = input<KbqDropzoneData | boolean>();\n\n    /** Optional configuration to override default labels with localized text.*/\n    readonly localeConfig = input<Partial<KbqBaseFileUploadLocaleConfig>>();\n\n    /** Emits an event containing updated file.\n     * public output will be renamed to fileChange in next major release (#DS-3700) */\n    @Output('fileQueueChange') readonly fileChange: EventEmitter<KbqFileItem | null> =\n        new EventEmitter<KbqFileItem | null>();\n\n    /** @docs-private */\n    @ViewChild(KbqFileLoader) protected readonly fileLoader: KbqFileLoader | undefined;\n\n    /** @docs-private */\n    @ContentChildren(KbqHint) private readonly hint: QueryList<KbqHint>;\n\n    /** cvaOnChange function registered via registerOnChange (ControlValueAccessor).\n     * @docs-private\n     */\n    cvaOnChange = (_: KbqFileItem | null) => {};\n\n    /** onTouch function registered via registerOnTouch (ControlValueAccessor).\n     * @docs-private\n     */\n    onTouched = () => {};\n\n    /** @docs-private */\n    get input(): ElementRef<HTMLInputElement> | undefined {\n        return this.fileLoader?.input();\n    }\n\n    /** @docs-private */\n    get acceptedFiles(): string {\n        return this.accept?.join(',') || '*/*';\n    }\n\n    /** @docs-private */\n    get hasHint(): boolean {\n        return this.hint.length > 0;\n    }\n\n    /**\n     * Indicates an invalid state based on file errors or `errorState`,\n     * applying a CSS class in HTML for visual feedback.\n     * @docs-private\n     */\n    get invalid(): boolean {\n        return !!this.file?.hasError || this.errorState;\n    }\n\n    /** @docs-private */\n    readonly configuration: KbqBaseFileUploadLocaleConfig | null = inject(KBQ_FILE_UPLOAD_CONFIGURATION, {\n        optional: true\n    });\n\n    /** @docs-private */\n    protected readonly captionContext = computed<KbqFileUploadCaptionContext>(() => {\n        const config = this.resolvedLocaleConfig();\n\n        switch (this.allowed()) {\n            case KbqFileUploadAllowedType.Mixed: {\n                const [before, after] = config.captionTextWithFolder.split('{{ browseLink }}');\n\n                const [captionTextSeparator] = after.split('{{ browseLinkFolderMixed }}');\n\n                return {\n                    captionText: before,\n                    browseLink: config.browseLink,\n                    captionTextSeparator,\n                    browseLinkFolder: config.browseLinkFolderMixed\n                };\n            }\n            case KbqFileUploadAllowedType.Folder: {\n                const [before] = config.captionTextOnlyFolder.split('{{ browseLinkFolder }}');\n\n                return { captionText: before, browseLinkFolder: config.browseLinkFolder };\n            }\n            case KbqFileUploadAllowedType.File:\n            default: {\n                const [before] = config.captionTextWithFolder.split('{{ browseLink }}');\n\n                return { captionText: before, browseLink: config.browseLink };\n            }\n        }\n    });\n\n    private readonly localeId = toSignal(this.localeService?.changes.asObservable() ?? of(KBQ_DEFAULT_LOCALE_ID));\n\n    /** @docs-private */\n    readonly resolvedLocaleConfig = computed<KbqBaseFileUploadLocaleConfig>(() => {\n        const localeId = this.localeId();\n        const localeConfig = this.localeConfig();\n\n        const defaultLocaleConfig =\n            this.localeService && localeId\n                ? this.localeService.getParams('fileUpload').single\n                : KBQ_SINGLE_FILE_UPLOAD_DEFAULT_CONFIGURATION;\n\n        const baseLocaleConfig: KbqBaseFileUploadLocaleConfig = this.configuration || defaultLocaleConfig;\n\n        return { ...baseLocaleConfig, ...localeConfig };\n    });\n\n    private readonly focusMonitor = inject(FocusMonitor);\n    private readonly platformId = inject(PLATFORM_ID);\n\n    constructor() {\n        super();\n\n        if (this.ngControl) {\n            // Note: we provide the value accessor through here, instead of\n            // the `providers` to avoid running into a circular import.\n            this.ngControl.valueAccessor = this;\n        }\n\n        effect(() => {\n            this.dropzoneService.filesDropped.subscribe((files) => this.onFileDropped(files));\n\n            const fullScreenDropZone = this.fullScreenDropZone();\n\n            if (fullScreenDropZone) {\n                const config = fullScreenDropZone === true ? ({} satisfies KbqDropzoneData) : fullScreenDropZone;\n\n                this.dropzoneService.init(config);\n            } else {\n                this.dropzoneService.stop();\n            }\n        });\n    }\n\n    ngDoCheck() {\n        if (this.ngControl) {\n            // We need to re-evaluate this on every change detection cycle, because there are some\n            // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n            // that whatever logic is in here has to be super lean or we risk destroying the performance.\n            this.updateErrorState();\n        }\n    }\n\n    ngAfterViewInit() {\n        // FormControl specific errors update\n        this.ngControl?.statusChanges\n            ?.pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n            .subscribe((status: FormControlStatus) => {\n                const file = this.file;\n\n                if (file) {\n                    file.hasError = status === 'INVALID';\n                }\n\n                this.errors = Object.values(this.ngControl?.errors || {});\n                this.cdr.markForCheck();\n            });\n\n        this.stateChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.cdr.markForCheck());\n    }\n\n    /** Implemented as part of ControlValueAccessor.\n     * @docs-private */\n    writeValue(file: File | KbqFileItem | null): void {\n        // @TODO: remove File from arguments since it redundant. It resolves SSR (#DS-4414)\n        if (!isPlatformBrowser(this.platformId)) return;\n\n        this.file = file instanceof File ? this.mapToFileItem(file) : file;\n        this.fileChange.emit(this.file);\n    }\n\n    /** Implemented as part of ControlValueAccessor.\n     * @docs-private */\n    registerOnChange(fn: any): void {\n        this.cvaOnChange = fn;\n    }\n\n    /** Implemented as part of ControlValueAccessor.\n     * @docs-private */\n    registerOnTouched(fn: any): void {\n        this.onTouched = fn;\n    }\n\n    /**\n     * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n     * @param isDisabled Whether the control should be disabled.\n     * @docs-private\n     */\n    setDisabledState(isDisabled: boolean): void {\n        this.fileUploadContext.disabled.set(isDisabled);\n        this.cdr.markForCheck();\n    }\n\n    /** @docs-private */\n    onFileSelectedViaClick({ target }: Event): void {\n        if (this.disabled) return;\n\n        const fileToAdd = target instanceof HTMLInputElement ? target.files?.item(0) : null;\n\n        if (fileToAdd) {\n            this.file = this.mapToFileItem(fileToAdd);\n            this.fileChange.emit(this.file);\n        }\n\n        this.onTouched();\n        // allows the same file selection every time user clicks on the control.\n        this.renderer.setProperty(target, 'value', null);\n    }\n\n    /** @docs-private */\n    onFileDropped(files: KbqFile[]): void {\n        if (this.disabled) return;\n\n        if (files?.length) {\n            this.file = this.mapToFileItem(files[0]);\n            this.fileChange.emit(this.file);\n        }\n\n        // mark as touched after file drop even if file wasn't correct\n        this.onTouched();\n    }\n\n    /** @docs-private */\n    deleteItem(event?: MouseEvent, origin?: FocusOrigin): void {\n        if (this.disabled) return;\n\n        event?.stopPropagation();\n        this.file = null;\n        this.fileChange.emit(this.file);\n        this.errors = [];\n        // mark as touched after file drop even if file wasn't correct\n        this.onTouched();\n\n        if (this.file === null) {\n            setTimeout(() => {\n                const input = this.input?.nativeElement;\n\n                if (input) {\n                    this.focusMonitor.focusVia(input, origin ?? 'keyboard');\n                }\n            });\n\n            return;\n        }\n    }\n\n    private mapToFileItem(file: File): KbqFileItem {\n        return {\n            file,\n            hasError: this.validateFile(file),\n            progress: new BehaviorSubject<number>(0),\n            loading: new BehaviorSubject<boolean>(false)\n        };\n    }\n\n    private validateFile(file: File): boolean | undefined {\n        if (!this.customValidation?.length) return;\n\n        this.errors = this.customValidation\n            .reduce((errors: (string | null)[], validatorFn: KbqFileValidatorFn) => {\n                errors.push(validatorFn(file));\n\n                return errors;\n            }, [])\n            .filter(Boolean) as string[];\n\n        return !!this.errors.length;\n    }\n}\n","<div\n    kbqFileDrop\n    class=\"kbq-file-upload\"\n    [class.kbq-disabled]=\"disabled\"\n    [class.kbq-error]=\"invalid\"\n    [disabled]=\"!!fullScreenDropZone()\"\n    (filesDropped)=\"onFileDropped($event)\"\n>\n    @if (!file) {\n        <div class=\"kbq-file-dropzone\">\n            <i kbq-icon=\"kbq-arrow-up-from-bracket_16\" class=\"kbq-file-upload__dropzone-icon\"></i>\n            <span class=\"kbq-file-upload__dropzone-caption\">\n                <ng-container *ngTemplateOutlet=\"captionText; context: captionContext()\" />\n            </span>\n        </div>\n    } @else {\n        @if (file) {\n            <div class=\"kbq-file-item\">\n                <div class=\"kbq-file-item__text-wrapper\">\n                    @if ({ loading: file.loading | async, progress: file.progress | async }; as asyncData) {\n                        @if (!asyncData.loading) {\n                            <ng-content select=\"[kbq-icon]\" />\n                        }\n                        @if (asyncData.loading) {\n                            <kbq-progress-spinner [mode]=\"progressMode\" [value]=\"asyncData.progress || 0\" />\n                        }\n                    }\n                    <div class=\"kbq-file-item__text\" [kbqEllipsisCenter]=\"file.file.name\" [minVisibleLength]=\"10\"></div>\n                </div>\n                @if (showFileSize) {\n                    <div class=\"kbq-file-item__size\">\n                        {{ file.file.size | kbqDataSize }}\n                    </div>\n                }\n            </div>\n            <i\n                kbq-icon-button=\"kbq-circle-xmark_16\"\n                class=\"kbq-file-upload__action\"\n                [color]=\"invalid ? 'error' : 'contrast-fade'\"\n                [disabled]=\"disabled\"\n                (click)=\"deleteItem($event, 'program')\"\n                (keydown.backspace)=\"deleteItem()\"\n                (keydown.delete)=\"deleteItem()\"\n            ></i>\n        }\n    }\n</div>\n\n@if (hasHint) {\n    <div class=\"kbq-file-upload__hint\">\n        <ng-content select=\"kbq-hint\" />\n    </div>\n}\n\n<ng-template\n    #captionText\n    let-captionText=\"captionText\"\n    let-browseLink=\"browseLink\"\n    let-captionTextSeparator=\"captionTextSeparator\"\n    let-browseLinkFolder=\"browseLinkFolder\"\n>\n    @if (captionText) {\n        {{ captionText }}\n    }\n    @if (browseLink) {\n        <label\n            kbq-link\n            pseudo\n            kbqFileLoader\n            [onlyDirectory]=\"null\"\n            [accept]=\"acceptedFiles\"\n            [disabled]=\"disabled\"\n            [for]=\"fileUploadContext.id() || inputId\"\n            [tabIndex]=\"-1\"\n            [multiple]=\"true\"\n            (fileChange)=\"onFileSelectedViaClick($event)\"\n        >\n            {{ browseLink }}\n        </label>\n    }\n    @if (captionTextSeparator) {\n        {{ captionTextSeparator }}\n    }\n    @if (browseLinkFolder) {\n        <label\n            kbq-link\n            pseudo\n            kbqFileLoader\n            [onlyDirectory]=\"true\"\n            [disabled]=\"disabled\"\n            [tabIndex]=\"-1\"\n            (fileChange)=\"onFileSelectedViaClick($event)\"\n        >\n            {{ browseLinkFolder }}\n        </label>\n    }\n</ng-template>\n","import { AsyncPipe, NgClass, NgTemplateOutlet } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { KbqDataSizePipe } from '@koobiq/components/core';\nimport { KbqEllipsisCenterModule } from '@koobiq/components/ellipsis-center';\nimport { KbqFormFieldModule } from '@koobiq/components/form-field';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqLinkModule } from '@koobiq/components/link';\nimport { KbqListModule } from '@koobiq/components/list';\nimport { KbqProgressSpinnerModule } from '@koobiq/components/progress-spinner';\nimport { KbqToolTipModule } from '@koobiq/components/tooltip';\nimport { KbqMultipleFileUploadComponent } from './multiple-file-upload.component';\nimport { KbqFileDropDirective } from './primitives';\nimport { KbqSingleFileUploadComponent } from './single-file-upload.component';\n\n@NgModule({\n    imports: [\n        FormsModule,\n        ReactiveFormsModule,\n        KbqToolTipModule,\n        KbqProgressSpinnerModule,\n        KbqIconModule,\n        KbqButtonModule,\n        KbqListModule,\n        KbqFormFieldModule,\n        KbqEllipsisCenterModule,\n        KbqDataSizePipe,\n        KbqLinkModule,\n        AsyncPipe,\n        NgClass,\n        NgTemplateOutlet,\n        KbqFileDropDirective,\n        KbqSingleFileUploadComponent,\n        KbqMultipleFileUploadComponent\n    ],\n    exports: [\n        KbqSingleFileUploadComponent,\n        KbqMultipleFileUploadComponent,\n        KbqFileDropDirective\n    ]\n})\nexport class KbqFileUploadModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.KbqFileUploadContext","i1.KbqFileList"],"mappings":"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"}