@acorex/cdk 21.0.2-next.34 → 21.0.2-next.35

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.
Files changed (74) hide show
  1. package/{types/acorex-cdk-common.d.ts → common/index.d.ts} +7 -9
  2. package/{types/acorex-cdk-drawer.d.ts → drawer/index.d.ts} +1 -1
  3. package/fesm2022/acorex-cdk-accordion.mjs +38 -38
  4. package/fesm2022/acorex-cdk-accordion.mjs.map +1 -1
  5. package/fesm2022/acorex-cdk-carousel.mjs +4 -4
  6. package/fesm2022/acorex-cdk-carousel.mjs.map +1 -1
  7. package/fesm2022/acorex-cdk-clipboard.mjs +8 -8
  8. package/fesm2022/acorex-cdk-clipboard.mjs.map +1 -1
  9. package/fesm2022/acorex-cdk-common.mjs +116 -171
  10. package/fesm2022/acorex-cdk-common.mjs.map +1 -1
  11. package/fesm2022/acorex-cdk-dom.mjs +4 -4
  12. package/fesm2022/acorex-cdk-dom.mjs.map +1 -1
  13. package/fesm2022/acorex-cdk-double-click.mjs +6 -6
  14. package/fesm2022/acorex-cdk-double-click.mjs.map +1 -1
  15. package/fesm2022/acorex-cdk-drag-drop.mjs +71 -71
  16. package/fesm2022/acorex-cdk-drag-drop.mjs.map +1 -1
  17. package/fesm2022/acorex-cdk-drawer.mjs +28 -28
  18. package/fesm2022/acorex-cdk-drawer.mjs.map +1 -1
  19. package/fesm2022/acorex-cdk-focus-trap.mjs +6 -6
  20. package/fesm2022/acorex-cdk-focus-trap.mjs.map +1 -1
  21. package/fesm2022/acorex-cdk-full-screen.mjs +5 -5
  22. package/fesm2022/acorex-cdk-full-screen.mjs.map +1 -1
  23. package/fesm2022/acorex-cdk-input-mask.mjs +14 -20
  24. package/fesm2022/acorex-cdk-input-mask.mjs.map +1 -1
  25. package/fesm2022/acorex-cdk-list-navigation.mjs +19 -19
  26. package/fesm2022/acorex-cdk-list-navigation.mjs.map +1 -1
  27. package/fesm2022/acorex-cdk-outline.mjs +68 -79
  28. package/fesm2022/acorex-cdk-outline.mjs.map +1 -1
  29. package/fesm2022/acorex-cdk-overlay.mjs +3 -16
  30. package/fesm2022/acorex-cdk-overlay.mjs.map +1 -1
  31. package/fesm2022/acorex-cdk-pan-view.mjs +22 -22
  32. package/fesm2022/acorex-cdk-pan-view.mjs.map +1 -1
  33. package/fesm2022/acorex-cdk-qrcode.mjs.map +1 -1
  34. package/fesm2022/acorex-cdk-resizable.mjs +12 -12
  35. package/fesm2022/acorex-cdk-resizable.mjs.map +1 -1
  36. package/fesm2022/acorex-cdk-selection.mjs +23 -23
  37. package/fesm2022/acorex-cdk-selection.mjs.map +1 -1
  38. package/fesm2022/acorex-cdk-sliding-item.mjs +11 -11
  39. package/fesm2022/acorex-cdk-sliding-item.mjs.map +1 -1
  40. package/fesm2022/acorex-cdk-sticky.mjs +3 -3
  41. package/fesm2022/acorex-cdk-sticky.mjs.map +1 -1
  42. package/fesm2022/acorex-cdk-uploader.mjs +28 -28
  43. package/fesm2022/acorex-cdk-uploader.mjs.map +1 -1
  44. package/fesm2022/acorex-cdk-virtual-scroll.mjs +18 -18
  45. package/fesm2022/acorex-cdk-virtual-scroll.mjs.map +1 -1
  46. package/fesm2022/acorex-cdk-wysiwyg.mjs +1 -1
  47. package/fesm2022/acorex-cdk-wysiwyg.mjs.map +1 -1
  48. package/fesm2022/acorex-cdk-z-index.mjs +4 -4
  49. package/fesm2022/acorex-cdk-z-index.mjs.map +1 -1
  50. package/fesm2022/acorex-cdk.mjs.map +1 -1
  51. package/{types/acorex-cdk-focus-trap.d.ts → focus-trap/index.d.ts} +1 -1
  52. package/{types/acorex-cdk-input-mask.d.ts → input-mask/index.d.ts} +0 -1
  53. package/{types/acorex-cdk-outline.d.ts → outline/index.d.ts} +0 -1
  54. package/{types/acorex-cdk-overlay.d.ts → overlay/index.d.ts} +0 -1
  55. package/package.json +31 -32
  56. /package/{types/acorex-cdk-accordion.d.ts → accordion/index.d.ts} +0 -0
  57. /package/{types/acorex-cdk-carousel.d.ts → carousel/index.d.ts} +0 -0
  58. /package/{types/acorex-cdk-clipboard.d.ts → clipboard/index.d.ts} +0 -0
  59. /package/{types/acorex-cdk-dom.d.ts → dom/index.d.ts} +0 -0
  60. /package/{types/acorex-cdk-double-click.d.ts → double-click/index.d.ts} +0 -0
  61. /package/{types/acorex-cdk-drag-drop.d.ts → drag-drop/index.d.ts} +0 -0
  62. /package/{types/acorex-cdk-full-screen.d.ts → full-screen/index.d.ts} +0 -0
  63. /package/{types/acorex-cdk.d.ts → index.d.ts} +0 -0
  64. /package/{types/acorex-cdk-list-navigation.d.ts → list-navigation/index.d.ts} +0 -0
  65. /package/{types/acorex-cdk-pan-view.d.ts → pan-view/index.d.ts} +0 -0
  66. /package/{types/acorex-cdk-qrcode.d.ts → qrcode/index.d.ts} +0 -0
  67. /package/{types/acorex-cdk-resizable.d.ts → resizable/index.d.ts} +0 -0
  68. /package/{types/acorex-cdk-selection.d.ts → selection/index.d.ts} +0 -0
  69. /package/{types/acorex-cdk-sliding-item.d.ts → sliding-item/index.d.ts} +0 -0
  70. /package/{types/acorex-cdk-sticky.d.ts → sticky/index.d.ts} +0 -0
  71. /package/{types/acorex-cdk-uploader.d.ts → uploader/index.d.ts} +0 -0
  72. /package/{types/acorex-cdk-virtual-scroll.d.ts → virtual-scroll/index.d.ts} +0 -0
  73. /package/{types/acorex-cdk-wysiwyg.d.ts → wysiwyg/index.d.ts} +0 -0
  74. /package/{types/acorex-cdk-z-index.d.ts → z-index/index.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-cdk-uploader.mjs","sources":["../../../../packages/cdk/uploader/src/lib/uploader-zone-host.ts","../../../../packages/cdk/uploader/src/lib/uploader.models.ts","../../../../packages/cdk/uploader/src/lib/uploader.service.ts","../../../../packages/cdk/uploader/src/lib/uploader-zone.directive.ts","../../../../packages/cdk/uploader/src/lib/uploader-browse-handle.directive.ts","../../../../packages/cdk/uploader/src/acorex-cdk-uploader.ts"],"sourcesContent":["import type { AXUploaderZoneDirective } from './uploader-zone.directive';\n\n/** DOM marker so browse handles can find a zone across content projection. */\nexport const AX_UPLOADER_ZONE_HOST = Symbol('AX_UPLOADER_ZONE_HOST');\n\nexport type AXUploaderZoneHostElement = HTMLElement & {\n [AX_UPLOADER_ZONE_HOST]?: AXUploaderZoneDirective;\n};\n\nexport function bindUploaderZoneHost(element: HTMLElement, zone: AXUploaderZoneDirective): void {\n (element as AXUploaderZoneHostElement)[AX_UPLOADER_ZONE_HOST] = zone;\n}\n\nexport function unbindUploaderZoneHost(element: HTMLElement): void {\n delete (element as AXUploaderZoneHostElement)[AX_UPLOADER_ZONE_HOST];\n}\n\n/** Walk ancestors to resolve the zone (works with projected browse handles). */\nexport function findUploaderZoneFromDom(start: HTMLElement): AXUploaderZoneDirective | undefined {\n let el: HTMLElement | null = start;\n while (el) {\n const zone = (el as AXUploaderZoneHostElement)[AX_UPLOADER_ZONE_HOST];\n if (zone) {\n return zone;\n }\n el = el.parentElement;\n }\n return undefined;\n}\n","import { AXEvent } from '@acorex/cdk/common';\nimport type { AXValidationRuleResult } from '@acorex/core/validation';\nimport { computed, signal } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\nexport interface AXUploaderChooseFilesResult {\n accepted: File[];\n rejected: { file: File; errors: AXValidationRuleResult[] }[];\n}\n\nexport interface AXUploaderFileChangeEvent {\n event: Event;\n files: File[];\n rejected?: { file: File; errors: AXValidationRuleResult[] }[];\n}\n\nexport type AXUploadStatus = 'new' | 'inprogress' | 'completed' | 'failed' | 'canceled';\n\nexport interface AXUploaderChangedEvent extends AXEvent {\n requests: AXUploadRequest[];\n}\n\nexport interface AXUploaderFileStartEvent extends AXEvent {\n uploadedFile: AXUploadRequest;\n}\nexport interface AXUploaderFileCompleteEvent extends AXEvent {\n uploadedFile: AXUploadRequest;\n}\n\nexport interface AXUploaderFilesCompleteEvent extends AXEvent {\n uploadedFiles: AXUploadRequest[];\n data?: any;\n}\n\nexport interface AXUploaderFileCancelEvent extends AXEvent {\n uploadedFile: AXUploadRequest;\n}\n\nexport class AXUploadRequest {\n get name(): string {\n return this.file.name;\n }\n\n get ext(): string {\n const parts = this.name.split('.');\n if (parts.length > 1) {\n return parts[parts.length - 1];\n } else {\n // No extension found\n return '';\n }\n }\n\n get size(): number {\n return this.file.size;\n }\n\n get file(): File {\n return this.uploadFile;\n }\n\n private readonly _progress = signal(0);\n progress = computed(() => this._progress());\n\n private readonly _estimateTime = signal(0);\n estimateTime = computed(() => this._estimateTime());\n\n private readonly _status = signal<AXUploadStatus>('new');\n status = computed(() => this._status());\n\n private readonly _message = signal<string | null>(null);\n message = computed(() => this._message());\n\n private readonly _isDetermined = signal<boolean>(false);\n isDetermined = computed(() => this._isDetermined());\n\n private startTime: number;\n private bytesTransferred = 0;\n\n public metaData: any;\n\n public onCancel = new Subject<void>();\n public onStart = new Subject<void>();\n public onFailed = new Subject<void>();\n public onComplete = new BehaviorSubject<void>(null);\n\n constructor(private uploadFile: File) {}\n\n private estimateTimeRemaining(bytesTransferred: number): number | null {\n const now = Date.now();\n const elapsed = now - this.startTime; // Time in milliseconds\n\n if (isNaN(elapsed) || elapsed === 0) {\n return null; // Avoid division by zero\n }\n\n const speed = (bytesTransferred || 1) / elapsed; // Bytes per millisecond\n const remainingBytes = this.size - bytesTransferred;\n const estimatedTime = Math.ceil(remainingBytes / speed); // Time in milliseconds\n return estimatedTime; // Return the estimated time in milliseconds\n }\n\n public setTransferredBytes(value: number) {\n this.bytesTransferred = value;\n if (value > 0 && !this._isDetermined() && (this.status() == 'new' || this.status() == 'inprogress')) {\n this._isDetermined.set(true);\n }\n this.updateEstimateTime();\n }\n\n private updateEstimateTime() {\n this._estimateTime.set(this.estimateTimeRemaining(this.bytesTransferred));\n const progress = Math.floor((this.bytesTransferred / this.size) * 100);\n this._progress.set(progress);\n }\n\n public async upload(): Promise<void> {\n this.startTime = Date.now();\n this._progress.set(0);\n this._status.set('inprogress');\n this.onStart.next();\n }\n\n public cancel(): void {\n this._status.set('canceled');\n this.bytesTransferred = 0;\n this._estimateTime.set(0);\n this._progress.set(0);\n this.onCancel.next();\n }\n\n public redo(): void {\n // this.startTime = Date.now();\n this._progress.set(0);\n this._status.set('inprogress');\n this._message.set(null);\n this.onStart.next();\n }\n\n public error(message: string): void {\n this._status.set('failed');\n this.bytesTransferred = 0;\n this._estimateTime.set(0);\n this._progress.set(0);\n this._message.set(message);\n this.onFailed.next();\n }\n\n public finish(data?: any): void {\n this._status.set('completed');\n this.bytesTransferred = this.size;\n this._estimateTime.set(0);\n this._progress.set(100);\n this.onComplete.next(data);\n }\n}\n","import { AXEvent } from '@acorex/cdk/common';\nimport { AXFileService } from '@acorex/core/file';\nimport type { AXValidationRuleResult } from '@acorex/core/validation';\nimport { Injectable, inject } from '@angular/core';\nimport { sumBy } from 'lodash-es';\nimport { BehaviorSubject, Subject, map } from 'rxjs';\nimport {\n AXUploadRequest,\n AXUploaderFileCancelEvent,\n AXUploaderFileCompleteEvent,\n AXUploaderFileStartEvent,\n AXUploaderFilesCompleteEvent,\n type AXUploaderChooseFilesResult,\n} from './uploader.models';\n\n/** Reference to stored file/media (url and/or mediaId). */\nexport interface AXUploadReference {\n url?: string;\n mediaId?: string;\n mimeType?: string;\n size?: number;\n expiresAt?: number;\n metadata?: Record<string, unknown>;\n}\n\nexport interface AXFileUploadOptions {\n source: File | Blob;\n fileName?: string;\n mimeType?: string;\n metadata?: Record<string, unknown>;\n onProgress?: (percent: number) => void;\n signal?: AbortSignal;\n}\n\nexport interface AXUploadResult {\n url: string;\n thumbnailUrl?: string;\n mediaId?: string;\n size: number;\n mimeType: string;\n metadata?: Record<string, unknown>;\n}\n\n/** Emitted when {@link AXUploaderService.upload} is called. */\nexport interface AXUploaderUploadEvent extends AXEvent {\n options: AXFileUploadOptions;\n resolve: (result: AXUploadResult) => void;\n reject: (reason: unknown) => void;\n}\n\n/** Emitted when {@link AXUploaderService.resolveUrl} is called. */\nexport interface AXUploaderResolveUrlEvent extends AXEvent {\n reference: AXUploadReference;\n signal?: AbortSignal;\n resolve: (url: string) => void;\n reject: (reason: unknown) => void;\n}\n\n/** Emitted when {@link AXUploaderService.deleteMedia} is called. */\nexport interface AXUploaderDeleteMediaEvent extends AXEvent {\n reference: AXUploadReference;\n resolve: () => void;\n reject: (reason: unknown) => void;\n}\n\nexport interface AXUploaderBrowseOptions {\n multiple?: boolean;\n accept?: string;\n /** Logical file type name(s) registered in {@link AXFileService}. */\n fileType?: string | string[];\n}\n\nexport interface AXUploaderAddOptions {\n fileType?: string | string[];\n}\n\n/**\n * File upload queue and validation via {@link AXFileService}.\n * Storage is implemented by subscribing to upload/resolve/delete events.\n * @category Services\n */\n@Injectable({ providedIn: 'root' })\nexport class AXUploaderService {\n private readonly fileService = inject(AXFileService);\n\n private readonly _files$ = new BehaviorSubject<AXUploadRequest[]>([]);\n\n public readonly files = this._files$.asObservable();\n\n public readonly onFileUploadStart = new Subject<AXUploaderFileStartEvent>();\n\n public readonly onFileUploadComplete = new Subject<AXUploaderFileCompleteEvent>();\n\n public readonly onFilesUploadComplete = new Subject<AXUploaderFilesCompleteEvent>();\n\n public readonly onFileUploadCanceled = new Subject<AXUploaderFileCancelEvent>();\n\n /** Subscribe to perform uploads (e.g. HTTP, IndexedDB). */\n public readonly onUpload = new Subject<AXUploaderUploadEvent>();\n\n /** Subscribe to resolve a stored reference to a playback URL. */\n public readonly onResolveUrl = new Subject<AXUploaderResolveUrlEvent>();\n\n /** Subscribe to delete stored media. */\n public readonly onDeleteMedia = new Subject<AXUploaderDeleteMediaEvent>();\n\n public readonly totalEstimateTime = this._files$.pipe(\n map((files) => sumBy(files, (file) => (file.status() === 'inprogress' ? file.estimateTime() : 0))),\n );\n\n isAnyDetermined(): boolean {\n return this._files$.value.some((file) => file.isDetermined());\n }\n\n validateFiles(\n files: File[],\n fileType: string,\n ): Promise<{ accepted: File[]; rejected: { file: File; errors: AXValidationRuleResult[] }[] }> {\n return this.fileService.validateMany(files, fileType);\n }\n\n async getAcceptAttribute(fileType: string | string[]): Promise<string> {\n return this.fileService.getAcceptAttribute(fileType);\n }\n\n upload(options: AXFileUploadOptions): Promise<AXUploadResult> {\n return new Promise<AXUploadResult>((resolve, reject) => {\n if (!this.hasUploadHandler()) {\n reject(\n new Error(\n 'No upload handler subscribed to AXUploaderService.onUpload. Provide a service that handles upload events.',\n ),\n );\n return;\n }\n this.onUpload.next({\n component: this,\n options,\n resolve,\n reject,\n isUserInteraction: false,\n });\n });\n }\n\n resolveUrl(reference: AXUploadReference, signal?: AbortSignal): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n if (!this.hasResolveUrlHandler()) {\n reject(\n new Error(\n 'No handler subscribed to AXUploaderService.onResolveUrl. Provide a service that handles resolve events.',\n ),\n );\n return;\n }\n this.onResolveUrl.next({\n component: this,\n reference,\n signal,\n resolve,\n reject,\n isUserInteraction: false,\n });\n });\n }\n\n async resolvePlaybackUrl(reference: AXUploadReference, signal?: AbortSignal): Promise<string> {\n const direct = reference.url?.trim();\n if (direct && !reference.mediaId) {\n return direct;\n }\n if (direct && reference.mediaId) {\n try {\n return await this.resolveUrl(reference, signal);\n } catch {\n return direct;\n }\n }\n if (reference.mediaId) {\n return this.resolveUrl(reference, signal);\n }\n if (direct) {\n return direct;\n }\n throw new Error('Upload reference has no url or mediaId');\n }\n\n deleteMedia(reference: AXUploadReference): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (!this.hasDeleteMediaHandler()) {\n reject(\n new Error(\n 'No handler subscribed to AXUploaderService.onDeleteMedia. Provide a service that handles delete events.',\n ),\n );\n return;\n }\n this.onDeleteMedia.next({\n component: this,\n reference,\n resolve,\n reject,\n isUserInteraction: false,\n });\n });\n }\n\n private hasUploadHandler(): boolean {\n return this.onUpload.observers.length > 0;\n }\n\n private hasResolveUrlHandler(): boolean {\n return this.onResolveUrl.observers.length > 0;\n }\n\n private hasDeleteMediaHandler(): boolean {\n return this.onDeleteMedia.observers.length > 0;\n }\n\n async add(files: FileList | File[], options?: AXUploaderAddOptions): Promise<AXUploadRequest[]> {\n const list = Array.from(files).map((f) => new AXUploadRequest(f));\n await this.applyFileTypeValidation(list, options?.fileType);\n\n const newFiles = [...this._files$.value, ...list];\n this._files$.next(newFiles);\n void this.startUpload();\n return list;\n }\n\n /**\n * Opens the file dialog and returns selected files without enqueueing uploads.\n * With `fileType`, applies catalog validation; otherwise uses legacy accept-only selection.\n */\n async chooseFiles(options: AXUploaderBrowseOptions = {}): Promise<AXUploaderChooseFilesResult> {\n try {\n if (options.fileType) {\n const accept = options.accept ?? (await this.fileService.getAcceptAttribute(options.fileType));\n\n return this.fileService.chooseValidated({\n fileType: options.fileType,\n multiple: options.multiple ?? false,\n accept,\n });\n }\n\n const accepted = await this.fileService.choose({\n accept: options.accept,\n multiple: options.multiple ?? false,\n });\n\n return { accepted, rejected: [] };\n } catch (error) {\n console.error('File choose failed:', error);\n return { accepted: [], rejected: [] };\n }\n }\n\n async browse(options: AXUploaderBrowseOptions = { multiple: false }): Promise<AXUploadRequest[]> {\n const { accepted } = await this.chooseFiles(options);\n if (!accepted.length) {\n return [];\n }\n return this.add(accepted, { fileType: options.fileType });\n }\n\n async cancelAll(): Promise<void> {\n await Promise.all(this._files$.value.filter((c) => c.status() !== 'completed').map((c) => c.cancel()));\n }\n\n clearAll(): void {\n const remainingFiles = this._files$.value.filter((c) => c.status() === 'inprogress');\n this._files$.next(remainingFiles);\n }\n\n remove(item: AXUploadRequest): void {\n const updatedFiles = this._files$.value.filter((c) => c !== item);\n this._files$.next(updatedFiles);\n }\n\n private async startUpload(): Promise<void> {\n const newFiles = this._files$.value.filter((c) => c.status() === 'new');\n for (const file of newFiles) {\n await this.bindEvents(file);\n }\n }\n\n private async bindEvents(c: AXUploadRequest): Promise<void> {\n c.onStart.subscribe(() => {\n this.onFileUploadStart.next({\n component: this,\n uploadedFile: c,\n isUserInteraction: false,\n });\n });\n\n c.onComplete.subscribe((data) => {\n Object.assign(c, { metaData: data });\n this.onFileUploadComplete.next({\n component: this,\n uploadedFile: c,\n isUserInteraction: false,\n });\n\n const isAllDone = this._files$.value.every(\n (f) => f.status() === 'completed' || f.status() === 'canceled' || f.status() === 'failed',\n );\n\n if (isAllDone) {\n this.onFilesUploadComplete.next({\n component: this,\n uploadedFiles: this._files$.value,\n isUserInteraction: false,\n });\n }\n });\n\n c.onCancel.subscribe(() => {\n this.onFileUploadCanceled.next({\n component: this,\n uploadedFile: c,\n isUserInteraction: false,\n });\n });\n }\n\n private async applyFileTypeValidation(\n requests: AXUploadRequest[],\n fileType?: string | string[],\n ): Promise<AXUploadRequest[]> {\n if (!fileType) {\n return requests;\n }\n\n for (const request of requests) {\n const errors = await this.fileService.validate(request.file, fileType);\n if (errors.length > 0) {\n request.error(errors[0]?.message ?? 'Invalid file');\n }\n }\n\n return requests;\n }\n}\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectorRef,\n DOCUMENT,\n Directive,\n ElementRef,\n EmbeddedViewRef,\n OnDestroy,\n PLATFORM_ID,\n TemplateRef,\n ViewContainerRef,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport {\n AXUploaderChangedEvent,\n AXUploaderFileChangeEvent,\n AXUploaderFileCompleteEvent,\n AXUploaderFilesCompleteEvent,\n} from './uploader.models';\nimport { bindUploaderZoneHost, unbindUploaderZoneHost } from './uploader-zone-host';\nimport { AXUploaderService } from './uploader.service';\n\n/**\n * A directive that provides drag-and-drop and file upload functionality.\n * When applied to an element, it enables drag-and-drop file uploads and file browsing.\n * @category Directives\n */\n@Directive({\n selector: '[axUploaderZone]',\n providers: [AXUnsubscriber],\n host: {\n class: 'ax-drop-zone',\n },\n})\nexport class AXUploaderZoneDirective implements OnDestroy {\n /**\n * The element reference for the directive host.\n * @ignore\n */\n private elementRef = inject(ElementRef);\n\n /**\n * View container reference for rendering custom templates.\n * @ignore\n */\n private viewContainerRef = inject(ViewContainerRef);\n\n /**\n * Whether multiple files can be selected.\n * @defaultValue true\n */\n multiple = input(true);\n\n /**\n * File types that are accepted for upload.\n * @defaultValue null\n */\n accept = input<string | null>(null);\n\n /**\n * Logical file type name from {@link AXFileService} (e.g. `conversation-image`).\n * Required for browse handles and validated selection.\n */\n fileType = input<string | null>(null);\n\n /**\n * Custom template for the drag overlay. If provided, this will be used instead of the default overlay.\n */\n overlayTemplate = input<TemplateRef<unknown>>();\n\n /**\n * Whether browsing files by clicking on the container is disabled.\n * @defaultValue false\n */\n disableBrowse = input(false);\n\n /**\n * Whether drag and drop functionality is disabled.\n * @defaultValue false\n */\n disableDragDrop = input(false);\n\n /**\n * Change detector reference.\n * @ignore\n */\n private cdr = inject(ChangeDetectorRef);\n\n /**\n * Document reference.\n * @ignore\n */\n private document = inject(DOCUMENT);\n\n /**\n * Platform ID for browser detection.\n * @ignore\n */\n private platformID = inject(PLATFORM_ID);\n\n /**\n * Upload service instance.\n * @ignore\n */\n private uploadService = inject(AXUploaderService);\n\n /**\n * Unsubscriber service instance.\n * @ignore\n */\n private unsubscriber = inject(AXUnsubscriber);\n\n /**\n * Translation service instance.\n * @ignore\n */\n private translateService = inject(AXTranslationService);\n\n /**\n * The host element.\n * @ignore\n */\n private element: HTMLElement;\n\n /**\n * Embedded view reference for custom template.\n * @ignore\n */\n private templateViewRef: EmbeddedViewRef<unknown> | null = null;\n\n /**\n * Emitted when files are selected or dropped (like HTML file input).\n * Emits an event with files property containing the selected files.\n */\n fileChange = output<AXUploaderFileChangeEvent>();\n\n /**\n * Emitted when files are changed (added, removed, etc.).\n * @deprecated Use fileChange instead for simpler file input-like behavior\n */\n onChanged = output<AXUploaderChangedEvent>();\n\n /**\n * Emitted on drag enter event.\n */\n dragEnter = output<DragEvent>();\n\n /**\n * Emitted on drag leave event.\n */\n dragLeave = output<DragEvent>();\n\n /**\n * Emitted on drag over event.\n */\n dragOver = output<DragEvent>();\n\n /**\n * Emitted when a single file upload is completed.\n */\n onFileUploadComplete = output<AXUploaderFileCompleteEvent>();\n\n /**\n * Emitted when all files upload is completed.\n */\n onFilesUploadComplete = output<AXUploaderFilesCompleteEvent>();\n\n /**\n * CSS class for the overlay state.\n * @ignore\n */\n stateClass = 'ax-uploader-overlay-state';\n\n /**\n * The overlay element for drag and drop visual feedback.\n * @ignore\n */\n overlayElement: HTMLDivElement | null = null;\n\n /**\n * Flag to track if dragOver has been emitted for the current drag session.\n * @ignore\n */\n private dragOverEmitted = signal(false);\n\n /**\n * Counter to track drag enter/leave depth to prevent false dragleave events.\n * When moving from parent to child, dragleave fires even though we're still inside.\n * @ignore\n */\n private dragDepth = signal(0);\n\n /**\n * Animation end handler for cleanup.\n * @ignore\n */\n private animationEndHandler: ((e: AnimationEvent) => void) | null = null;\n\n /**\n * Initializes the directive with event listeners and service subscriptions.\n */\n constructor() {\n this.element = this.elementRef.nativeElement as HTMLElement;\n this.element.style.position = 'relative';\n bindUploaderZoneHost(this.element, this);\n\n //\n this.uploadService.onFileUploadComplete.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n this.onFileUploadComplete.emit(c);\n });\n\n this.uploadService.onFilesUploadComplete.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n this.onFilesUploadComplete.emit(c);\n });\n //\n setTimeout(() => {\n const browseHandlers = this.element.querySelectorAll('[data-ax-uploader-browse-handle=\"true\"]');\n if (browseHandlers.length <= 0 && !this.disableBrowse()) {\n this.element.addEventListener('click', this.browser.bind(this), true);\n }\n });\n\n if (!this.disableDragDrop()) {\n this.element.addEventListener('dragenter', this.handleDragEnter.bind(this), true);\n this.element.addEventListener('dragover', this.handleDragOver.bind(this), true);\n this.element.addEventListener('drop', this.handleOnDrop.bind(this), true);\n this.element.addEventListener('dragleave', (e) => this.removeZone(e as DragEvent), true);\n }\n }\n\n /**\n * Cleans up event listeners when the directive is destroyed.\n */\n ngOnDestroy(): void {\n unbindUploaderZoneHost(this.element);\n this.element.removeEventListener('click', this.browser.bind(this));\n\n this.element.removeEventListener('dragenter', this.handleDragEnter.bind(this));\n this.element.removeEventListener('drop', this.handleOnDrop.bind(this));\n this.element.removeEventListener('dragover', this.handleDragOver.bind(this));\n this.element.removeEventListener('dragleave', this.removeZone.bind(this));\n }\n\n /**\n * Handles drag enter events to show the upload overlay.\n * @private\n */\n private async handleDragEnter(event: DragEvent) {\n if (this.disableDragDrop()) return;\n this.dragOverEmitted.set(false); // Reset flag when entering\n this.dragDepth.update((depth) => depth + 1); // Increment depth counter\n\n // Only create overlay on first enter (when depth is 1)\n if (this.dragDepth() === 1) {\n // Cancel any pending exit animation\n this.cancelExitAnimation();\n await this.createZone();\n this.dragEnter.emit(event);\n }\n\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n\n /**\n * Handles drop events to process dropped files.\n * @private\n */\n private async handleOnDrop(event: DragEvent) {\n if (this.disableDragDrop()) return;\n event.preventDefault();\n event.stopImmediatePropagation();\n\n // Reset drag depth on drop\n this.dragDepth.set(0);\n\n if (event.dataTransfer?.files && event.dataTransfer.files.length > 0) {\n let files = Array.from(event.dataTransfer.files);\n let rejected: AXUploaderFileChangeEvent['rejected'];\n const catalog = this.fileType();\n\n if (catalog) {\n const result = await this.uploadService.validateFiles(files, catalog);\n files = result.accepted;\n rejected = result.rejected;\n }\n\n this.fileChange.emit({ event, files, rejected });\n\n if (!this.disableBrowse()) {\n const requests = await this.uploadService.add(files, { fileType: catalog ?? undefined });\n if (requests.length > 0) {\n this.onChanged.emit({\n component: this,\n requests,\n isUserInteraction: true,\n });\n }\n }\n }\n\n this.removeZone();\n this.cdr.detectChanges();\n }\n\n /**\n * Handles drag over events to allow dropping.\n * @private\n */\n private handleDragOver(event: DragEvent) {\n if (this.disableDragDrop()) return;\n // Only emit dragOver once per drag session to avoid spam\n if (!this.dragOverEmitted()) {\n this.dragOverEmitted.set(true);\n this.dragOver.emit(event);\n }\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n\n /**\n * Creates the visual overlay for drag and drop feedback.\n * @private\n */\n private async createZone() {\n if (isPlatformBrowser(this.platformID)) {\n // Check if overlay already exists (might be exiting)\n let existingOverlay = this.document.getElementById('ax-uploader-overlay-state') || this.overlayElement;\n\n // Verify the overlay is actually in the DOM (not removed after animation)\n if (existingOverlay && existingOverlay.parentNode === this.element) {\n // Remove exiting class to cancel exit animation and show overlay again\n existingOverlay.classList.remove('ax-uploader-overlay-exiting');\n // Clean up any pending animation handler\n if (this.animationEndHandler) {\n existingOverlay.removeEventListener('animationend', this.animationEndHandler);\n this.animationEndHandler = null;\n }\n // Reset overlayElement reference if it was cleared\n if (!this.overlayElement && existingOverlay) {\n this.overlayElement = existingOverlay as HTMLDivElement;\n }\n return;\n } else if (existingOverlay && existingOverlay.parentNode !== this.element) {\n // Overlay exists but is not in the DOM, clear the reference\n this.overlayElement = null;\n existingOverlay = null;\n }\n\n // Check if custom template is provided\n const template = this.overlayTemplate();\n if (template) {\n // Create container for template\n this.overlayElement = this.document.createElement('div');\n this.overlayElement.classList.add('ax-uploader-overlay-state', '-ax-z-1');\n this.overlayElement.id = 'ax-uploader-overlay-state';\n\n // Create embedded view from template (will be inserted at directive anchor)\n this.viewContainerRef.clear();\n this.templateViewRef = this.viewContainerRef.createEmbeddedView(template);\n this.templateViewRef.detectChanges();\n\n // Get root nodes and move them to overlay element\n const rootNodes = this.templateViewRef.rootNodes;\n for (const node of rootNodes) {\n // Remove from current location if it has a parent\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n this.overlayElement.appendChild(node);\n }\n\n // Detach the view since we've moved the nodes\n this.templateViewRef.detach();\n\n this.element.appendChild(this.overlayElement);\n this.cdr.detectChanges();\n return;\n }\n\n // Use default overlay\n this.overlayElement = this.document.createElement('div');\n this.overlayElement.classList.add('ax-uploader-overlay-state', '-ax-z-1');\n this.overlayElement.id = 'ax-uploader-overlay-state';\n\n const icon: HTMLSpanElement = this.document.createElement('span');\n icon.classList.add('ax-icon', 'ax-icon-upload');\n\n const text = this.document.createElement('span');\n text.innerText = await this.translateService.translateAsync('@acorex:uploader.zone.text');\n\n this.overlayElement.appendChild(icon);\n this.overlayElement.appendChild(text);\n\n this.element.appendChild(this.overlayElement);\n }\n }\n\n /**\n * Cancels any pending exit animation and cleans up handlers.\n * @private\n */\n private cancelExitAnimation() {\n if (isPlatformBrowser(this.platformID)) {\n const overlay = this.document.getElementById('ax-uploader-overlay-state') || this.overlayElement;\n\n if (overlay && this.animationEndHandler) {\n // Remove exiting class to cancel animation\n overlay.classList.remove('ax-uploader-overlay-exiting');\n // Clean up the handler\n overlay.removeEventListener('animationend', this.animationEndHandler);\n this.animationEndHandler = null;\n }\n }\n }\n\n /**\n * Removes the visual overlay for drag and drop feedback.\n * @private\n */\n private removeZone(event?: DragEvent) {\n if (this.disableDragDrop()) return;\n this.dragDepth.update((depth) => Math.max(0, depth - 1)); // Decrement depth counter, ensure non-negative\n\n // Only remove overlay when we've truly left the drop zone (depth reaches 0)\n if (this.dragDepth() <= 0) {\n this.dragDepth.set(0); // Ensure it's exactly 0\n this.dragOverEmitted.set(false); // Reset flag when leaving\n\n if (event) {\n this.dragLeave.emit(event);\n }\n\n if (isPlatformBrowser(this.platformID)) {\n const overlay = this.document.getElementById('ax-uploader-overlay-state') || this.overlayElement;\n\n if (overlay) {\n // Clean up any existing handler first\n if (this.animationEndHandler) {\n overlay.removeEventListener('animationend', this.animationEndHandler);\n }\n\n // Add exiting class to trigger CSS animation\n overlay.classList.add('ax-uploader-overlay-exiting');\n\n // Wait for CSS animation to complete\n this.animationEndHandler = (e: AnimationEvent) => {\n if (e.target === overlay && e.animationName === 'fadeOutScale') {\n overlay.removeEventListener('animationend', this.animationEndHandler);\n this.animationEndHandler = null;\n\n if (overlay.parentNode === this.element) {\n this.element.removeChild(overlay);\n }\n if (this.overlayElement && this.overlayElement.parentNode) {\n this.overlayElement.remove();\n }\n\n // Clear the overlay element reference\n this.overlayElement = null;\n\n // Remove custom template view if it exists\n if (this.templateViewRef) {\n this.viewContainerRef.clear();\n this.templateViewRef = null;\n }\n }\n };\n\n overlay.addEventListener('animationend', this.animationEndHandler);\n } else {\n // If overlay doesn't exist, just clean up template view\n if (this.templateViewRef) {\n this.viewContainerRef.clear();\n this.templateViewRef = null;\n }\n }\n }\n }\n }\n\n /**\n * Opens the file browser dialog and processes selected files.\n * @returns Promise that resolves when files are processed\n */\n public async browser(): Promise<void> {\n const catalog = this.fileType();\n let selected: File[] = [];\n let rejected: AXUploaderFileChangeEvent['rejected'];\n\n if (catalog) {\n const accept = this.accept() ?? (await this.uploadService.getAcceptAttribute(catalog));\n const result = await this.uploadService.chooseFiles({\n fileType: catalog,\n multiple: this.multiple(),\n accept,\n });\n selected = result.accepted;\n rejected = result.rejected;\n } else if (!this.disableBrowse()) {\n const requests = await this.uploadService.browse({\n accept: this.accept() ?? undefined,\n multiple: this.multiple(),\n });\n selected = requests.map((r) => r.file);\n } else {\n console.warn(\n 'AXUploaderZone.browser: fileType is required when disableBrowse is enabled (use axUploaderBrowseHandle).',\n );\n return;\n }\n\n if (selected.length === 0 && !(rejected?.length ?? 0)) {\n return;\n }\n\n const syntheticEvent = new Event('change');\n const target = Object.create(EventTarget.prototype) as EventTarget & { files: File[] };\n target.files = selected;\n Object.defineProperty(syntheticEvent, 'target', { value: target, writable: false });\n\n this.fileChange.emit({\n event: syntheticEvent,\n files: selected,\n rejected,\n });\n\n if (this.disableBrowse()) {\n return;\n }\n\n const requests = catalog\n ? await this.uploadService.add(selected, { fileType: catalog })\n : await this.uploadService.add(selected);\n\n if (requests.length > 0) {\n this.onChanged.emit({\n component: this,\n requests,\n isUserInteraction: true,\n });\n }\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Directive, ElementRef, OnDestroy, OnInit, PLATFORM_ID, inject } from '@angular/core';\nimport { findUploaderZoneFromDom } from './uploader-zone-host';\nimport { AXUploaderZoneDirective } from './uploader-zone.directive';\n\n/**\n * Triggers the nearest {@link AXUploaderZoneDirective} file dialog on click.\n * Resolves the zone via DI when possible, otherwise walks the DOM (supports content projection).\n * @category Directives\n */\n@Directive({ selector: '[axUploaderBrowseHandle]' })\nexport class AXUploaderBrowseDirective implements OnInit, OnDestroy {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly platformID = inject(PLATFORM_ID);\n /** When browse + zone share the same host element. */\n private readonly zoneFromInjector = inject(AXUploaderZoneDirective, { optional: true, self: true });\n\n private readonly onClick = (): void => {\n void this.handleClick();\n };\n\n ngOnInit(): void {\n if (!isPlatformBrowser(this.platformID)) {\n return;\n }\n const element = this.elementRef.nativeElement;\n element.addEventListener('click', this.onClick);\n if (element.dataset) {\n element.dataset['axUploaderBrowseHandle'] = 'true';\n } else {\n element.setAttribute('data-ax-uploader-browse-handle', 'true');\n }\n }\n\n ngOnDestroy(): void {\n if (isPlatformBrowser(this.platformID)) {\n this.elementRef.nativeElement.removeEventListener('click', this.onClick);\n }\n }\n\n private resolveZone(): AXUploaderZoneDirective | undefined {\n return (\n this.zoneFromInjector ??\n findUploaderZoneFromDom(this.elementRef.nativeElement) ??\n undefined\n );\n }\n\n private async handleClick(): Promise<void> {\n const zone = this.resolveZone();\n if (!zone) {\n console.warn(\n '[axUploaderBrowseHandle] No axUploaderZone found. Place axUploaderBrowseHandle inside an axUploaderZone.',\n );\n return;\n }\n await zone.browser();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-cdk-uploader.mjs","sources":["../tmp-esm2022/uploader/lib/uploader-zone-host.js","../tmp-esm2022/uploader/lib/uploader.models.js","../tmp-esm2022/uploader/lib/uploader.service.js","../tmp-esm2022/uploader/lib/uploader-zone.directive.js","../tmp-esm2022/uploader/lib/uploader-browse-handle.directive.js","../tmp-esm2022/uploader/acorex-cdk-uploader.js"],"sourcesContent":["/** DOM marker so browse handles can find a zone across content projection. */\nexport const AX_UPLOADER_ZONE_HOST = Symbol('AX_UPLOADER_ZONE_HOST');\nexport function bindUploaderZoneHost(element, zone) {\n element[AX_UPLOADER_ZONE_HOST] = zone;\n}\nexport function unbindUploaderZoneHost(element) {\n delete element[AX_UPLOADER_ZONE_HOST];\n}\n/** Walk ancestors to resolve the zone (works with projected browse handles). */\nexport function findUploaderZoneFromDom(start) {\n let el = start;\n while (el) {\n const zone = el[AX_UPLOADER_ZONE_HOST];\n if (zone) {\n return zone;\n }\n el = el.parentElement;\n }\n return undefined;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXItem9uZS1ob3N0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL3VwbG9hZGVyL3NyYy9saWIvdXBsb2FkZXItem9uZS1ob3N0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLDhFQUE4RTtBQUM5RSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQU1yRSxNQUFNLFVBQVUsb0JBQW9CLENBQUMsT0FBb0IsRUFBRSxJQUE2QjtJQUNyRixPQUFxQyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsT0FBb0I7SUFDekQsT0FBUSxPQUFxQyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFDdkUsQ0FBQztBQUVELGdGQUFnRjtBQUNoRixNQUFNLFVBQVUsdUJBQXVCLENBQUMsS0FBa0I7SUFDeEQsSUFBSSxFQUFFLEdBQXVCLEtBQUssQ0FBQztJQUNuQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLEdBQUksRUFBZ0MsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3RFLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQztJQUN4QixDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQVhVcGxvYWRlclpvbmVEaXJlY3RpdmUgfSBmcm9tICcuL3VwbG9hZGVyLXpvbmUuZGlyZWN0aXZlJztcblxuLyoqIERPTSBtYXJrZXIgc28gYnJvd3NlIGhhbmRsZXMgY2FuIGZpbmQgYSB6b25lIGFjcm9zcyBjb250ZW50IHByb2plY3Rpb24uICovXG5leHBvcnQgY29uc3QgQVhfVVBMT0FERVJfWk9ORV9IT1NUID0gU3ltYm9sKCdBWF9VUExPQURFUl9aT05FX0hPU1QnKTtcblxuZXhwb3J0IHR5cGUgQVhVcGxvYWRlclpvbmVIb3N0RWxlbWVudCA9IEhUTUxFbGVtZW50ICYge1xuICBbQVhfVVBMT0FERVJfWk9ORV9IT1NUXT86IEFYVXBsb2FkZXJab25lRGlyZWN0aXZlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRVcGxvYWRlclpvbmVIb3N0KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCB6b25lOiBBWFVwbG9hZGVyWm9uZURpcmVjdGl2ZSk6IHZvaWQge1xuICAoZWxlbWVudCBhcyBBWFVwbG9hZGVyWm9uZUhvc3RFbGVtZW50KVtBWF9VUExPQURFUl9aT05FX0hPU1RdID0gem9uZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuYmluZFVwbG9hZGVyWm9uZUhvc3QoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgZGVsZXRlIChlbGVtZW50IGFzIEFYVXBsb2FkZXJab25lSG9zdEVsZW1lbnQpW0FYX1VQTE9BREVSX1pPTkVfSE9TVF07XG59XG5cbi8qKiBXYWxrIGFuY2VzdG9ycyB0byByZXNvbHZlIHRoZSB6b25lICh3b3JrcyB3aXRoIHByb2plY3RlZCBicm93c2UgaGFuZGxlcykuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFVwbG9hZGVyWm9uZUZyb21Eb20oc3RhcnQ6IEhUTUxFbGVtZW50KTogQVhVcGxvYWRlclpvbmVEaXJlY3RpdmUgfCB1bmRlZmluZWQge1xuICBsZXQgZWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IHN0YXJ0O1xuICB3aGlsZSAoZWwpIHtcbiAgICBjb25zdCB6b25lID0gKGVsIGFzIEFYVXBsb2FkZXJab25lSG9zdEVsZW1lbnQpW0FYX1VQTE9BREVSX1pPTkVfSE9TVF07XG4gICAgaWYgKHpvbmUpIHtcbiAgICAgIHJldHVybiB6b25lO1xuICAgIH1cbiAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==","import { computed, signal } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nexport class AXUploadRequest {\n get name() {\n return this.file.name;\n }\n get ext() {\n const parts = this.name.split('.');\n if (parts.length > 1) {\n return parts[parts.length - 1];\n }\n else {\n // No extension found\n return '';\n }\n }\n get size() {\n return this.file.size;\n }\n get file() {\n return this.uploadFile;\n }\n constructor(uploadFile) {\n this.uploadFile = uploadFile;\n this._progress = signal(0, ...(ngDevMode ? [{ debugName: \"_progress\" }] : []));\n this.progress = computed(() => this._progress(), ...(ngDevMode ? [{ debugName: \"progress\" }] : []));\n this._estimateTime = signal(0, ...(ngDevMode ? [{ debugName: \"_estimateTime\" }] : []));\n this.estimateTime = computed(() => this._estimateTime(), ...(ngDevMode ? [{ debugName: \"estimateTime\" }] : []));\n this._status = signal('new', ...(ngDevMode ? [{ debugName: \"_status\" }] : []));\n this.status = computed(() => this._status(), ...(ngDevMode ? [{ debugName: \"status\" }] : []));\n this._message = signal(null, ...(ngDevMode ? [{ debugName: \"_message\" }] : []));\n this.message = computed(() => this._message(), ...(ngDevMode ? [{ debugName: \"message\" }] : []));\n this._isDetermined = signal(false, ...(ngDevMode ? [{ debugName: \"_isDetermined\" }] : []));\n this.isDetermined = computed(() => this._isDetermined(), ...(ngDevMode ? [{ debugName: \"isDetermined\" }] : []));\n this.bytesTransferred = 0;\n this.onCancel = new Subject();\n this.onStart = new Subject();\n this.onFailed = new Subject();\n this.onComplete = new BehaviorSubject(null);\n }\n estimateTimeRemaining(bytesTransferred) {\n const now = Date.now();\n const elapsed = now - this.startTime; // Time in milliseconds\n if (isNaN(elapsed) || elapsed === 0) {\n return null; // Avoid division by zero\n }\n const speed = (bytesTransferred || 1) / elapsed; // Bytes per millisecond\n const remainingBytes = this.size - bytesTransferred;\n const estimatedTime = Math.ceil(remainingBytes / speed); // Time in milliseconds\n return estimatedTime; // Return the estimated time in milliseconds\n }\n setTransferredBytes(value) {\n this.bytesTransferred = value;\n if (value > 0 && !this._isDetermined() && (this.status() == 'new' || this.status() == 'inprogress')) {\n this._isDetermined.set(true);\n }\n this.updateEstimateTime();\n }\n updateEstimateTime() {\n this._estimateTime.set(this.estimateTimeRemaining(this.bytesTransferred));\n const progress = Math.floor((this.bytesTransferred / this.size) * 100);\n this._progress.set(progress);\n }\n async upload() {\n this.startTime = Date.now();\n this._progress.set(0);\n this._status.set('inprogress');\n this.onStart.next();\n }\n cancel() {\n this._status.set('canceled');\n this.bytesTransferred = 0;\n this._estimateTime.set(0);\n this._progress.set(0);\n this.onCancel.next();\n }\n redo() {\n // this.startTime = Date.now();\n this._progress.set(0);\n this._status.set('inprogress');\n this._message.set(null);\n this.onStart.next();\n }\n error(message) {\n this._status.set('failed');\n this.bytesTransferred = 0;\n this._estimateTime.set(0);\n this._progress.set(0);\n this._message.set(message);\n this.onFailed.next();\n }\n finish(data) {\n this._status.set('completed');\n this.bytesTransferred = this.size;\n this._estimateTime.set(0);\n this._progress.set(100);\n this.onComplete.next(data);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXIubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL3VwbG9hZGVyL3NyYy9saWIvdXBsb2FkZXIubW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBbUNoRCxNQUFNLE9BQU8sZUFBZTtJQUMxQixJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDTCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckIsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqQyxDQUFDO2FBQU0sQ0FBQztZQUNOLHFCQUFxQjtZQUNyQixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUEyQkQsWUFBb0IsVUFBZ0I7UUFBaEIsZUFBVSxHQUFWLFVBQVUsQ0FBTTtRQXpCbkIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLHFEQUFDLENBQUM7UUFDdkMsYUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLG9EQUFDLENBQUM7UUFFM0Isa0JBQWEsR0FBRyxNQUFNLENBQUMsQ0FBQyx5REFBQyxDQUFDO1FBQzNDLGlCQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsd0RBQUMsQ0FBQztRQUVuQyxZQUFPLEdBQUcsTUFBTSxDQUFpQixLQUFLLG1EQUFDLENBQUM7UUFDekQsV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGtEQUFDLENBQUM7UUFFdkIsYUFBUSxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxvREFBQyxDQUFDO1FBQ3hELFlBQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxtREFBQyxDQUFDO1FBRXpCLGtCQUFhLEdBQUcsTUFBTSxDQUFVLEtBQUsseURBQUMsQ0FBQztRQUN4RCxpQkFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLHdEQUFDLENBQUM7UUFHNUMscUJBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBSXRCLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQy9CLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQzlCLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQy9CLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBTyxJQUFJLENBQUMsQ0FBQztJQUViLENBQUM7SUFFaEMscUJBQXFCLENBQUMsZ0JBQXdCO1FBQ3BELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixNQUFNLE9BQU8sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLHVCQUF1QjtRQUU3RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUMsQ0FBQyx5QkFBeUI7UUFDeEMsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsd0JBQXdCO1FBQ3pFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7UUFDcEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyx1QkFBdUI7UUFDaEYsT0FBTyxhQUFhLENBQUMsQ0FBQyw0Q0FBNEM7SUFDcEUsQ0FBQztJQUVNLG1CQUFtQixDQUFDLEtBQWE7UUFDdEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3BHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTTtRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxJQUFJO1FBQ1QsK0JBQStCO1FBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFlO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU0sTUFBTSxDQUFDLElBQVU7UUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgdHlwZSB7IEFYVmFsaWRhdGlvblJ1bGVSZXN1bHQgfSBmcm9tICdAYWNvcmV4L2NvcmUvdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBjb21wdXRlZCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGludGVyZmFjZSBBWFVwbG9hZGVyQ2hvb3NlRmlsZXNSZXN1bHQge1xuICBhY2NlcHRlZDogRmlsZVtdO1xuICByZWplY3RlZDogeyBmaWxlOiBGaWxlOyBlcnJvcnM6IEFYVmFsaWRhdGlvblJ1bGVSZXN1bHRbXSB9W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhVcGxvYWRlckZpbGVDaGFuZ2VFdmVudCB7XG4gIGV2ZW50OiBFdmVudDtcbiAgZmlsZXM6IEZpbGVbXTtcbiAgcmVqZWN0ZWQ/OiB7IGZpbGU6IEZpbGU7IGVycm9yczogQVhWYWxpZGF0aW9uUnVsZVJlc3VsdFtdIH1bXTtcbn1cblxuZXhwb3J0IHR5cGUgQVhVcGxvYWRTdGF0dXMgPSAnbmV3JyB8ICdpbnByb2dyZXNzJyB8ICdjb21wbGV0ZWQnIHwgJ2ZhaWxlZCcgfCAnY2FuY2VsZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYVXBsb2FkZXJDaGFuZ2VkRXZlbnQgZXh0ZW5kcyBBWEV2ZW50IHtcbiAgcmVxdWVzdHM6IEFYVXBsb2FkUmVxdWVzdFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYVXBsb2FkZXJGaWxlU3RhcnRFdmVudCBleHRlbmRzIEFYRXZlbnQge1xuICB1cGxvYWRlZEZpbGU6IEFYVXBsb2FkUmVxdWVzdDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQVhVcGxvYWRlckZpbGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQVhFdmVudCB7XG4gIHVwbG9hZGVkRmlsZTogQVhVcGxvYWRSZXF1ZXN0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYVXBsb2FkZXJGaWxlc0NvbXBsZXRlRXZlbnQgZXh0ZW5kcyBBWEV2ZW50IHtcbiAgdXBsb2FkZWRGaWxlczogQVhVcGxvYWRSZXF1ZXN0W107XG4gIGRhdGE/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhVcGxvYWRlckZpbGVDYW5jZWxFdmVudCBleHRlbmRzIEFYRXZlbnQge1xuICB1cGxvYWRlZEZpbGU6IEFYVXBsb2FkUmVxdWVzdDtcbn1cblxuZXhwb3J0IGNsYXNzIEFYVXBsb2FkUmVxdWVzdCB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZS5uYW1lO1xuICB9XG5cbiAgZ2V0IGV4dCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhcnRzID0gdGhpcy5uYW1lLnNwbGl0KCcuJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gZXh0ZW5zaW9uIGZvdW5kXG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5maWxlLnNpemU7XG4gIH1cblxuICBnZXQgZmlsZSgpOiBGaWxlIHtcbiAgICByZXR1cm4gdGhpcy51cGxvYWRGaWxlO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcHJvZ3Jlc3MgPSBzaWduYWwoMCk7XG4gIHByb2dyZXNzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fcHJvZ3Jlc3MoKSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVUaW1lID0gc2lnbmFsKDApO1xuICBlc3RpbWF0ZVRpbWUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9lc3RpbWF0ZVRpbWUoKSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdHVzID0gc2lnbmFsPEFYVXBsb2FkU3RhdHVzPignbmV3Jyk7XG4gIHN0YXR1cyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX3N0YXR1cygpKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9tZXNzYWdlID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBtZXNzYWdlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fbWVzc2FnZSgpKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9pc0RldGVybWluZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBpc0RldGVybWluZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9pc0RldGVybWluZWQoKSk7XG5cbiAgcHJpdmF0ZSBzdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBieXRlc1RyYW5zZmVycmVkID0gMDtcblxuICBwdWJsaWMgbWV0YURhdGE6IGFueTtcblxuICBwdWJsaWMgb25DYW5jZWwgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwdWJsaWMgb25TdGFydCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHB1YmxpYyBvbkZhaWxlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHB1YmxpYyBvbkNvbXBsZXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkPihudWxsKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHVwbG9hZEZpbGU6IEZpbGUpIHt9XG5cbiAgcHJpdmF0ZSBlc3RpbWF0ZVRpbWVSZW1haW5pbmcoYnl0ZXNUcmFuc2ZlcnJlZDogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBlbGFwc2VkID0gbm93IC0gdGhpcy5zdGFydFRpbWU7IC8vIFRpbWUgaW4gbWlsbGlzZWNvbmRzXG5cbiAgICBpZiAoaXNOYU4oZWxhcHNlZCkgfHwgZWxhcHNlZCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7IC8vIEF2b2lkIGRpdmlzaW9uIGJ5IHplcm9cbiAgICB9XG5cbiAgICBjb25zdCBzcGVlZCA9IChieXRlc1RyYW5zZmVycmVkIHx8IDEpIC8gZWxhcHNlZDsgLy8gQnl0ZXMgcGVyIG1pbGxpc2Vjb25kXG4gICAgY29uc3QgcmVtYWluaW5nQnl0ZXMgPSB0aGlzLnNpemUgLSBieXRlc1RyYW5zZmVycmVkO1xuICAgIGNvbnN0IGVzdGltYXRlZFRpbWUgPSBNYXRoLmNlaWwocmVtYWluaW5nQnl0ZXMgLyBzcGVlZCk7IC8vIFRpbWUgaW4gbWlsbGlzZWNvbmRzXG4gICAgcmV0dXJuIGVzdGltYXRlZFRpbWU7IC8vIFJldHVybiB0aGUgZXN0aW1hdGVkIHRpbWUgaW4gbWlsbGlzZWNvbmRzXG4gIH1cblxuICBwdWJsaWMgc2V0VHJhbnNmZXJyZWRCeXRlcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5ieXRlc1RyYW5zZmVycmVkID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlID4gMCAmJiAhdGhpcy5faXNEZXRlcm1pbmVkKCkgJiYgKHRoaXMuc3RhdHVzKCkgPT0gJ25ldycgfHwgdGhpcy5zdGF0dXMoKSA9PSAnaW5wcm9ncmVzcycpKSB7XG4gICAgICB0aGlzLl9pc0RldGVybWluZWQuc2V0KHRydWUpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUVzdGltYXRlVGltZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVFc3RpbWF0ZVRpbWUoKSB7XG4gICAgdGhpcy5fZXN0aW1hdGVUaW1lLnNldCh0aGlzLmVzdGltYXRlVGltZVJlbWFpbmluZyh0aGlzLmJ5dGVzVHJhbnNmZXJyZWQpKTtcbiAgICBjb25zdCBwcm9ncmVzcyA9IE1hdGguZmxvb3IoKHRoaXMuYnl0ZXNUcmFuc2ZlcnJlZCAvIHRoaXMuc2l6ZSkgKiAxMDApO1xuICAgIHRoaXMuX3Byb2dyZXNzLnNldChwcm9ncmVzcyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBsb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9wcm9ncmVzcy5zZXQoMCk7XG4gICAgdGhpcy5fc3RhdHVzLnNldCgnaW5wcm9ncmVzcycpO1xuICAgIHRoaXMub25TdGFydC5uZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXR1cy5zZXQoJ2NhbmNlbGVkJyk7XG4gICAgdGhpcy5ieXRlc1RyYW5zZmVycmVkID0gMDtcbiAgICB0aGlzLl9lc3RpbWF0ZVRpbWUuc2V0KDApO1xuICAgIHRoaXMuX3Byb2dyZXNzLnNldCgwKTtcbiAgICB0aGlzLm9uQ2FuY2VsLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyByZWRvKCk6IHZvaWQge1xuICAgIC8vIHRoaXMuc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9wcm9ncmVzcy5zZXQoMCk7XG4gICAgdGhpcy5fc3RhdHVzLnNldCgnaW5wcm9ncmVzcycpO1xuICAgIHRoaXMuX21lc3NhZ2Uuc2V0KG51bGwpO1xuICAgIHRoaXMub25TdGFydC5uZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgZXJyb3IobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdHVzLnNldCgnZmFpbGVkJyk7XG4gICAgdGhpcy5ieXRlc1RyYW5zZmVycmVkID0gMDtcbiAgICB0aGlzLl9lc3RpbWF0ZVRpbWUuc2V0KDApO1xuICAgIHRoaXMuX3Byb2dyZXNzLnNldCgwKTtcbiAgICB0aGlzLl9tZXNzYWdlLnNldChtZXNzYWdlKTtcbiAgICB0aGlzLm9uRmFpbGVkLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5pc2goZGF0YT86IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXR1cy5zZXQoJ2NvbXBsZXRlZCcpO1xuICAgIHRoaXMuYnl0ZXNUcmFuc2ZlcnJlZCA9IHRoaXMuc2l6ZTtcbiAgICB0aGlzLl9lc3RpbWF0ZVRpbWUuc2V0KDApO1xuICAgIHRoaXMuX3Byb2dyZXNzLnNldCgxMDApO1xuICAgIHRoaXMub25Db21wbGV0ZS5uZXh0KGRhdGEpO1xuICB9XG59XG4iXX0=","import { AXFileService } from '@acorex/core/file';\nimport { Injectable, inject } from '@angular/core';\nimport { sumBy } from 'lodash-es';\nimport { BehaviorSubject, Subject, map } from 'rxjs';\nimport { AXUploadRequest, } from './uploader.models';\nimport * as i0 from \"@angular/core\";\n/**\n * File upload queue and validation via {@link AXFileService}.\n * Storage is implemented by subscribing to upload/resolve/delete events.\n * @category Services\n */\nexport class AXUploaderService {\n constructor() {\n this.fileService = inject(AXFileService);\n this._files$ = new BehaviorSubject([]);\n this.files = this._files$.asObservable();\n this.onFileUploadStart = new Subject();\n this.onFileUploadComplete = new Subject();\n this.onFilesUploadComplete = new Subject();\n this.onFileUploadCanceled = new Subject();\n /** Subscribe to perform uploads (e.g. HTTP, IndexedDB). */\n this.onUpload = new Subject();\n /** Subscribe to resolve a stored reference to a playback URL. */\n this.onResolveUrl = new Subject();\n /** Subscribe to delete stored media. */\n this.onDeleteMedia = new Subject();\n this.totalEstimateTime = this._files$.pipe(map((files) => sumBy(files, (file) => (file.status() === 'inprogress' ? file.estimateTime() : 0))));\n }\n isAnyDetermined() {\n return this._files$.value.some((file) => file.isDetermined());\n }\n validateFiles(files, fileType) {\n return this.fileService.validateMany(files, fileType);\n }\n async getAcceptAttribute(fileType) {\n return this.fileService.getAcceptAttribute(fileType);\n }\n upload(options) {\n return new Promise((resolve, reject) => {\n if (!this.hasUploadHandler()) {\n reject(new Error('No upload handler subscribed to AXUploaderService.onUpload. Provide a service that handles upload events.'));\n return;\n }\n this.onUpload.next({\n component: this,\n options,\n resolve,\n reject,\n isUserInteraction: false,\n });\n });\n }\n resolveUrl(reference, signal) {\n return new Promise((resolve, reject) => {\n if (!this.hasResolveUrlHandler()) {\n reject(new Error('No handler subscribed to AXUploaderService.onResolveUrl. Provide a service that handles resolve events.'));\n return;\n }\n this.onResolveUrl.next({\n component: this,\n reference,\n signal,\n resolve,\n reject,\n isUserInteraction: false,\n });\n });\n }\n async resolvePlaybackUrl(reference, signal) {\n const direct = reference.url?.trim();\n if (direct && !reference.mediaId) {\n return direct;\n }\n if (direct && reference.mediaId) {\n try {\n return await this.resolveUrl(reference, signal);\n }\n catch {\n return direct;\n }\n }\n if (reference.mediaId) {\n return this.resolveUrl(reference, signal);\n }\n if (direct) {\n return direct;\n }\n throw new Error('Upload reference has no url or mediaId');\n }\n deleteMedia(reference) {\n return new Promise((resolve, reject) => {\n if (!this.hasDeleteMediaHandler()) {\n reject(new Error('No handler subscribed to AXUploaderService.onDeleteMedia. Provide a service that handles delete events.'));\n return;\n }\n this.onDeleteMedia.next({\n component: this,\n reference,\n resolve,\n reject,\n isUserInteraction: false,\n });\n });\n }\n hasUploadHandler() {\n return this.onUpload.observers.length > 0;\n }\n hasResolveUrlHandler() {\n return this.onResolveUrl.observers.length > 0;\n }\n hasDeleteMediaHandler() {\n return this.onDeleteMedia.observers.length > 0;\n }\n async add(files, options) {\n const list = Array.from(files).map((f) => new AXUploadRequest(f));\n await this.applyFileTypeValidation(list, options?.fileType);\n const newFiles = [...this._files$.value, ...list];\n this._files$.next(newFiles);\n void this.startUpload();\n return list;\n }\n /**\n * Opens the file dialog and returns selected files without enqueueing uploads.\n * With `fileType`, applies catalog validation; otherwise uses legacy accept-only selection.\n */\n async chooseFiles(options = {}) {\n try {\n if (options.fileType) {\n const accept = options.accept ?? (await this.fileService.getAcceptAttribute(options.fileType));\n return this.fileService.chooseValidated({\n fileType: options.fileType,\n multiple: options.multiple ?? false,\n accept,\n });\n }\n const accepted = await this.fileService.choose({\n accept: options.accept,\n multiple: options.multiple ?? false,\n });\n return { accepted, rejected: [] };\n }\n catch (error) {\n console.error('File choose failed:', error);\n return { accepted: [], rejected: [] };\n }\n }\n async browse(options = { multiple: false }) {\n const { accepted } = await this.chooseFiles(options);\n if (!accepted.length) {\n return [];\n }\n return this.add(accepted, { fileType: options.fileType });\n }\n async cancelAll() {\n await Promise.all(this._files$.value.filter((c) => c.status() !== 'completed').map((c) => c.cancel()));\n }\n clearAll() {\n const remainingFiles = this._files$.value.filter((c) => c.status() === 'inprogress');\n this._files$.next(remainingFiles);\n }\n remove(item) {\n const updatedFiles = this._files$.value.filter((c) => c !== item);\n this._files$.next(updatedFiles);\n }\n async startUpload() {\n const newFiles = this._files$.value.filter((c) => c.status() === 'new');\n for (const file of newFiles) {\n await this.bindEvents(file);\n }\n }\n async bindEvents(c) {\n c.onStart.subscribe(() => {\n this.onFileUploadStart.next({\n component: this,\n uploadedFile: c,\n isUserInteraction: false,\n });\n });\n c.onComplete.subscribe((data) => {\n Object.assign(c, { metaData: data });\n this.onFileUploadComplete.next({\n component: this,\n uploadedFile: c,\n isUserInteraction: false,\n });\n const isAllDone = this._files$.value.every((f) => f.status() === 'completed' || f.status() === 'canceled' || f.status() === 'failed');\n if (isAllDone) {\n this.onFilesUploadComplete.next({\n component: this,\n uploadedFiles: this._files$.value,\n isUserInteraction: false,\n });\n }\n });\n c.onCancel.subscribe(() => {\n this.onFileUploadCanceled.next({\n component: this,\n uploadedFile: c,\n isUserInteraction: false,\n });\n });\n }\n async applyFileTypeValidation(requests, fileType) {\n if (!fileType) {\n return requests;\n }\n for (const request of requests) {\n const errors = await this.fileService.validate(request.file, fileType);\n if (errors.length > 0) {\n request.error(errors[0]?.message ?? 'Invalid file');\n }\n }\n return requests;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXUploaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXUploaderService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXUploaderService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay91cGxvYWRlci9zcmMvbGliL3VwbG9hZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFDTCxlQUFlLEdBTWhCLE1BQU0sbUJBQW1CLENBQUM7O0FBK0QzQjs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLGlCQUFpQjtJQUQ5QjtRQUVtQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVwQyxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBRXRELFVBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBDLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUE0QixDQUFDO1FBRTVELHlCQUFvQixHQUFHLElBQUksT0FBTyxFQUErQixDQUFDO1FBRWxFLDBCQUFxQixHQUFHLElBQUksT0FBTyxFQUFnQyxDQUFDO1FBRXBFLHlCQUFvQixHQUFHLElBQUksT0FBTyxFQUE2QixDQUFDO1FBRWhGLDJEQUEyRDtRQUMzQyxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQXlCLENBQUM7UUFFaEUsaUVBQWlFO1FBQ2pELGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQTZCLENBQUM7UUFFeEUsd0NBQXdDO1FBQ3hCLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQThCLENBQUM7UUFFMUQs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QUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7OEdBblFVLGlCQUFpQjtrSEFBakIsaUJBQWlCLGNBREosTUFBTTs7MkZBQ25CLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRmlsZVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvZmlsZSc7XG5pbXBvcnQgdHlwZSB7IEFYVmFsaWRhdGlvblJ1bGVSZXN1bHQgfSBmcm9tICdAYWNvcmV4L2NvcmUvdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHN1bUJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBBWFVwbG9hZFJlcXVlc3QsXG4gIEFYVXBsb2FkZXJGaWxlQ2FuY2VsRXZlbnQsXG4gIEFYVXBsb2FkZXJGaWxlQ29tcGxldGVFdmVudCxcbiAgQVhVcGxvYWRlckZpbGVTdGFydEV2ZW50LFxuICBBWFVwbG9hZGVyRmlsZXNDb21wbGV0ZUV2ZW50LFxuICB0eXBlIEFYVXBsb2FkZXJDaG9vc2VGaWxlc1Jlc3VsdCxcbn0gZnJvbSAnLi91cGxvYWRlci5tb2RlbHMnO1xuXG4vKiogUmVmZXJlbmNlIHRvIHN0b3JlZCBmaWxlL21lZGlhICh1cmwgYW5kL29yIG1lZGlhSWQpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFVwbG9hZFJlZmVyZW5jZSB7XG4gIHVybD86IHN0cmluZztcbiAgbWVkaWFJZD86IHN0cmluZztcbiAgbWltZVR5cGU/OiBzdHJpbmc7XG4gIHNpemU/OiBudW1iZXI7XG4gIGV4cGlyZXNBdD86IG51bWJlcjtcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWEZpbGVVcGxvYWRPcHRpb25zIHtcbiAgc291cmNlOiBGaWxlIHwgQmxvYjtcbiAgZmlsZU5hbWU/OiBzdHJpbmc7XG4gIG1pbWVUeXBlPzogc3RyaW5nO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBvblByb2dyZXNzPzogKHBlcmNlbnQ6IG51bWJlcikgPT4gdm9pZDtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhVcGxvYWRSZXN1bHQge1xuICB1cmw6IHN0cmluZztcbiAgdGh1bWJuYWlsVXJsPzogc3RyaW5nO1xuICBtZWRpYUlkPzogc3RyaW5nO1xuICBzaXplOiBudW1iZXI7XG4gIG1pbWVUeXBlOiBzdHJpbmc7XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKiBFbWl0dGVkIHdoZW4ge0BsaW5rIEFYVXBsb2FkZXJTZXJ2aWNlLnVwbG9hZH0gaXMgY2FsbGVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFVwbG9hZGVyVXBsb2FkRXZlbnQgZXh0ZW5kcyBBWEV2ZW50IHtcbiAgb3B0aW9uczogQVhGaWxlVXBsb2FkT3B0aW9ucztcbiAgcmVzb2x2ZTogKHJlc3VsdDogQVhVcGxvYWRSZXN1bHQpID0+IHZvaWQ7XG4gIHJlamVjdDogKHJlYXNvbjogdW5rbm93bikgPT4gdm9pZDtcbn1cblxuLyoqIEVtaXR0ZWQgd2hlbiB7QGxpbmsgQVhVcGxvYWRlclNlcnZpY2UucmVzb2x2ZVVybH0gaXMgY2FsbGVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFVwbG9hZGVyUmVzb2x2ZVVybEV2ZW50IGV4dGVuZHMgQVhFdmVudCB7XG4gIHJlZmVyZW5jZTogQVhVcGxvYWRSZWZlcmVuY2U7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICByZXNvbHZlOiAodXJsOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHJlamVjdDogKHJlYXNvbjogdW5rbm93bikgPT4gdm9pZDtcbn1cblxuLyoqIEVtaXR0ZWQgd2hlbiB7QGxpbmsgQVhVcGxvYWRlclNlcnZpY2UuZGVsZXRlTWVkaWF9IGlzIGNhbGxlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhVcGxvYWRlckRlbGV0ZU1lZGlhRXZlbnQgZXh0ZW5kcyBBWEV2ZW50IHtcbiAgcmVmZXJlbmNlOiBBWFVwbG9hZFJlZmVyZW5jZTtcbiAgcmVzb2x2ZTogKCkgPT4gdm9pZDtcbiAgcmVqZWN0OiAocmVhc29uOiB1bmtub3duKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYVXBsb2FkZXJCcm93c2VPcHRpb25zIHtcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBhY2NlcHQ/OiBzdHJpbmc7XG4gIC8qKiBMb2dpY2FsIGZpbGUgdHlwZSBuYW1lKHMpIHJlZ2lzdGVyZWQgaW4ge0BsaW5rIEFYRmlsZVNlcnZpY2V9LiAqL1xuICBmaWxlVHlwZT86IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYVXBsb2FkZXJBZGRPcHRpb25zIHtcbiAgZmlsZVR5cGU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBGaWxlIHVwbG9hZCBxdWV1ZSBhbmQgdmFsaWRhdGlvbiB2aWEge0BsaW5rIEFYRmlsZVNlcnZpY2V9LlxuICogU3RvcmFnZSBpcyBpbXBsZW1lbnRlZCBieSBzdWJzY3JpYmluZyB0byB1cGxvYWQvcmVzb2x2ZS9kZWxldGUgZXZlbnRzLlxuICogQGNhdGVnb3J5IFNlcnZpY2VzXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQVhVcGxvYWRlclNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGZpbGVTZXJ2aWNlID0gaW5qZWN0KEFYRmlsZVNlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QVhVcGxvYWRSZXF1ZXN0W10+KFtdKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZmlsZXMgPSB0aGlzLl9maWxlcyQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IG9uRmlsZVVwbG9hZFN0YXJ0ID0gbmV3IFN1YmplY3Q8QVhVcGxvYWRlckZpbGVTdGFydEV2ZW50PigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBvbkZpbGVVcGxvYWRDb21wbGV0ZSA9IG5ldyBTdWJqZWN0PEFYVXBsb2FkZXJGaWxlQ29tcGxldGVFdmVudD4oKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgb25GaWxlc1VwbG9hZENvbXBsZXRlID0gbmV3IFN1YmplY3Q8QVhVcGxvYWRlckZpbGVzQ29tcGxldGVFdmVudD4oKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgb25GaWxlVXBsb2FkQ2FuY2VsZWQgPSBuZXcgU3ViamVjdDxBWFVwbG9hZGVyRmlsZUNhbmNlbEV2ZW50PigpO1xuXG4gIC8qKiBTdWJzY3JpYmUgdG8gcGVyZm9ybSB1cGxvYWRzIChlLmcuIEhUVFAsIEluZGV4ZWREQikuICovXG4gIHB1YmxpYyByZWFkb25seSBvblVwbG9hZCA9IG5ldyBTdWJqZWN0PEFYVXBsb2FkZXJVcGxvYWRFdmVudD4oKTtcblxuICAvKiogU3Vic2NyaWJlIHRvIHJlc29sdmUgYSBzdG9yZWQgcmVmZXJlbmNlIHRvIGEgcGxheWJhY2sgVVJMLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb25SZXNvbHZlVXJsID0gbmV3IFN1YmplY3Q8QVhVcGxvYWRlclJlc29sdmVVcmxFdmVudD4oKTtcblxuICAvKiogU3Vic2NyaWJlIHRvIGRlbGV0ZSBzdG9yZWQgbWVkaWEuICovXG4gIHB1YmxpYyByZWFkb25seSBvbkRlbGV0ZU1lZGlhID0gbmV3IFN1YmplY3Q8QVhVcGxvYWRlckRlbGV0ZU1lZGlhRXZlbnQ+KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHRvdGFsRXN0aW1hdGVUaW1lID0gdGhpcy5fZmlsZXMkLnBpcGUoXG4gICAgbWFwKChmaWxlcykgPT4gc3VtQnkoZmlsZXMsIChmaWxlKSA9PiAoZmlsZS5zdGF0dXMoKSA9PT0gJ2lucHJvZ3Jlc3MnID8gZmlsZS5lc3RpbWF0ZVRpbWUoKSA6IDApKSksXG4gICk7XG5cbiAgaXNBbnlEZXRlcm1pbmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9maWxlcyQudmFsdWUuc29tZSgoZmlsZSkgPT4gZmlsZS5pc0RldGVybWluZWQoKSk7XG4gIH1cblxuICB2YWxpZGF0ZUZpbGVzKFxuICAgIGZpbGVzOiBGaWxlW10sXG4gICAgZmlsZVR5cGU6IHN0cmluZyxcbiAgKTogUHJvbWlzZTx7IGFjY2VwdGVkOiBGaWxlW107IHJlamVjdGVkOiB7IGZpbGU6IEZpbGU7IGVycm9yczogQVhWYWxpZGF0aW9uUnVsZVJlc3VsdFtdIH1bXSB9PiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZVNlcnZpY2UudmFsaWRhdGVNYW55KGZpbGVzLCBmaWxlVHlwZSk7XG4gIH1cblxuICBhc3luYyBnZXRBY2NlcHRBdHRyaWJ1dGUoZmlsZVR5cGU6IHN0cmluZyB8IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5maWxlU2VydmljZS5nZXRBY2NlcHRBdHRyaWJ1dGUoZmlsZVR5cGUpO1xuICB9XG5cbiAgdXBsb2FkKG9wdGlvbnM6IEFYRmlsZVVwbG9hZE9wdGlvbnMpOiBQcm9taXNlPEFYVXBsb2FkUmVzdWx0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEFYVXBsb2FkUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaGFzVXBsb2FkSGFuZGxlcigpKSB7XG4gICAgICAgIHJlamVjdChcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnTm8gdXBsb2FkIGhhbmRsZXIgc3Vic2NyaWJlZCB0byBBWFVwbG9hZGVyU2VydmljZS5vblVwbG9hZC4gUHJvdmlkZSBhIHNlcnZpY2UgdGhhdCBoYW5kbGVzIHVwbG9hZCBldmVudHMuJyxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLm9uVXBsb2FkLm5leHQoe1xuICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHJlc29sdmUsXG4gICAgICAgIHJlamVjdCxcbiAgICAgICAgaXNVc2VySW50ZXJhY3Rpb246IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXNvbHZlVXJsKHJlZmVyZW5jZTogQVhVcGxvYWRSZWZlcmVuY2UsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaGFzUmVzb2x2ZVVybEhhbmRsZXIoKSkge1xuICAgICAgICByZWplY3QoXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ05vIGhhbmRsZXIgc3Vic2NyaWJlZCB0byBBWFVwbG9hZGVyU2VydmljZS5vblJlc29sdmVVcmwuIFByb3ZpZGUgYSBzZXJ2aWNlIHRoYXQgaGFuZGxlcyByZXNvbHZlIGV2ZW50cy4nLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMub25SZXNvbHZlVXJsLm5leHQoe1xuICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgICByZXNvbHZlLFxuICAgICAgICByZWplY3QsXG4gICAgICAgIGlzVXNlckludGVyYWN0aW9uOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVzb2x2ZVBsYXliYWNrVXJsKHJlZmVyZW5jZTogQVhVcGxvYWRSZWZlcmVuY2UsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBkaXJlY3QgPSByZWZlcmVuY2UudXJsPy50cmltKCk7XG4gICAgaWYgKGRpcmVjdCAmJiAhcmVmZXJlbmNlLm1lZGlhSWQpIHtcbiAgICAgIHJldHVybiBkaXJlY3Q7XG4gICAgfVxuICAgIGlmIChkaXJlY3QgJiYgcmVmZXJlbmNlLm1lZGlhSWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlc29sdmVVcmwocmVmZXJlbmNlLCBzaWduYWwpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBkaXJlY3Q7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZWZlcmVuY2UubWVkaWFJZCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVVybChyZWZlcmVuY2UsIHNpZ25hbCk7XG4gICAgfVxuICAgIGlmIChkaXJlY3QpIHtcbiAgICAgIHJldHVybiBkaXJlY3Q7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIHJlZmVyZW5jZSBoYXMgbm8gdXJsIG9yIG1lZGlhSWQnKTtcbiAgfVxuXG4gIGRlbGV0ZU1lZGlhKHJlZmVyZW5jZTogQVhVcGxvYWRSZWZlcmVuY2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmhhc0RlbGV0ZU1lZGlhSGFuZGxlcigpKSB7XG4gICAgICAgIHJlamVjdChcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnTm8gaGFuZGxlciBzdWJzY3JpYmVkIHRvIEFYVXBsb2FkZXJTZXJ2aWNlLm9uRGVsZXRlTWVkaWEuIFByb3ZpZGUgYSBzZXJ2aWNlIHRoYXQgaGFuZGxlcyBkZWxldGUgZXZlbnRzLicsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5vbkRlbGV0ZU1lZGlhLm5leHQoe1xuICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgcmVqZWN0LFxuICAgICAgICBpc1VzZXJJbnRlcmFjdGlvbjogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzVXBsb2FkSGFuZGxlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vblVwbG9hZC5vYnNlcnZlcnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgaGFzUmVzb2x2ZVVybEhhbmRsZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub25SZXNvbHZlVXJsLm9ic2VydmVycy5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNEZWxldGVNZWRpYUhhbmRsZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub25EZWxldGVNZWRpYS5vYnNlcnZlcnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGFzeW5jIGFkZChmaWxlczogRmlsZUxpc3QgfCBGaWxlW10sIG9wdGlvbnM/OiBBWFVwbG9hZGVyQWRkT3B0aW9ucyk6IFByb21pc2U8QVhVcGxvYWRSZXF1ZXN0W10+IHtcbiAgICBjb25zdCBsaXN0ID0gQXJyYXkuZnJvbShmaWxlcykubWFwKChmKSA9PiBuZXcgQVhVcGxvYWRSZXF1ZXN0KGYpKTtcbiAgICBhd2FpdCB0aGlzLmFwcGx5RmlsZVR5cGVWYWxpZGF0aW9uKGxpc3QsIG9wdGlvbnM/LmZpbGVUeXBlKTtcblxuICAgIGNvbnN0IG5ld0ZpbGVzID0gWy4uLnRoaXMuX2ZpbGVzJC52YWx1ZSwgLi4ubGlzdF07XG4gICAgdGhpcy5fZmlsZXMkLm5leHQobmV3RmlsZXMpO1xuICAgIHZvaWQgdGhpcy5zdGFydFVwbG9hZCgpO1xuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBmaWxlIGRpYWxvZyBhbmQgcmV0dXJucyBzZWxlY3RlZCBmaWxlcyB3aXRob3V0IGVucXVldWVpbmcgdXBsb2Fkcy5cbiAgICogV2l0aCBgZmlsZVR5cGVgLCBhcHBsaWVzIGNhdGFsb2cgdmFsaWRhdGlvbjsgb3RoZXJ3aXNlIHVzZXMgbGVnYWN5IGFjY2VwdC1vbmx5IHNlbGVjdGlvbi5cbiAgICovXG4gIGFzeW5jIGNob29zZUZpbGVzKG9wdGlvbnM6IEFYVXBsb2FkZXJCcm93c2VPcHRpb25zID0ge30pOiBQcm9taXNlPEFYVXBsb2FkZXJDaG9vc2VGaWxlc1Jlc3VsdD4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAob3B0aW9ucy5maWxlVHlwZSkge1xuICAgICAgICBjb25zdCBhY2NlcHQgPSBvcHRpb25zLmFjY2VwdCA/PyAoYXdhaXQgdGhpcy5maWxlU2VydmljZS5nZXRBY2NlcHRBdHRyaWJ1dGUob3B0aW9ucy5maWxlVHlwZSkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZpbGVTZXJ2aWNlLmNob29zZVZhbGlkYXRlZCh7XG4gICAgICAgICAgZmlsZVR5cGU6IG9wdGlvbnMuZmlsZVR5cGUsXG4gICAgICAgICAgbXVsdGlwbGU6IG9wdGlvbnMubXVsdGlwbGUgPz8gZmFsc2UsXG4gICAgICAgICAgYWNjZXB0LFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWNjZXB0ZWQgPSBhd2FpdCB0aGlzLmZpbGVTZXJ2aWNlLmNob29zZSh7XG4gICAgICAgIGFjY2VwdDogb3B0aW9ucy5hY2NlcHQsXG4gICAgICAgIG11bHRpcGxlOiBvcHRpb25zLm11bHRpcGxlID8/IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7IGFjY2VwdGVkLCByZWplY3RlZDogW10gfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmlsZSBjaG9vc2UgZmFpbGVkOicsIGVycm9yKTtcbiAgICAgIHJldHVybiB7IGFjY2VwdGVkOiBbXSwgcmVqZWN0ZWQ6IFtdIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYnJvd3NlKG9wdGlvbnM6IEFYVXBsb2FkZXJCcm93c2VPcHRpb25zID0geyBtdWx0aXBsZTogZmFsc2UgfSk6IFByb21pc2U8QVhVcGxvYWRSZXF1ZXN0W10+IHtcbiAgICBjb25zdCB7IGFjY2VwdGVkIH0gPSBhd2FpdCB0aGlzLmNob29zZUZpbGVzKG9wdGlvbnMpO1xuICAgIGlmICghYWNjZXB0ZWQubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFkZChhY2NlcHRlZCwgeyBmaWxlVHlwZTogb3B0aW9ucy5maWxlVHlwZSB9KTtcbiAgfVxuXG4gIGFzeW5jIGNhbmNlbEFsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLl9maWxlcyQudmFsdWUuZmlsdGVyKChjKSA9PiBjLnN0YXR1cygpICE9PSAnY29tcGxldGVkJykubWFwKChjKSA9PiBjLmNhbmNlbCgpKSk7XG4gIH1cblxuICBjbGVhckFsbCgpOiB2b2lkIHtcbiAgICBjb25zdCByZW1haW5pbmdGaWxlcyA9IHRoaXMuX2ZpbGVzJC52YWx1ZS5maWx0ZXIoKGMpID0+IGMuc3RhdHVzKCkgPT09ICdpbnByb2dyZXNzJyk7XG4gICAgdGhpcy5fZmlsZXMkLm5leHQocmVtYWluaW5nRmlsZXMpO1xuICB9XG5cbiAgcmVtb3ZlKGl0ZW06IEFYVXBsb2FkUmVxdWVzdCk6IHZvaWQge1xuICAgIGNvbnN0IHVwZGF0ZWRGaWxlcyA9IHRoaXMuX2ZpbGVzJC52YWx1ZS5maWx0ZXIoKGMpID0+IGMgIT09IGl0ZW0pO1xuICAgIHRoaXMuX2ZpbGVzJC5uZXh0KHVwZGF0ZWRGaWxlcyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN0YXJ0VXBsb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5ld0ZpbGVzID0gdGhpcy5fZmlsZXMkLnZhbHVlLmZpbHRlcigoYykgPT4gYy5zdGF0dXMoKSA9PT0gJ25ldycpO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBuZXdGaWxlcykge1xuICAgICAgYXdhaXQgdGhpcy5iaW5kRXZlbnRzKGZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYmluZEV2ZW50cyhjOiBBWFVwbG9hZFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjLm9uU3RhcnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMub25GaWxlVXBsb2FkU3RhcnQubmV4dCh7XG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgdXBsb2FkZWRGaWxlOiBjLFxuICAgICAgICBpc1VzZXJJbnRlcmFjdGlvbjogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGMub25Db21wbGV0ZS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIE9iamVjdC5hc3NpZ24oYywgeyBtZXRhRGF0YTogZGF0YSB9KTtcbiAgICAgIHRoaXMub25GaWxlVXBsb2FkQ29tcGxldGUubmV4dCh7XG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgdXBsb2FkZWRGaWxlOiBjLFxuICAgICAgICBpc1VzZXJJbnRlcmFjdGlvbjogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgaXNBbGxEb25lID0gdGhpcy5fZmlsZXMkLnZhbHVlLmV2ZXJ5KFxuICAgICAgICAoZikgPT4gZi5zdGF0dXMoKSA9PT0gJ2NvbXBsZXRlZCcgfHwgZi5zdGF0dXMoKSA9PT0gJ2NhbmNlbGVkJyB8fCBmLnN0YXR1cygpID09PSAnZmFpbGVkJyxcbiAgICAgICk7XG5cbiAgICAgIGlmIChpc0FsbERvbmUpIHtcbiAgICAgICAgdGhpcy5vbkZpbGVzVXBsb2FkQ29tcGxldGUubmV4dCh7XG4gICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgIHVwbG9hZGVkRmlsZXM6IHRoaXMuX2ZpbGVzJC52YWx1ZSxcbiAgICAgICAgICBpc1VzZXJJbnRlcmFjdGlvbjogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYy5vbkNhbmNlbC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5vbkZpbGVVcGxvYWRDYW5jZWxlZC5uZXh0KHtcbiAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICB1cGxvYWRlZEZpbGU6IGMsXG4gICAgICAgIGlzVXNlckludGVyYWN0aW9uOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBseUZpbGVUeXBlVmFsaWRhdGlvbihcbiAgICByZXF1ZXN0czogQVhVcGxvYWRSZXF1ZXN0W10sXG4gICAgZmlsZVR5cGU/OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgKTogUHJvbWlzZTxBWFVwbG9hZFJlcXVlc3RbXT4ge1xuICAgIGlmICghZmlsZVR5cGUpIHtcbiAgICAgIHJldHVybiByZXF1ZXN0cztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IGF3YWl0IHRoaXMuZmlsZVNlcnZpY2UudmFsaWRhdGUocmVxdWVzdC5maWxlLCBmaWxlVHlwZSk7XG4gICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVxdWVzdC5lcnJvcihlcnJvcnNbMF0/Lm1lc3NhZ2UgPz8gJ0ludmFsaWQgZmlsZScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0cztcbiAgfVxufVxuIl19","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { isPlatformBrowser } from '@angular/common';\nimport { ChangeDetectorRef, DOCUMENT, Directive, ElementRef, PLATFORM_ID, ViewContainerRef, inject, input, output, signal, } from '@angular/core';\nimport { bindUploaderZoneHost, unbindUploaderZoneHost } from './uploader-zone-host';\nimport { AXUploaderService } from './uploader.service';\nimport * as i0 from \"@angular/core\";\n/**\n * A directive that provides drag-and-drop and file upload functionality.\n * When applied to an element, it enables drag-and-drop file uploads and file browsing.\n * @category Directives\n */\nexport class AXUploaderZoneDirective {\n /**\n * Initializes the directive with event listeners and service subscriptions.\n */\n constructor() {\n /**\n * The element reference for the directive host.\n * @ignore\n */\n this.elementRef = inject(ElementRef);\n /**\n * View container reference for rendering custom templates.\n * @ignore\n */\n this.viewContainerRef = inject(ViewContainerRef);\n /**\n * Whether multiple files can be selected.\n * @defaultValue true\n */\n this.multiple = input(true, ...(ngDevMode ? [{ debugName: \"multiple\" }] : []));\n /**\n * File types that are accepted for upload.\n * @defaultValue null\n */\n this.accept = input(null, ...(ngDevMode ? [{ debugName: \"accept\" }] : []));\n /**\n * Logical file type name from {@link AXFileService} (e.g. `conversation-image`).\n * Required for browse handles and validated selection.\n */\n this.fileType = input(null, ...(ngDevMode ? [{ debugName: \"fileType\" }] : []));\n /**\n * Custom template for the drag overlay. If provided, this will be used instead of the default overlay.\n */\n this.overlayTemplate = input(...(ngDevMode ? [undefined, { debugName: \"overlayTemplate\" }] : []));\n /**\n * Whether browsing files by clicking on the container is disabled.\n * @defaultValue false\n */\n this.disableBrowse = input(false, ...(ngDevMode ? [{ debugName: \"disableBrowse\" }] : []));\n /**\n * Whether drag and drop functionality is disabled.\n * @defaultValue false\n */\n this.disableDragDrop = input(false, ...(ngDevMode ? [{ debugName: \"disableDragDrop\" }] : []));\n /**\n * Change detector reference.\n * @ignore\n */\n this.cdr = inject(ChangeDetectorRef);\n /**\n * Document reference.\n * @ignore\n */\n this.document = inject(DOCUMENT);\n /**\n * Platform ID for browser detection.\n * @ignore\n */\n this.platformID = inject(PLATFORM_ID);\n /**\n * Upload service instance.\n * @ignore\n */\n this.uploadService = inject(AXUploaderService);\n /**\n * Unsubscriber service instance.\n * @ignore\n */\n this.unsubscriber = inject(AXUnsubscriber);\n /**\n * Translation service instance.\n * @ignore\n */\n this.translateService = inject(AXTranslationService);\n /**\n * Embedded view reference for custom template.\n * @ignore\n */\n this.templateViewRef = null;\n /**\n * Emitted when files are selected or dropped (like HTML file input).\n * Emits an event with files property containing the selected files.\n */\n this.fileChange = output();\n /**\n * Emitted when files are changed (added, removed, etc.).\n * @deprecated Use fileChange instead for simpler file input-like behavior\n */\n this.onChanged = output();\n /**\n * Emitted on drag enter event.\n */\n this.dragEnter = output();\n /**\n * Emitted on drag leave event.\n */\n this.dragLeave = output();\n /**\n * Emitted on drag over event.\n */\n this.dragOver = output();\n /**\n * Emitted when a single file upload is completed.\n */\n this.onFileUploadComplete = output();\n /**\n * Emitted when all files upload is completed.\n */\n this.onFilesUploadComplete = output();\n /**\n * CSS class for the overlay state.\n * @ignore\n */\n this.stateClass = 'ax-uploader-overlay-state';\n /**\n * The overlay element for drag and drop visual feedback.\n * @ignore\n */\n this.overlayElement = null;\n /**\n * Flag to track if dragOver has been emitted for the current drag session.\n * @ignore\n */\n this.dragOverEmitted = signal(false, ...(ngDevMode ? [{ debugName: \"dragOverEmitted\" }] : []));\n /**\n * Counter to track drag enter/leave depth to prevent false dragleave events.\n * When moving from parent to child, dragleave fires even though we're still inside.\n * @ignore\n */\n this.dragDepth = signal(0, ...(ngDevMode ? [{ debugName: \"dragDepth\" }] : []));\n /**\n * Animation end handler for cleanup.\n * @ignore\n */\n this.animationEndHandler = null;\n this.element = this.elementRef.nativeElement;\n this.element.style.position = 'relative';\n bindUploaderZoneHost(this.element, this);\n //\n this.uploadService.onFileUploadComplete.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n this.onFileUploadComplete.emit(c);\n });\n this.uploadService.onFilesUploadComplete.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {\n this.onFilesUploadComplete.emit(c);\n });\n //\n setTimeout(() => {\n const browseHandlers = this.element.querySelectorAll('[data-ax-uploader-browse-handle=\"true\"]');\n if (browseHandlers.length <= 0 && !this.disableBrowse()) {\n this.element.addEventListener('click', this.browser.bind(this), true);\n }\n });\n if (!this.disableDragDrop()) {\n this.element.addEventListener('dragenter', this.handleDragEnter.bind(this), true);\n this.element.addEventListener('dragover', this.handleDragOver.bind(this), true);\n this.element.addEventListener('drop', this.handleOnDrop.bind(this), true);\n this.element.addEventListener('dragleave', (e) => this.removeZone(e), true);\n }\n }\n /**\n * Cleans up event listeners when the directive is destroyed.\n */\n ngOnDestroy() {\n unbindUploaderZoneHost(this.element);\n this.element.removeEventListener('click', this.browser.bind(this));\n this.element.removeEventListener('dragenter', this.handleDragEnter.bind(this));\n this.element.removeEventListener('drop', this.handleOnDrop.bind(this));\n this.element.removeEventListener('dragover', this.handleDragOver.bind(this));\n this.element.removeEventListener('dragleave', this.removeZone.bind(this));\n }\n /**\n * Handles drag enter events to show the upload overlay.\n * @private\n */\n async handleDragEnter(event) {\n if (this.disableDragDrop())\n return;\n this.dragOverEmitted.set(false); // Reset flag when entering\n this.dragDepth.update((depth) => depth + 1); // Increment depth counter\n // Only create overlay on first enter (when depth is 1)\n if (this.dragDepth() === 1) {\n // Cancel any pending exit animation\n this.cancelExitAnimation();\n await this.createZone();\n this.dragEnter.emit(event);\n }\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n /**\n * Handles drop events to process dropped files.\n * @private\n */\n async handleOnDrop(event) {\n if (this.disableDragDrop())\n return;\n event.preventDefault();\n event.stopImmediatePropagation();\n // Reset drag depth on drop\n this.dragDepth.set(0);\n if (event.dataTransfer?.files && event.dataTransfer.files.length > 0) {\n let files = Array.from(event.dataTransfer.files);\n let rejected;\n const catalog = this.fileType();\n if (catalog) {\n const result = await this.uploadService.validateFiles(files, catalog);\n files = result.accepted;\n rejected = result.rejected;\n }\n this.fileChange.emit({ event, files, rejected });\n if (!this.disableBrowse()) {\n const requests = await this.uploadService.add(files, { fileType: catalog ?? undefined });\n if (requests.length > 0) {\n this.onChanged.emit({\n component: this,\n requests,\n isUserInteraction: true,\n });\n }\n }\n }\n this.removeZone();\n this.cdr.detectChanges();\n }\n /**\n * Handles drag over events to allow dropping.\n * @private\n */\n handleDragOver(event) {\n if (this.disableDragDrop())\n return;\n // Only emit dragOver once per drag session to avoid spam\n if (!this.dragOverEmitted()) {\n this.dragOverEmitted.set(true);\n this.dragOver.emit(event);\n }\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n /**\n * Creates the visual overlay for drag and drop feedback.\n * @private\n */\n async createZone() {\n if (isPlatformBrowser(this.platformID)) {\n // Check if overlay already exists (might be exiting)\n let existingOverlay = this.document.getElementById('ax-uploader-overlay-state') || this.overlayElement;\n // Verify the overlay is actually in the DOM (not removed after animation)\n if (existingOverlay && existingOverlay.parentNode === this.element) {\n // Remove exiting class to cancel exit animation and show overlay again\n existingOverlay.classList.remove('ax-uploader-overlay-exiting');\n // Clean up any pending animation handler\n if (this.animationEndHandler) {\n existingOverlay.removeEventListener('animationend', this.animationEndHandler);\n this.animationEndHandler = null;\n }\n // Reset overlayElement reference if it was cleared\n if (!this.overlayElement && existingOverlay) {\n this.overlayElement = existingOverlay;\n }\n return;\n }\n else if (existingOverlay && existingOverlay.parentNode !== this.element) {\n // Overlay exists but is not in the DOM, clear the reference\n this.overlayElement = null;\n existingOverlay = null;\n }\n // Check if custom template is provided\n const template = this.overlayTemplate();\n if (template) {\n // Create container for template\n this.overlayElement = this.document.createElement('div');\n this.overlayElement.classList.add('ax-uploader-overlay-state', '-ax-z-1');\n this.overlayElement.id = 'ax-uploader-overlay-state';\n // Create embedded view from template (will be inserted at directive anchor)\n this.viewContainerRef.clear();\n this.templateViewRef = this.viewContainerRef.createEmbeddedView(template);\n this.templateViewRef.detectChanges();\n // Get root nodes and move them to overlay element\n const rootNodes = this.templateViewRef.rootNodes;\n for (const node of rootNodes) {\n // Remove from current location if it has a parent\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n this.overlayElement.appendChild(node);\n }\n // Detach the view since we've moved the nodes\n this.templateViewRef.detach();\n this.element.appendChild(this.overlayElement);\n this.cdr.detectChanges();\n return;\n }\n // Use default overlay\n this.overlayElement = this.document.createElement('div');\n this.overlayElement.classList.add('ax-uploader-overlay-state', '-ax-z-1');\n this.overlayElement.id = 'ax-uploader-overlay-state';\n const icon = this.document.createElement('span');\n icon.classList.add('ax-icon', 'ax-icon-upload');\n const text = this.document.createElement('span');\n text.innerText = await this.translateService.translateAsync('@acorex:uploader.zone.text');\n this.overlayElement.appendChild(icon);\n this.overlayElement.appendChild(text);\n this.element.appendChild(this.overlayElement);\n }\n }\n /**\n * Cancels any pending exit animation and cleans up handlers.\n * @private\n */\n cancelExitAnimation() {\n if (isPlatformBrowser(this.platformID)) {\n const overlay = this.document.getElementById('ax-uploader-overlay-state') || this.overlayElement;\n if (overlay && this.animationEndHandler) {\n // Remove exiting class to cancel animation\n overlay.classList.remove('ax-uploader-overlay-exiting');\n // Clean up the handler\n overlay.removeEventListener('animationend', this.animationEndHandler);\n this.animationEndHandler = null;\n }\n }\n }\n /**\n * Removes the visual overlay for drag and drop feedback.\n * @private\n */\n removeZone(event) {\n if (this.disableDragDrop())\n return;\n this.dragDepth.update((depth) => Math.max(0, depth - 1)); // Decrement depth counter, ensure non-negative\n // Only remove overlay when we've truly left the drop zone (depth reaches 0)\n if (this.dragDepth() <= 0) {\n this.dragDepth.set(0); // Ensure it's exactly 0\n this.dragOverEmitted.set(false); // Reset flag when leaving\n if (event) {\n this.dragLeave.emit(event);\n }\n if (isPlatformBrowser(this.platformID)) {\n const overlay = this.document.getElementById('ax-uploader-overlay-state') || this.overlayElement;\n if (overlay) {\n // Clean up any existing handler first\n if (this.animationEndHandler) {\n overlay.removeEventListener('animationend', this.animationEndHandler);\n }\n // Add exiting class to trigger CSS animation\n overlay.classList.add('ax-uploader-overlay-exiting');\n // Wait for CSS animation to complete\n this.animationEndHandler = (e) => {\n if (e.target === overlay && e.animationName === 'fadeOutScale') {\n overlay.removeEventListener('animationend', this.animationEndHandler);\n this.animationEndHandler = null;\n if (overlay.parentNode === this.element) {\n this.element.removeChild(overlay);\n }\n if (this.overlayElement && this.overlayElement.parentNode) {\n this.overlayElement.remove();\n }\n // Clear the overlay element reference\n this.overlayElement = null;\n // Remove custom template view if it exists\n if (this.templateViewRef) {\n this.viewContainerRef.clear();\n this.templateViewRef = null;\n }\n }\n };\n overlay.addEventListener('animationend', this.animationEndHandler);\n }\n else {\n // If overlay doesn't exist, just clean up template view\n if (this.templateViewRef) {\n this.viewContainerRef.clear();\n this.templateViewRef = null;\n }\n }\n }\n }\n }\n /**\n * Opens the file browser dialog and processes selected files.\n * @returns Promise that resolves when files are processed\n */\n async browser() {\n const catalog = this.fileType();\n let selected = [];\n let rejected;\n if (catalog) {\n const accept = this.accept() ?? (await this.uploadService.getAcceptAttribute(catalog));\n const result = await this.uploadService.chooseFiles({\n fileType: catalog,\n multiple: this.multiple(),\n accept,\n });\n selected = result.accepted;\n rejected = result.rejected;\n }\n else if (!this.disableBrowse()) {\n const requests = await this.uploadService.browse({\n accept: this.accept() ?? undefined,\n multiple: this.multiple(),\n });\n selected = requests.map((r) => r.file);\n }\n else {\n console.warn('AXUploaderZone.browser: fileType is required when disableBrowse is enabled (use axUploaderBrowseHandle).');\n return;\n }\n if (selected.length === 0 && !(rejected?.length ?? 0)) {\n return;\n }\n const syntheticEvent = new Event('change');\n const target = Object.create(EventTarget.prototype);\n target.files = selected;\n Object.defineProperty(syntheticEvent, 'target', { value: target, writable: false });\n this.fileChange.emit({\n event: syntheticEvent,\n files: selected,\n rejected,\n });\n if (this.disableBrowse()) {\n return;\n }\n const requests = catalog\n ? await this.uploadService.add(selected, { fileType: catalog })\n : await this.uploadService.add(selected);\n if (requests.length > 0) {\n this.onChanged.emit({\n component: this,\n requests,\n isUserInteraction: true,\n });\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXUploaderZoneDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.3.3\", type: AXUploaderZoneDirective, isStandalone: true, selector: \"[axUploaderZone]\", inputs: { multiple: { classPropertyName: \"multiple\", publicName: \"multiple\", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: \"accept\", publicName: \"accept\", isSignal: true, isRequired: false, transformFunction: null }, fileType: { classPropertyName: \"fileType\", publicName: \"fileType\", isSignal: true, isRequired: false, transformFunction: null }, overlayTemplate: { classPropertyName: \"overlayTemplate\", publicName: \"overlayTemplate\", isSignal: true, isRequired: false, transformFunction: null }, disableBrowse: { classPropertyName: \"disableBrowse\", publicName: \"disableBrowse\", isSignal: true, isRequired: false, transformFunction: null }, disableDragDrop: { classPropertyName: \"disableDragDrop\", publicName: \"disableDragDrop\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { fileChange: \"fileChange\", onChanged: \"onChanged\", dragEnter: \"dragEnter\", dragLeave: \"dragLeave\", dragOver: \"dragOver\", onFileUploadComplete: \"onFileUploadComplete\", onFilesUploadComplete: \"onFilesUploadComplete\" }, host: { classAttribute: \"ax-drop-zone\" }, providers: [AXUnsubscriber], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXUploaderZoneDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[axUploaderZone]',\n providers: [AXUnsubscriber],\n host: {\n class: 'ax-drop-zone',\n },\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXItem9uZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvdXBsb2FkZXIvc3JjL2xpYi91cGxvYWRlci16b25lLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsU0FBUyxFQUNULFVBQVUsRUFHVixXQUFXLEVBRVgsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQU92QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFFdkQ7Ozs7R0FJRztBQVFILE1BQU0sT0FBTyx1QkFBdUI7SUFvS2xDOztPQUVHO0lBQ0g7UUF0S0E7OztXQUdHO1FBQ0ssZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV4Qzs7O1dBR0c7UUFDSyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUVwRDs7O1dBR0c7UUFDSCxhQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksb0RBQUMsQ0FBQztRQUV2Qjs7O1dBR0c7UUFDSCxXQUFNLEdBQUcsS0FBSyxDQUFnQixJQUFJLGtEQUFDLENBQUM7UUFFcEM7OztXQUdHO1FBQ0gsYUFBUSxHQUFHLEtBQUssQ0FBZ0IsSUFBSSxvREFBQyxDQUFDO1FBRXRDOztXQUVHO1FBQ0gsb0JBQWUs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LEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRXBGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ25CLEtBQUssRUFBRSxjQUFjO1lBQ3JCLEtBQUssRUFBRSxRQUFRO1lBQ2YsUUFBUTtTQUNULENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7WUFDekIsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxPQUFPO1lBQ3RCLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMvRCxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUzQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2xCLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFFBQVE7Z0JBQ1IsaUJBQWlCLEVBQUUsSUFBSTthQUN4QixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzs4R0E1ZlUsdUJBQXVCO2tHQUF2Qix1QkFBdUIsaXBDQUx2QixDQUFDLGNBQWMsQ0FBQzs7MkZBS2hCLHVCQUF1QjtrQkFQbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUM7b0JBQzNCLElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUsY0FBYztxQkFDdEI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFVuc3Vic2NyaWJlciB9IGZyb20gJ0BhY29yZXgvY29yZS91dGlscyc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRE9DVU1FTlQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBPbkRlc3Ryb3ksXG4gIFBMQVRGT1JNX0lELFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQVhVcGxvYWRlckNoYW5nZWRFdmVudCxcbiAgQVhVcGxvYWRlckZpbGVDaGFuZ2VFdmVudCxcbiAgQVhVcGxvYWRlckZpbGVDb21wbGV0ZUV2ZW50LFxuICBBWFVwbG9hZGVyRmlsZXNDb21wbGV0ZUV2ZW50LFxufSBmcm9tICcuL3VwbG9hZGVyLm1vZGVscyc7XG5pbXBvcnQgeyBiaW5kVXBsb2FkZXJab25lSG9zdCwgdW5iaW5kVXBsb2FkZXJab25lSG9zdCB9IGZyb20gJy4vdXBsb2FkZXItem9uZS1ob3N0JztcbmltcG9ydCB7IEFYVXBsb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi91cGxvYWRlci5zZXJ2aWNlJztcblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0aGF0IHByb3ZpZGVzIGRyYWctYW5kLWRyb3AgYW5kIGZpbGUgdXBsb2FkIGZ1bmN0aW9uYWxpdHkuXG4gKiBXaGVuIGFwcGxpZWQgdG8gYW4gZWxlbWVudCwgaXQgZW5hYmxlcyBkcmFnLWFuZC1kcm9wIGZpbGUgdXBsb2FkcyBhbmQgZmlsZSBicm93c2luZy5cbiAqIEBjYXRlZ29yeSBEaXJlY3RpdmVzXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1theFVwbG9hZGVyWm9uZV0nLFxuICBwcm92aWRlcnM6IFtBWFVuc3Vic2NyaWJlcl0sXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2F4LWRyb3Atem9uZScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEFYVXBsb2FkZXJab25lRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHJlZmVyZW5jZSBmb3IgdGhlIGRpcmVjdGl2ZSBob3N0LlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgLyoqXG4gICAqIFZpZXcgY29udGFpbmVyIHJlZmVyZW5jZSBmb3IgcmVuZGVyaW5nIGN1c3RvbSB0ZW1wbGF0ZXMuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcblxuICAvKipcbiAgICogV2hldGhlciBtdWx0aXBsZSBmaWxlcyBjYW4gYmUgc2VsZWN0ZWQuXG4gICAqIEBkZWZhdWx0VmFsdWUgdHJ1ZVxuICAgKi9cbiAgbXVsdGlwbGUgPSBpbnB1dCh0cnVlKTtcblxuICAvKipcbiAgICogRmlsZSB0eXBlcyB0aGF0IGFyZSBhY2NlcHRlZCBmb3IgdXBsb2FkLlxuICAgKiBAZGVmYXVsdFZhbHVlIG51bGxcbiAgICovXG4gIGFjY2VwdCA9IGlucHV0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8qKlxuICAgKiBMb2dpY2FsIGZpbGUgdHlwZSBuYW1lIGZyb20ge0BsaW5rIEFYRmlsZVNlcnZpY2V9IChlLmcuIGBjb252ZXJzYXRpb24taW1hZ2VgKS5cbiAgICogUmVxdWlyZWQgZm9yIGJyb3dzZSBoYW5kbGVzIGFuZCB2YWxpZGF0ZWQgc2VsZWN0aW9uLlxuICAgKi9cbiAgZmlsZVR5cGUgPSBpbnB1dDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvKipcbiAgICogQ3VzdG9tIHRlbXBsYXRlIGZvciB0aGUgZHJhZyBvdmVybGF5LiBJZiBwcm92aWRlZCwgdGhpcyB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBvdmVybGF5LlxuICAgKi9cbiAgb3ZlcmxheVRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8dW5rbm93bj4+KCk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYnJvd3NpbmcgZmlsZXMgYnkgY2xpY2tpbmcgb24gdGhlIGNvbnRhaW5lciBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHRWYWx1ZSBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUJyb3dzZSA9IGlucHV0KGZhbHNlKTtcblxuICAvKipcbiAgICogV2hldGhlciBkcmFnIGFuZCBkcm9wIGZ1bmN0aW9uYWxpdHkgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0VmFsdWUgZmFsc2VcbiAgICovXG4gIGRpc2FibGVEcmFnRHJvcCA9IGlucHV0KGZhbHNlKTtcblxuICAvKipcbiAgICogQ2hhbmdlIGRldGVjdG9yIHJlZmVyZW5jZS5cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIC8qKlxuICAgKiBEb2N1bWVudCByZWZlcmVuY2UuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gIC8qKlxuICAgKiBQbGF0Zm9ybSBJRCBmb3IgYnJvd3NlciBkZXRlY3Rpb24uXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgcGxhdGZvcm1JRCA9IGluamVjdChQTEFURk9STV9JRCk7XG5cbiAgLyoqXG4gICAqIFVwbG9hZCBzZXJ2aWNlIGluc3RhbmNlLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIHVwbG9hZFNlcnZpY2UgPSBpbmplY3QoQVhVcGxvYWRlclNlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZXIgc2VydmljZSBpbnN0YW5jZS5cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZXIgPSBpbmplY3QoQVhVbnN1YnNjcmliZXIpO1xuXG4gIC8qKlxuICAgKiBUcmFuc2xhdGlvbiBzZXJ2aWNlIGluc3RhbmNlLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoQVhUcmFuc2xhdGlvblNlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBUaGUgaG9zdCBlbGVtZW50LlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBFbWJlZGRlZCB2aWV3IHJlZmVyZW5jZSBmb3IgY3VzdG9tIHRlbXBsYXRlLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIHRlbXBsYXRlVmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPHVua25vd24+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBmaWxlcyBhcmUgc2VsZWN0ZWQgb3IgZHJvcHBlZCAobGlrZSBIVE1MIGZpbGUgaW5wdXQpLlxuICAgKiBFbWl0cyBhbiBldmVudCB3aXRoIGZpbGVzIHByb3BlcnR5IGNvbnRhaW5pbmcgdGhlIHNlbGVjdGVkIGZpbGVzLlxuICAgKi9cbiAgZmlsZUNoYW5nZSA9IG91dHB1dDxBWFVwbG9hZGVyRmlsZUNoYW5nZUV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gZmlsZXMgYXJlIGNoYW5nZWQgKGFkZGVkLCByZW1vdmVkLCBldGMuKS5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGZpbGVDaGFuZ2UgaW5zdGVhZCBmb3Igc2ltcGxlciBmaWxlIGlucHV0LWxpa2UgYmVoYXZpb3JcbiAgICovXG4gIG9uQ2hhbmdlZCA9IG91dHB1dDxBWFVwbG9hZGVyQ2hhbmdlZEV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIG9uIGRyYWcgZW50ZXIgZXZlbnQuXG4gICAqL1xuICBkcmFnRW50ZXIgPSBvdXRwdXQ8RHJhZ0V2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIG9uIGRyYWcgbGVhdmUgZXZlbnQuXG4gICAqL1xuICBkcmFnTGVhdmUgPSBvdXRwdXQ8RHJhZ0V2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIG9uIGRyYWcgb3ZlciBldmVudC5cbiAgICovXG4gIGRyYWdPdmVyID0gb3V0cHV0PERyYWdFdmVudD4oKTtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgc2luZ2xlIGZpbGUgdXBsb2FkIGlzIGNvbXBsZXRlZC5cbiAgICovXG4gIG9uRmlsZVVwbG9hZENvbXBsZXRlID0gb3V0cHV0PEFYVXBsb2FkZXJGaWxlQ29tcGxldGVFdmVudD4oKTtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGFsbCBmaWxlcyB1cGxvYWQgaXMgY29tcGxldGVkLlxuICAgKi9cbiAgb25GaWxlc1VwbG9hZENvbXBsZXRlID0gb3V0cHV0PEFYVXBsb2FkZXJGaWxlc0NvbXBsZXRlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIENTUyBjbGFzcyBmb3IgdGhlIG92ZXJsYXkgc3RhdGUuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0YXRlQ2xhc3MgPSAnYXgtdXBsb2FkZXItb3ZlcmxheS1zdGF0ZSc7XG5cbiAgLyoqXG4gICAqIFRoZSBvdmVybGF5IGVsZW1lbnQgZm9yIGRyYWcgYW5kIGRyb3AgdmlzdWFsIGZlZWRiYWNrLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvdmVybGF5RWxlbWVudDogSFRNTERpdkVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogRmxhZyB0byB0cmFjayBpZiBkcmFnT3ZlciBoYXMgYmVlbiBlbWl0dGVkIGZvciB0aGUgY3VycmVudCBkcmFnIHNlc3Npb24uXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgZHJhZ092ZXJFbWl0dGVkID0gc2lnbmFsKGZhbHNlKTtcblxuICAvKipcbiAgICogQ291bnRlciB0byB0cmFjayBkcmFnIGVudGVyL2xlYXZlIGRlcHRoIHRvIHByZXZlbnQgZmFsc2UgZHJhZ2xlYXZlIGV2ZW50cy5cbiAgICogV2hlbiBtb3ZpbmcgZnJvbSBwYXJlbnQgdG8gY2hpbGQsIGRyYWdsZWF2ZSBmaXJlcyBldmVuIHRob3VnaCB3ZSdyZSBzdGlsbCBpbnNpZGUuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgZHJhZ0RlcHRoID0gc2lnbmFsKDApO1xuXG4gIC8qKlxuICAgKiBBbmltYXRpb24gZW5kIGhhbmRsZXIgZm9yIGNsZWFudXAuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgYW5pbWF0aW9uRW5kSGFuZGxlcjogKChlOiBBbmltYXRpb25FdmVudCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGRpcmVjdGl2ZSB3aXRoIGV2ZW50IGxpc3RlbmVycyBhbmQgc2VydmljZSBzdWJzY3JpcHRpb25zLlxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5lbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5lbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICBiaW5kVXBsb2FkZXJab25lSG9zdCh0aGlzLmVsZW1lbnQsIHRoaXMpO1xuXG4gICAgLy9cbiAgICB0aGlzLnVwbG9hZFNlcnZpY2Uub25GaWxlVXBsb2FkQ29tcGxldGUucGlwZSh0aGlzLnVuc3Vic2NyaWJlci50YWtlVW50aWxEZXN0cm95KS5zdWJzY3JpYmUoKGMpID0+IHtcbiAgICAgIHRoaXMub25GaWxlVXBsb2FkQ29tcGxldGUuZW1pdChjKTtcbiAgICB9KTtcblxuICAgIHRoaXMudXBsb2FkU2VydmljZS5vbkZpbGVzVXBsb2FkQ29tcGxldGUucGlwZSh0aGlzLnVuc3Vic2NyaWJlci50YWtlVW50aWxEZXN0cm95KS5zdWJzY3JpYmUoKGMpID0+IHtcbiAgICAgIHRoaXMub25GaWxlc1VwbG9hZENvbXBsZXRlLmVtaXQoYyk7XG4gICAgfSk7XG4gICAgLy9cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGJyb3dzZUhhbmRsZXJzID0gdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWF4LXVwbG9hZGVyLWJyb3dzZS1oYW5kbGU9XCJ0cnVlXCJdJyk7XG4gICAgICBpZiAoYnJvd3NlSGFuZGxlcnMubGVuZ3RoIDw9IDAgJiYgIXRoaXMuZGlzYWJsZUJyb3dzZSgpKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuYnJvd3Nlci5iaW5kKHRoaXMpLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5kaXNhYmxlRHJhZ0Ryb3AoKSkge1xuICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMuaGFuZGxlRHJhZ0VudGVyLmJpbmQodGhpcyksIHRydWUpO1xuICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5oYW5kbGVEcmFnT3Zlci5iaW5kKHRoaXMpLCB0cnVlKTtcbiAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5oYW5kbGVPbkRyb3AuYmluZCh0aGlzKSwgdHJ1ZSk7XG4gICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgKGUpID0+IHRoaXMucmVtb3ZlWm9uZShlIGFzIERyYWdFdmVudCksIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbnMgdXAgZXZlbnQgbGlzdGVuZXJzIHdoZW4gdGhlIGRpcmVjdGl2ZSBpcyBkZXN0cm95ZWQuXG4gICAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB1bmJpbmRVcGxvYWRlclpvbmVIb3N0KHRoaXMuZWxlbWVudCk7XG4gICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5icm93c2VyLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHRoaXMuaGFuZGxlRHJhZ0VudGVyLmJpbmQodGhpcykpO1xuICAgIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5oYW5kbGVPbkRyb3AuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5oYW5kbGVEcmFnT3Zlci5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgdGhpcy5yZW1vdmVab25lLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgZHJhZyBlbnRlciBldmVudHMgdG8gc2hvdyB0aGUgdXBsb2FkIG92ZXJsYXkuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGhhbmRsZURyYWdFbnRlcihldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZURyYWdEcm9wKCkpIHJldHVybjtcbiAgICB0aGlzLmRyYWdPdmVyRW1pdHRlZC5zZXQoZmFsc2UpOyAvLyBSZXNldCBmbGFnIHdoZW4gZW50ZXJpbmdcbiAgICB0aGlzLmRyYWdEZXB0aC51cGRhdGUoKGRlcHRoKSA9PiBkZXB0aCArIDEpOyAvLyBJbmNyZW1lbnQgZGVwdGggY291bnRlclxuXG4gICAgLy8gT25seSBjcmVhdGUgb3ZlcmxheSBvbiBmaXJzdCBlbnRlciAod2hlbiBkZXB0aCBpcyAxKVxuICAgIGlmICh0aGlzLmRyYWdEZXB0aCgpID09PSAxKSB7XG4gICAgICAvLyBDYW5jZWwgYW55IHBlbmRpbmcgZXhpdCBhbmltYXRpb25cbiAgICAgIHRoaXMuY2FuY2VsRXhpdEFuaW1hdGlvbigpO1xuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVab25lKCk7XG4gICAgICB0aGlzLmRyYWdFbnRlci5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgZHJvcCBldmVudHMgdG8gcHJvY2VzcyBkcm9wcGVkIGZpbGVzLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVPbkRyb3AoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVEcmFnRHJvcCgpKSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIFJlc2V0IGRyYWcgZGVwdGggb24gZHJvcFxuICAgIHRoaXMuZHJhZ0RlcHRoLnNldCgwKTtcblxuICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzICYmIGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgZmlsZXMgPSBBcnJheS5mcm9tKGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcyk7XG4gICAgICBsZXQgcmVqZWN0ZWQ6IEFYVXBsb2FkZXJGaWxlQ2hhbmdlRXZlbnRbJ3JlamVjdGVkJ107XG4gICAgICBjb25zdCBjYXRhbG9nID0gdGhpcy5maWxlVHlwZSgpO1xuXG4gICAgICBpZiAoY2F0YWxvZykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnVwbG9hZFNlcnZpY2UudmFsaWRhdGVGaWxlcyhmaWxlcywgY2F0YWxvZyk7XG4gICAgICAgIGZpbGVzID0gcmVzdWx0LmFjY2VwdGVkO1xuICAgICAgICByZWplY3RlZCA9IHJlc3VsdC5yZWplY3RlZDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5maWxlQ2hhbmdlLmVtaXQoeyBldmVudCwgZmlsZXMsIHJlamVjdGVkIH0pO1xuXG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZUJyb3dzZSgpKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RzID0gYXdhaXQgdGhpcy51cGxvYWRTZXJ2aWNlLmFkZChmaWxlcywgeyBmaWxlVHlwZTogY2F0YWxvZyA/PyB1bmRlZmluZWQgfSk7XG4gICAgICAgIGlmIChyZXF1ZXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZWQuZW1pdCh7XG4gICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgICByZXF1ZXN0cyxcbiAgICAgICAgICAgIGlzVXNlckludGVyYWN0aW9uOiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yZW1vdmVab25lKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgZHJhZyBvdmVyIGV2ZW50cyB0byBhbGxvdyBkcm9wcGluZy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVEcmFnRHJvcCgpKSByZXR1cm47XG4gICAgLy8gT25seSBlbWl0IGRyYWdPdmVyIG9uY2UgcGVyIGRyYWcgc2Vzc2lvbiB0byBhdm9pZCBzcGFtXG4gICAgaWYgKCF0aGlzLmRyYWdPdmVyRW1pdHRlZCgpKSB7XG4gICAgICB0aGlzLmRyYWdPdmVyRW1pdHRlZC5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLmRyYWdPdmVyLmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHZpc3VhbCBvdmVybGF5IGZvciBkcmFnIGFuZCBkcm9wIGZlZWRiYWNrLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVab25lKCkge1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSUQpKSB7XG4gICAgICAvLyBDaGVjayBpZiBvdmVybGF5IGFscmVhZHkgZXhpc3RzIChtaWdodCBiZSBleGl0aW5nKVxuICAgICAgbGV0IGV4aXN0aW5nT3ZlcmxheSA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F4LXVwbG9hZGVyLW92ZXJsYXktc3RhdGUnKSB8fCB0aGlzLm92ZXJsYXlFbGVtZW50O1xuXG4gICAgICAvLyBWZXJpZnkgdGhlIG92ZXJsYXkgaXMgYWN0dWFsbHkgaW4gdGhlIERPTSAobm90IHJlbW92ZWQgYWZ0ZXIgYW5pbWF0aW9uKVxuICAgICAgaWYgKGV4aXN0aW5nT3ZlcmxheSAmJiBleGlzdGluZ092ZXJsYXkucGFyZW50Tm9kZSA9PT0gdGhpcy5lbGVtZW50KSB7XG4gICAgICAgIC8vIFJlbW92ZSBleGl0aW5nIGNsYXNzIHRvIGNhbmNlbCBleGl0IGFuaW1hdGlvbiBhbmQgc2hvdyBvdmVybGF5IGFnYWluXG4gICAgICAgIGV4aXN0aW5nT3ZlcmxheS5jbGFzc0xpc3QucmVtb3ZlKCdheC11cGxvYWRlci1vdmVybGF5LWV4aXRpbmcnKTtcbiAgICAgICAgLy8gQ2xlYW4gdXAgYW55IHBlbmRpbmcgYW5pbWF0aW9uIGhhbmRsZXJcbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uRW5kSGFuZGxlcikge1xuICAgICAgICAgIGV4aXN0aW5nT3ZlcmxheS5yZW1vdmVFdmVudExpc3RlbmVyKCdhbmltYXRpb25lbmQnLCB0aGlzLmFuaW1hdGlvbkVuZEhhbmRsZXIpO1xuICAgICAgICAgIHRoaXMuYW5pbWF0aW9uRW5kSGFuZGxlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVzZXQgb3ZlcmxheUVsZW1lbnQgcmVmZXJlbmNlIGlmIGl0IHdhcyBjbGVhcmVkXG4gICAgICAgIGlmICghdGhpcy5vdmVybGF5RWxlbWVudCAmJiBleGlzdGluZ092ZXJsYXkpIHtcbiAgICAgICAgICB0aGlzLm92ZXJsYXlFbGVtZW50ID0gZXhpc3RpbmdPdmVybGF5IGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAoZXhpc3RpbmdPdmVybGF5ICYmIGV4aXN0aW5nT3ZlcmxheS5wYXJlbnROb2RlICE9PSB0aGlzLmVsZW1lbnQpIHtcbiAgICAgICAgLy8gT3ZlcmxheSBleGlzdHMgYnV0IGlzIG5vdCBpbiB0aGUgRE9NLCBjbGVhciB0aGUgcmVmZXJlbmNlXG4gICAgICAgIHRoaXMub3ZlcmxheUVsZW1lbnQgPSBudWxsO1xuICAgICAgICBleGlzdGluZ092ZXJsYXkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBjdXN0b20gdGVtcGxhdGUgaXMgcHJvdmlkZWRcbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5vdmVybGF5VGVtcGxhdGUoKTtcbiAgICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgICAvLyBDcmVhdGUgY29udGFpbmVyIGZvciB0ZW1wbGF0ZVxuICAgICAgICB0aGlzLm92ZXJsYXlFbGVtZW50ID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5vdmVybGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdheC11cGxvYWRlci1vdmVybGF5LXN0YXRlJywgJy1heC16LTEnKTtcbiAgICAgICAgdGhpcy5vdmVybGF5RWxlbWVudC5pZCA9ICdheC11cGxvYWRlci1vdmVybGF5LXN0YXRlJztcblxuICAgICAgICAvLyBDcmVhdGUgZW1iZWRkZWQgdmlldyBmcm9tIHRlbXBsYXRlICh3aWxsIGJlIGluc2VydGVkIGF0IGRpcmVjdGl2ZSBhbmNob3IpXG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuICAgICAgICB0aGlzLnRlbXBsYXRlVmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGVtcGxhdGUpO1xuICAgICAgICB0aGlzLnRlbXBsYXRlVmlld1JlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgLy8gR2V0IHJvb3Qgbm9kZXMgYW5kIG1vdmUgdGhlbSB0byBvdmVybGF5IGVsZW1lbnRcbiAgICAgICAgY29uc3Qgcm9vdE5vZGVzID0gdGhpcy50ZW1wbGF0ZVZpZXdSZWYucm9vdE5vZGVzO1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygcm9vdE5vZGVzKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIGZyb20gY3VycmVudCBsb2NhdGlvbiBpZiBpdCBoYXMgYSBwYXJlbnRcbiAgICAgICAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMub3ZlcmxheUVsZW1lbnQuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZXRhY2ggdGhlIHZpZXcgc2luY2Ugd2UndmUgbW92ZWQgdGhlIG5vZGVzXG4gICAgICAgIHRoaXMudGVtcGxhdGVWaWV3UmVmLmRldGFjaCgpO1xuXG4gICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLm92ZXJsYXlFbGVtZW50KTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFVzZSBkZWZhdWx0IG92ZXJsYXlcbiAgICAgIHRoaXMub3ZlcmxheUVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgdGhpcy5vdmVybGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdheC11cGxvYWRlci1vdmVybGF5LXN0YXRlJywgJy1heC16LTEnKTtcbiAgICAgIHRoaXMub3ZlcmxheUVsZW1lbnQuaWQgPSAnYXgtdXBsb2FkZXItb3ZlcmxheS1zdGF0ZSc7XG5cbiAgICAgIGNvbnN0IGljb246IEhUTUxTcGFuRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgaWNvbi5jbGFzc0xpc3QuYWRkKCdheC1pY29uJywgJ2F4LWljb24tdXBsb2FkJyk7XG5cbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgIHRleHQuaW5uZXJUZXh0ID0gYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAYWNvcmV4OnVwbG9hZGVyLnpvbmUudGV4dCcpO1xuXG4gICAgICB0aGlzLm92ZXJsYXlFbGVtZW50LmFwcGVuZENoaWxkKGljb24pO1xuICAgICAgdGhpcy5vdmVybGF5RWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0KTtcblxuICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMub3ZlcmxheUVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWxzIGFueSBwZW5kaW5nIGV4aXQgYW5pbWF0aW9uIGFuZCBjbGVhbnMgdXAgaGFuZGxlcnMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGNhbmNlbEV4aXRBbmltYXRpb24oKSB7XG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JRCkpIHtcbiAgICAgIGNvbnN0IG92ZXJsYXkgPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdheC11cGxvYWRlci1vdmVybGF5LXN0YXRlJykgfHwgdGhpcy5vdmVybGF5RWxlbWVudDtcblxuICAgICAgaWYgKG92ZXJsYXkgJiYgdGhpcy5hbmltYXRpb25FbmRIYW5kbGVyKSB7XG4gICAgICAgIC8vIFJlbW92ZSBleGl0aW5nIGNsYXNzIHRvIGNhbmNlbCBhbmltYXRpb25cbiAgICAgICAgb3ZlcmxheS5jbGFzc0xpc3QucmVtb3ZlKCdheC11cGxvYWRlci1vdmVybGF5LWV4aXRpbmcnKTtcbiAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIGhhbmRsZXJcbiAgICAgICAgb3ZlcmxheS5yZW1vdmVFdmVudExpc3RlbmVyKCdhbmltYXRpb25lbmQnLCB0aGlzLmFuaW1hdGlvbkVuZEhhbmRsZXIpO1xuICAgICAgICB0aGlzLmFuaW1hdGlvbkVuZEhhbmRsZXIgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSB2aXN1YWwgb3ZlcmxheSBmb3IgZHJhZyBhbmQgZHJvcCBmZWVkYmFjay5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgcmVtb3ZlWm9uZShldmVudD86IERyYWdFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVEcmFnRHJvcCgpKSByZXR1cm47XG4gICAgdGhpcy5kcmFnRGVwdGgudXBkYXRlKChkZXB0aCkgPT4gTWF0aC5tYXgoMCwgZGVwdGggLSAxKSk7IC8vIERlY3JlbWVudCBkZXB0aCBjb3VudGVyLCBlbnN1cmUgbm9uLW5lZ2F0aXZlXG5cbiAgICAvLyBPbmx5IHJlbW92ZSBvdmVybGF5IHdoZW4gd2UndmUgdHJ1bHkgbGVmdCB0aGUgZHJvcCB6b25lIChkZXB0aCByZWFjaGVzIDApXG4gICAgaWYgKHRoaXMuZHJhZ0RlcHRoKCkgPD0gMCkge1xuICAgICAgdGhpcy5kcmFnRGVwdGguc2V0KDApOyAvLyBFbnN1cmUgaXQncyBleGFjdGx5IDBcbiAgICAgIHRoaXMuZHJhZ092ZXJFbWl0dGVkLnNldChmYWxzZSk7IC8vIFJlc2V0IGZsYWcgd2hlbiBsZWF2aW5nXG5cbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICB0aGlzLmRyYWdMZWF2ZS5lbWl0KGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JRCkpIHtcbiAgICAgICAgY29uc3Qgb3ZlcmxheSA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F4LXVwbG9hZGVyLW92ZXJsYXktc3RhdGUnKSB8fCB0aGlzLm92ZXJsYXlFbGVtZW50O1xuXG4gICAgICAgIGlmIChvdmVybGF5KSB7XG4gICAgICAgICAgLy8gQ2xlYW4gdXAgYW55IGV4aXN0aW5nIGhhbmRsZXIgZmlyc3RcbiAgICAgICAgICBpZiAodGhpcy5hbmltYXRpb25FbmRIYW5kbGVyKSB7XG4gICAgICAgICAgICBvdmVybGF5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbmVuZCcsIHRoaXMuYW5pbWF0aW9uRW5kSGFuZGxlcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQWRkIGV4aXRpbmcgY2xhc3MgdG8gdHJpZ2dlciBDU1MgYW5pbWF0aW9uXG4gICAgICAgICAgb3ZlcmxheS5jbGFzc0xpc3QuYWRkKCdheC11cGxvYWRlci1vdmVybGF5LWV4aXRpbmcnKTtcblxuICAgICAgICAgIC8vIFdhaXQgZm9yIENTUyBhbmltYXRpb24gdG8gY29tcGxldGVcbiAgICAgICAgICB0aGlzLmFuaW1hdGlvbkVuZEhhbmRsZXIgPSAoZTogQW5pbWF0aW9uRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChlLnRhcmdldCA9PT0gb3ZlcmxheSAmJiBlLmFuaW1hdGlvbk5hbWUgPT09ICdmYWRlT3V0U2NhbGUnKSB7XG4gICAgICAgICAgICAgIG92ZXJsYXkucmVtb3ZlRXZlbnRMaXN0ZW5lcignYW5pbWF0aW9uZW5kJywgdGhpcy5hbmltYXRpb25FbmRIYW5kbGVyKTtcbiAgICAgICAgICAgICAgdGhpcy5hbmltYXRpb25FbmRIYW5kbGVyID0gbnVsbDtcblxuICAgICAgICAgICAgICBpZiAob3ZlcmxheS5wYXJlbnROb2RlID09PSB0aGlzLmVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGQob3ZlcmxheSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheUVsZW1lbnQgJiYgdGhpcy5vdmVybGF5RWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5RWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIENsZWFyIHRoZSBvdmVybGF5IGVsZW1lbnQgcmVmZXJlbmNlXG4gICAgICAgICAgICAgIHRoaXMub3ZlcmxheUVsZW1lbnQgPSBudWxsO1xuXG4gICAgICAgICAgICAgIC8vIFJlbW92ZSBjdXN0b20gdGVtcGxhdGUgdmlldyBpZiBpdCBleGlzdHNcbiAgICAgICAgICAgICAgaWYgKHRoaXMudGVtcGxhdGVWaWV3UmVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVZpZXdSZWYgPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIG92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcignYW5pbWF0aW9uZW5kJywgdGhpcy5hbmltYXRpb25FbmRIYW5kbGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiBvdmVybGF5IGRvZXNuJ3QgZXhpc3QsIGp1c3QgY2xlYW4gdXAgdGVtcGxhdGUgdmlld1xuICAgICAgICAgIGlmICh0aGlzLnRlbXBsYXRlVmlld1JlZikge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlVmlld1JlZiA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBmaWxlIGJyb3dzZXIgZGlhbG9nIGFuZCBwcm9jZXNzZXMgc2VsZWN0ZWQgZmlsZXMuXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGZpbGVzIGFyZSBwcm9jZXNzZWRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBicm93c2VyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNhdGFsb2cgPSB0aGlzLmZpbGVUeXBlKCk7XG4gICAgbGV0IHNlbGVjdGVkOiBGaWxlW10gPSBbXTtcbiAgICBsZXQgcmVqZWN0ZWQ6IEFYVXBsb2FkZXJGaWxlQ2hhbmdlRXZlbnRbJ3JlamVjdGVkJ107XG5cbiAgICBpZiAoY2F0YWxvZykge1xuICAgICAgY29uc3QgYWNjZXB0ID0gdGhpcy5hY2NlcHQoKSA/PyAoYXdhaXQgdGhpcy51cGxvYWRTZXJ2aWNlLmdldEFjY2VwdEF0dHJpYnV0ZShjYXRhbG9nKSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnVwbG9hZFNlcnZpY2UuY2hvb3NlRmlsZXMoe1xuICAgICAgICBmaWxlVHlwZTogY2F0YWxvZyxcbiAgICAgICAgbXVsdGlwbGU6IHRoaXMubXVsdGlwbGUoKSxcbiAgICAgICAgYWNjZXB0LFxuICAgICAgfSk7XG4gICAgICBzZWxlY3RlZCA9IHJlc3VsdC5hY2NlcHRlZDtcbiAgICAgIHJlamVjdGVkID0gcmVzdWx0LnJlamVjdGVkO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuZGlzYWJsZUJyb3dzZSgpKSB7XG4gICAgICBjb25zdCByZXF1ZXN0cyA9IGF3YWl0IHRoaXMudXBsb2FkU2VydmljZS5icm93c2Uoe1xuICAgICAgICBhY2NlcHQ6IHRoaXMuYWNjZXB0KCkgPz8gdW5kZWZpbmVkLFxuICAgICAgICBtdWx0aXBsZTogdGhpcy5tdWx0aXBsZSgpLFxuICAgICAgfSk7XG4gICAgICBzZWxlY3RlZCA9IHJlcXVlc3RzLm1hcCgocikgPT4gci5maWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnQVhVcGxvYWRlclpvbmUuYnJvd3NlcjogZmlsZVR5cGUgaXMgcmVxdWlyZWQgd2hlbiBkaXNhYmxlQnJvd3NlIGlzIGVuYWJsZWQgKHVzZSBheFVwbG9hZGVyQnJvd3NlSGFuZGxlKS4nLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID09PSAwICYmICEocmVqZWN0ZWQ/Lmxlbmd0aCA/PyAwKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN5bnRoZXRpY0V2ZW50ID0gbmV3IEV2ZW50KCdjaGFuZ2UnKTtcbiAgICBjb25zdCB0YXJnZXQgPSBPYmplY3QuY3JlYXRlKEV2ZW50VGFyZ2V0LnByb3RvdHlwZSkgYXMgRXZlbnRUYXJnZXQgJiB7IGZpbGVzOiBGaWxlW10gfTtcbiAgICB0YXJnZXQuZmlsZXMgPSBzZWxlY3RlZDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3ludGhldGljRXZlbnQsICd0YXJnZXQnLCB7IHZhbHVlOiB0YXJnZXQsIHdyaXRhYmxlOiBmYWxzZSB9KTtcblxuICAgIHRoaXMuZmlsZUNoYW5nZS5lbWl0KHtcbiAgICAgIGV2ZW50OiBzeW50aGV0aWNFdmVudCxcbiAgICAgIGZpbGVzOiBzZWxlY3RlZCxcbiAgICAgIHJlamVjdGVkLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuZGlzYWJsZUJyb3dzZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjYXRhbG9nXG4gICAgICA/IGF3YWl0IHRoaXMudXBsb2FkU2VydmljZS5hZGQoc2VsZWN0ZWQsIHsgZmlsZVR5cGU6IGNhdGFsb2cgfSlcbiAgICAgIDogYXdhaXQgdGhpcy51cGxvYWRTZXJ2aWNlLmFkZChzZWxlY3RlZCk7XG5cbiAgICBpZiAocmVxdWVzdHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5vbkNoYW5nZWQuZW1pdCh7XG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgcmVxdWVzdHMsXG4gICAgICAgIGlzVXNlckludGVyYWN0aW9uOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=","import { isPlatformBrowser } from '@angular/common';\nimport { Directive, ElementRef, PLATFORM_ID, inject } from '@angular/core';\nimport { findUploaderZoneFromDom } from './uploader-zone-host';\nimport { AXUploaderZoneDirective } from './uploader-zone.directive';\nimport * as i0 from \"@angular/core\";\n/**\n * Triggers the nearest {@link AXUploaderZoneDirective} file dialog on click.\n * Resolves the zone via DI when possible, otherwise walks the DOM (supports content projection).\n * @category Directives\n */\nexport class AXUploaderBrowseDirective {\n constructor() {\n this.elementRef = inject(ElementRef);\n this.platformID = inject(PLATFORM_ID);\n /** When browse + zone share the same host element. */\n this.zoneFromInjector = inject(AXUploaderZoneDirective, { optional: true, self: true });\n this.onClick = () => {\n void this.handleClick();\n };\n }\n ngOnInit() {\n if (!isPlatformBrowser(this.platformID)) {\n return;\n }\n const element = this.elementRef.nativeElement;\n element.addEventListener('click', this.onClick);\n if (element.dataset) {\n element.dataset['axUploaderBrowseHandle'] = 'true';\n }\n else {\n element.setAttribute('data-ax-uploader-browse-handle', 'true');\n }\n }\n ngOnDestroy() {\n if (isPlatformBrowser(this.platformID)) {\n this.elementRef.nativeElement.removeEventListener('click', this.onClick);\n }\n }\n resolveZone() {\n return (this.zoneFromInjector ??\n findUploaderZoneFromDom(this.elementRef.nativeElement) ??\n undefined);\n }\n async handleClick() {\n const zone = this.resolveZone();\n if (!zone) {\n console.warn('[axUploaderBrowseHandle] No axUploaderZone found. Place axUploaderBrowseHandle inside an axUploaderZone.');\n return;\n }\n await zone.browser();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXUploaderBrowseDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.3\", type: AXUploaderBrowseDirective, isStandalone: true, selector: \"[axUploaderBrowseHandle]\", ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXUploaderBrowseDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[axUploaderBrowseHandle]' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXItYnJvd3NlLWhhbmRsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvdXBsb2FkZXIvc3JjL2xpYi91cGxvYWRlci1icm93c2UtaGFuZGxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBcUIsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7QUFFcEU7Ozs7R0FJRztBQUVILE1BQU0sT0FBTyx5QkFBeUI7SUFEdEM7UUFFbUIsZUFBVSxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFDekQsZUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsRCxzREFBc0Q7UUFDckMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVuRixZQUFPLEdBQUcsR0FBUyxFQUFFO1lBQ3BDLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQztLQXVDSDtJQXJDQyxRQUFRO1FBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFDOUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNyRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxZQUFZLENBQUMsZ0NBQWdDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakUsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNFLENBQUM7SUFDSCxDQUFDO0lBRU8sV0FBVztRQUNqQixPQUFPLENBQ0wsSUFBSSxDQUFDLGdCQUFnQjtZQUNyQix1QkFBdUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztZQUN0RCxTQUFTLENBQ1YsQ0FBQztJQUNKLENBQUM7SUFFTyxLQUFLLENBQUMsV0FBVztRQUN2QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsT0FBTyxDQUFDLElBQUksQ0FDViwwR0FBMEcsQ0FDM0csQ0FBQztZQUNGLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdkIsQ0FBQzs4R0E5Q1UseUJBQXlCO2tHQUF6Qix5QkFBeUI7OzJGQUF6Qix5QkFBeUI7a0JBRHJDLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsMEJBQTBCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBQTEFURk9STV9JRCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaW5kVXBsb2FkZXJab25lRnJvbURvbSB9IGZyb20gJy4vdXBsb2FkZXItem9uZS1ob3N0JztcbmltcG9ydCB7IEFYVXBsb2FkZXJab25lRGlyZWN0aXZlIH0gZnJvbSAnLi91cGxvYWRlci16b25lLmRpcmVjdGl2ZSc7XG5cbi8qKlxuICogVHJpZ2dlcnMgdGhlIG5lYXJlc3Qge0BsaW5rIEFYVXBsb2FkZXJab25lRGlyZWN0aXZlfSBmaWxlIGRpYWxvZyBvbiBjbGljay5cbiAqIFJlc29sdmVzIHRoZSB6b25lIHZpYSBESSB3aGVuIHBvc3NpYmxlLCBvdGhlcndpc2Ugd2Fsa3MgdGhlIERPTSAoc3VwcG9ydHMgY29udGVudCBwcm9qZWN0aW9uKS5cbiAqIEBjYXRlZ29yeSBEaXJlY3RpdmVzXG4gKi9cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1theFVwbG9hZGVyQnJvd3NlSGFuZGxlXScgfSlcbmV4cG9ydCBjbGFzcyBBWFVwbG9hZGVyQnJvd3NlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSUQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICAvKiogV2hlbiBicm93c2UgKyB6b25lIHNoYXJlIHRoZSBzYW1lIGhvc3QgZWxlbWVudC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSB6b25lRnJvbUluamVjdG9yID0gaW5qZWN0KEFYVXBsb2FkZXJab25lRGlyZWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlLCBzZWxmOiB0cnVlIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgb25DbGljayA9ICgpOiB2b2lkID0+IHtcbiAgICB2b2lkIHRoaXMuaGFuZGxlQ2xpY2soKTtcbiAgfTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JRCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQ2xpY2spO1xuICAgIGlmIChlbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgIGVsZW1lbnQuZGF0YXNldFsnYXhVcGxvYWRlckJyb3dzZUhhbmRsZSddID0gJ3RydWUnO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1heC11cGxvYWRlci1icm93c2UtaGFuZGxlJywgJ3RydWUnKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlEKSkge1xuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQ2xpY2spO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVpvbmUoKTogQVhVcGxvYWRlclpvbmVEaXJlY3RpdmUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnpvbmVGcm9tSW5qZWN0b3IgPz9cbiAgICAgIGZpbmRVcGxvYWRlclpvbmVGcm9tRG9tKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSA/P1xuICAgICAgdW5kZWZpbmVkXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlQ2xpY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgem9uZSA9IHRoaXMucmVzb2x2ZVpvbmUoKTtcbiAgICBpZiAoIXpvbmUpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1theFVwbG9hZGVyQnJvd3NlSGFuZGxlXSBObyBheFVwbG9hZGVyWm9uZSBmb3VuZC4gUGxhY2UgYXhVcGxvYWRlckJyb3dzZUhhbmRsZSBpbnNpZGUgYW4gYXhVcGxvYWRlclpvbmUuJyxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHpvbmUuYnJvd3NlcigpO1xuICB9XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNkay11cGxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay91cGxvYWRlci9zcmMvYWNvcmV4LWNkay11cGxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
@@ -8,17 +8,17 @@ class AXVirtualScrollingItemDirective {
8
8
  get nativeElement() {
9
9
  return this.elementRef.nativeElement;
10
10
  }
11
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXVirtualScrollingItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
12
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: AXVirtualScrollingItemDirective, isStandalone: true, selector: "[axVirtualScrollingItem]", ngImport: i0 }); }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXVirtualScrollingItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
12
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.3", type: AXVirtualScrollingItemDirective, isStandalone: true, selector: "[axVirtualScrollingItem]", ngImport: i0 }); }
13
13
  }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXVirtualScrollingItemDirective, decorators: [{
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXVirtualScrollingItemDirective, decorators: [{
15
15
  type: Directive,
16
16
  args: [{ selector: '[axVirtualScrollingItem]' }]
17
17
  }] });
18
18
 
19
19
  class AXVirtualScrollingContainerDirective {
20
20
  constructor() {
21
- this.height = input.required(...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
21
+ this.height = input.required(...(ngDevMode ? [{ debugName: "height" }] : []));
22
22
  /** @ignore */
23
23
  this.observer = new IntersectionObserver(this.callBack.bind(this));
24
24
  this.ScrollEnd = output();
@@ -26,23 +26,23 @@ class AXVirtualScrollingContainerDirective {
26
26
  this.loading = false;
27
27
  this.container = inject(ElementRef);
28
28
  /** @ignore */
29
- this.children = contentChildren(AXVirtualScrollingItemDirective, ...(ngDevMode ? [{ debugName: "children" }] : /* istanbul ignore next */ []));
29
+ this.children = contentChildren(AXVirtualScrollingItemDirective, ...(ngDevMode ? [{ debugName: "children" }] : []));
30
30
  /** @ignore */
31
- this.firstCall = signal(false, ...(ngDevMode ? [{ debugName: "firstCall" }] : /* istanbul ignore next */ []));
31
+ this.firstCall = signal(false, ...(ngDevMode ? [{ debugName: "firstCall" }] : []));
32
32
  /** @ignore */
33
33
  this.lastChildElem = computed(() => {
34
34
  return this.children()[0]?.nativeElement;
35
- }, ...(ngDevMode ? [{ debugName: "lastChildElem" }] : /* istanbul ignore next */ []));
35
+ }, ...(ngDevMode ? [{ debugName: "lastChildElem" }] : []));
36
36
  /** @ignore */
37
37
  this.firstChildElem = computed(() => {
38
38
  return this.children()[this.children().length - 1]?.nativeElement;
39
- }, ...(ngDevMode ? [{ debugName: "firstChildElem" }] : /* istanbul ignore next */ []));
39
+ }, ...(ngDevMode ? [{ debugName: "firstChildElem" }] : []));
40
40
  /** @ignore */
41
41
  this.#eff2 = effect(() => {
42
42
  if (this.lastChildElem()) {
43
43
  this.observer.observe(this.lastChildElem());
44
44
  }
45
- }, ...(ngDevMode ? [{ debugName: "#eff2" }] : /* istanbul ignore next */ []));
45
+ }, ...(ngDevMode ? [{ debugName: "#eff2" }] : []));
46
46
  /** @ignore */
