@koobiq/components 19.4.1 → 19.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/accordion/accordion-content.d.ts +1 -1
- package/accordion/accordion-content.directive.d.ts +22 -7
- package/accordion/accordion-header.directive.d.ts +2 -2
- package/accordion/accordion-item.d.ts +74 -3
- package/accordion/accordion-trigger.component.d.ts +15 -2
- package/accordion/accordion-trigger.directive.d.ts +13 -5
- package/accordion/accordion.component.d.ts +67 -6
- package/accordion/accordion.component.scss +9 -27
- package/accordion/public-api.d.ts +0 -2
- package/actions-panel/actions-panel-container.scss +6 -0
- package/actions-panel/actions-panel-tokens.scss +4 -1
- package/autocomplete/autocomplete.component.d.ts +6 -1
- package/autocomplete/autocomplete.module.d.ts +1 -1
- package/autocomplete/autocomplete.scss +14 -3
- package/badge/badge-tokens.scss +3 -3
- package/button/button-group.d.ts +45 -0
- package/button/button-group.scss +17 -0
- package/button/button.component.d.ts +3 -0
- package/button/button.module.d.ts +2 -1
- package/button/public-api.d.ts +1 -0
- package/button-toggle/button-toggle-tokens.scss +1 -1
- package/checkbox/checkbox.d.ts +5 -4
- package/checkbox/checkbox.scss +5 -5
- package/clamped-text/clamped-list.d.ts +41 -0
- package/clamped-text/clamped-text.d.ts +10 -6
- package/clamped-text/constants.d.ts +21 -1
- package/clamped-text/index.d.ts +1 -0
- package/clamped-text/module.d.ts +2 -1
- package/code-block/code-block-tokens.scss +35 -16
- package/code-block/code-block.d.ts +17 -5
- package/code-block/code-block.module.d.ts +1 -1
- package/code-block/code-block.scss +1 -0
- package/code-block/types.d.ts +9 -0
- package/core/common-behaviors/flex.d.ts +4 -0
- package/core/common-behaviors/index.d.ts +1 -0
- package/core/error/error-state-matcher.d.ts +10 -0
- package/core/form-field/form-field-ref.d.ts +3 -1
- package/core/forms/_forms.scss +10 -3
- package/core/locales/en-US.d.ts +2 -0
- package/core/locales/es-LA.d.ts +2 -0
- package/core/locales/locale-service.d.ts +10 -0
- package/core/locales/pt-BR.d.ts +2 -0
- package/core/locales/ru-RU.d.ts +2 -0
- package/core/locales/tk-TM.d.ts +2 -0
- package/core/locales/types.d.ts +2 -0
- package/core/option/_option-action-theme.scss +1 -0
- package/core/option/_option-theme.scss +4 -17
- package/core/option/action-container.scss +4 -6
- package/core/option/option.d.ts +5 -1
- package/core/option/option.scss +5 -0
- package/core/pop-up/pop-up-trigger.d.ts +11 -2
- package/core/select/common.d.ts +4 -4
- package/core/selection/pseudo-checkbox/pseudo-checkbox.scss +2 -2
- package/core/styles/common/_groups-mixins.scss +79 -0
- package/core/styles/common/_groups.scss +4 -34
- package/core/styles/common/_overlay.scss +5 -1
- package/core/styles/common/_select.scss +4 -0
- package/core/styles/theming/scrollbar-tokens.scss +6 -6
- package/core/styles/visual/_layout.scss +0 -2
- package/core/utils/utils.d.ts +2 -0
- package/datepicker/datepicker-input.directive.d.ts +1 -0
- package/dropdown/dropdown-trigger.directive.d.ts +5 -0
- package/dropdown/dropdown.component.d.ts +2 -1
- package/ellipsis-center/ellipsis-center.directive.d.ts +0 -1
- package/fesm2022/koobiq-components-accordion.mjs +301 -237
- package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
- package/fesm2022/koobiq-components-actions-panel.mjs +12 -12
- package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
- package/fesm2022/koobiq-components-alert.mjs +16 -16
- package/fesm2022/koobiq-components-app-switcher.mjs +25 -25
- package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
- package/fesm2022/koobiq-components-autocomplete.mjs +39 -23
- package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
- package/fesm2022/koobiq-components-badge.mjs +14 -14
- package/fesm2022/koobiq-components-badge.mjs.map +1 -1
- package/fesm2022/koobiq-components-breadcrumbs.mjs +25 -25
- package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/koobiq-components-button-toggle.mjs +12 -12
- package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
- package/fesm2022/koobiq-components-button.mjs +146 -24
- package/fesm2022/koobiq-components-button.mjs.map +1 -1
- package/fesm2022/koobiq-components-checkbox.mjs +18 -20
- package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
- package/fesm2022/koobiq-components-clamped-text.mjs +134 -47
- package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
- package/fesm2022/koobiq-components-code-block.mjs +54 -22
- package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
- package/fesm2022/koobiq-components-content-panel.mjs +28 -28
- package/fesm2022/koobiq-components-core.mjs +313 -257
- package/fesm2022/koobiq-components-core.mjs.map +1 -1
- package/fesm2022/koobiq-components-datepicker.mjs +40 -64
- package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-divider.mjs +7 -7
- package/fesm2022/koobiq-components-dl.mjs +13 -13
- package/fesm2022/koobiq-components-dropdown.mjs +48 -23
- package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
- package/fesm2022/koobiq-components-dynamic-translation.mjs +13 -13
- package/fesm2022/koobiq-components-ellipsis-center.mjs +8 -9
- package/fesm2022/koobiq-components-ellipsis-center.mjs.map +1 -1
- package/fesm2022/koobiq-components-empty-state.mjs +19 -19
- package/fesm2022/koobiq-components-file-upload.mjs +39 -39
- package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
- package/fesm2022/koobiq-components-filter-bar.mjs +118 -106
- package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-form-field.mjs +77 -65
- package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
- package/fesm2022/koobiq-components-icon.mjs +32 -28
- package/fesm2022/koobiq-components-icon.mjs.map +1 -1
- package/fesm2022/koobiq-components-inline-edit.mjs +115 -65
- package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
- package/fesm2022/koobiq-components-input.mjs +28 -26
- package/fesm2022/koobiq-components-input.mjs.map +1 -1
- package/fesm2022/koobiq-components-link.mjs +23 -17
- package/fesm2022/koobiq-components-link.mjs.map +1 -1
- package/fesm2022/koobiq-components-list.mjs +19 -19
- package/fesm2022/koobiq-components-loader-overlay.mjs +28 -19
- package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
- package/fesm2022/koobiq-components-markdown.mjs +54 -22
- package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
- package/fesm2022/koobiq-components-modal.mjs +96 -63
- package/fesm2022/koobiq-components-modal.mjs.map +1 -1
- package/fesm2022/koobiq-components-navbar-ic.mjs +34 -34
- package/fesm2022/koobiq-components-navbar.mjs +53 -46
- package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
- package/fesm2022/koobiq-components-notification-center.mjs +16 -16
- package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
- package/fesm2022/koobiq-components-overflow-items.mjs +29 -17
- package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
- package/fesm2022/koobiq-components-popover.mjs +52 -23
- package/fesm2022/koobiq-components-popover.mjs.map +1 -1
- package/fesm2022/koobiq-components-progress-bar.mjs +13 -13
- package/fesm2022/koobiq-components-progress-spinner.mjs +14 -14
- package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
- package/fesm2022/koobiq-components-radio.mjs +10 -10
- package/fesm2022/koobiq-components-resizer.mjs +10 -10
- package/fesm2022/koobiq-components-risk-level.mjs +7 -7
- package/fesm2022/koobiq-components-scrollbar.mjs +12 -12
- package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
- package/fesm2022/koobiq-components-search-expandable.mjs +17 -8
- package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
- package/fesm2022/koobiq-components-select.mjs +342 -58
- package/fesm2022/koobiq-components-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-sidebar.mjs +13 -13
- package/fesm2022/koobiq-components-sidepanel.mjs +50 -41
- package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
- package/fesm2022/koobiq-components-skeleton.mjs +62 -13
- package/fesm2022/koobiq-components-skeleton.mjs.map +1 -1
- package/fesm2022/koobiq-components-split-button.mjs +9 -9
- package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
- package/fesm2022/koobiq-components-splitter.mjs +16 -16
- package/fesm2022/koobiq-components-table.mjs +10 -10
- package/fesm2022/koobiq-components-tabs.mjs +54 -54
- package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
- package/fesm2022/koobiq-components-tags.mjs +44 -47
- package/fesm2022/koobiq-components-tags.mjs.map +1 -1
- package/fesm2022/koobiq-components-textarea.mjs +10 -9
- package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
- package/fesm2022/koobiq-components-time-range.mjs +25 -25
- package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
- package/fesm2022/koobiq-components-timepicker.mjs +10 -10
- package/fesm2022/koobiq-components-timezone.mjs +26 -26
- package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
- package/fesm2022/koobiq-components-title.mjs +8 -9
- package/fesm2022/koobiq-components-title.mjs.map +1 -1
- package/fesm2022/koobiq-components-toast.mjs +16 -16
- package/fesm2022/koobiq-components-toggle.mjs +12 -9
- package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
- package/fesm2022/koobiq-components-tooltip.mjs +95 -52
- package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
- package/fesm2022/koobiq-components-top-bar.mjs +15 -15
- package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree-select.mjs +15 -12
- package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree.mjs +64 -52
- package/fesm2022/koobiq-components-tree.mjs.map +1 -1
- package/fesm2022/koobiq-components-username.mjs +28 -28
- package/fesm2022/koobiq-components-username.mjs.map +1 -1
- package/filter-bar/filter-search.d.ts +10 -1
- package/filter-bar/pipes/pipe-date.scss +5 -16
- package/form-field/form-field.d.ts +25 -1
- package/form-field/form-field.scss +26 -2
- package/icon/icon-button.component.d.ts +3 -0
- package/icon/icon-button.scss +4 -0
- package/inline-edit/inline-edit-tokens.scss +3 -3
- package/inline-edit/inline-edit.d.ts +31 -11
- package/inline-edit/inline-edit.scss +28 -30
- package/input/input-password.d.ts +1 -0
- package/input/input.d.ts +1 -0
- package/link/_link-theme.scss +18 -8
- package/link/link-tokens.scss +9 -6
- package/link/link.component.d.ts +9 -5
- package/loader-overlay/_loader-overlay-theme.scss +12 -0
- package/loader-overlay/loader-overlay-tokens.scss +1 -0
- package/loader-overlay/loader-overlay.component.d.ts +7 -1
- package/markdown/_markdown-theme.scss +3 -31
- package/markdown/markdown-tokens.scss +0 -11
- package/markdown/markdown.component.d.ts +12 -7
- package/markdown/markdown.scss +0 -11
- package/modal/modal-ref.class.d.ts +1 -0
- package/modal/modal.component.d.ts +14 -8
- package/modal/modal.scss +1 -0
- package/modal/modal.type.d.ts +5 -0
- package/navbar/navbar-item.component.d.ts +3 -1
- package/navbar/navbar.scss +3 -0
- package/overflow-items/overflow-items.d.ts +8 -2
- package/package.json +4 -5
- package/popover/popover.component.d.ts +15 -2
- package/prebuilt-themes/dark-theme.css +1 -1
- package/prebuilt-themes/light-theme.css +1 -1
- package/prebuilt-themes/theme.css +1 -1
- package/progress-spinner/progress-spinner.scss +1 -0
- package/schematics/ng-add/index.js +4 -6
- package/scrollbar/scrollbar-tokens.scss +7 -7
- package/search-expandable/search-expandable.d.ts +6 -2
- package/select/public-api.d.ts +1 -0
- package/select/select-common.d.ts +30 -0
- package/select/select.component.d.ts +193 -29
- package/select/select.module.d.ts +3 -2
- package/sidepanel/_sidepanel-theme.scss +1 -7
- package/sidepanel/sidepanel-config.d.ts +10 -2
- package/sidepanel/sidepanel.service.d.ts +0 -1
- package/skeleton/skeleton.d.ts +12 -3
- package/skeleton/skeleton.scss +22 -7
- package/split-button/_split-button-theme.scss +2 -1
- package/tabs/_tabs-common.scss +2 -1
- package/tags/tag-input.d.ts +4 -3
- package/tags/tag-list.component.d.ts +1 -0
- package/tags/tag-tokens.scss +4 -4
- package/textarea/textarea.component.d.ts +1 -0
- package/title/title.directive.d.ts +0 -1
- package/toggle/toggle.component.d.ts +4 -3
- package/tooltip/tooltip-tokens.scss +4 -4
- package/tooltip/tooltip.component.d.ts +22 -2
- package/top-bar/top-bar.scss +3 -0
- package/tree/_tree-theme.scss +0 -19
- package/tree/tree-option.component.d.ts +9 -3
- package/tree/tree-option.scss +9 -5
- package/tree/tree-selection.component.d.ts +2 -0
- package/tree-select/tree-select.component.d.ts +1 -0
- package/accordion/accordion-item.directive.d.ts +0 -72
- package/accordion/accordion-root.directive.d.ts +0 -64
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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 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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"}
|
|
1
|
+
{"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 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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"}
|