47
47
  this.#eff3 = effect(() => {
48
48
  if (this.firstChildElem() && !this.loading) {
@@ -53,7 +53,7 @@ class AXVirtualScrollingContainerDirective {
53
53
  });
54
54
  });
55
55
  }
56
- }, ...(ngDevMode ? [{ debugName: "#eff3" }] : /* istanbul ignore next */ []));
56
+ }, ...(ngDevMode ? [{ debugName: "#eff3" }] : []));
57
57
  this.#init = afterNextRender(() => {
58
58
  this.container.nativeElement.style.overflowY = 'auto';
59
59
  this.container.nativeElement.style.display = 'block';
@@ -76,13 +76,13 @@ class AXVirtualScrollingContainerDirective {
76
76
  get __hostClass() {
77
77
  return `${this.height()}`;
78
78
  }
79
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXVirtualScrollingContainerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
80
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.9", type: AXVirtualScrollingContainerDirective, isStandalone: true, selector: "[axVirtualScrollingContainer]", inputs: { height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { ScrollEnd: "ScrollEnd" }, host: { properties: { "style.height": "this.__hostClass" } }, queries: [{ propertyName: "children", predicate: AXVirtualScrollingItemDirective, isSignal: true }], ngImport: i0 }); }
79
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXVirtualScrollingContainerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
80
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.3", type: AXVirtualScrollingContainerDirective, isStandalone: true, selector: "[axVirtualScrollingContainer]", inputs: { height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { ScrollEnd: "ScrollEnd" }, host: { properties: { "style.height": "this.__hostClass" } }, queries: [{ propertyName: "children", predicate: AXVirtualScrollingItemDirective, isSignal: true }], ngImport: i0 }); }
81
81
  }
82
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXVirtualScrollingContainerDirective, decorators: [{
82
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXVirtualScrollingContainerDirective, decorators: [{
83
83
  type: Directive,
84
84
  args: [{ selector: '[axVirtualScrollingContainer]' }]
85
- }], propDecorators: { height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: true }] }], ScrollEnd: [{ type: i0.Output, args: ["ScrollEnd"] }], children: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => AXVirtualScrollingItemDirective), { isSignal: true }] }], __hostClass: [{
85
+ }], propDecorators: { __hostClass: [{
86
86
  type: HostBinding,
87
87
  args: ['style.height']
88
88
  }] } });
@@ -90,11 +90,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
90
90
  const COMPONENT = [AXVirtualScrollingContainerDirective, AXVirtualScrollingItemDirective];
91
91
  const MODULES = [];
92
92
  class AXVirtualScrollModule {
93
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXVirtualScrollModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
94
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: AXVirtualScrollModule, imports: [AXVirtualScrollingContainerDirective, AXVirtualScrollingItemDirective], exports: [AXVirtualScrollingContainerDirective, AXVirtualScrollingItemDirective] }); }
95
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXVirtualScrollModule, imports: [MODULES] }); }
93
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXVirtualScrollModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
94
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.3", ngImport: i0, type: AXVirtualScrollModule, imports: [AXVirtualScrollingContainerDirective, AXVirtualScrollingItemDirective], exports: [AXVirtualScrollingContainerDirective, AXVirtualScrollingItemDirective] }); }
95
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXVirtualScrollModule, imports: [MODULES] }); }
96
96
  }
97
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXVirtualScrollModule, decorators: [{
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXVirtualScrollModule, decorators: [{
98
98
  type: NgModule,
99
99
  args: [{
100
100
  imports: [...MODULES, ...COMPONENT],