@acorex/cdk 21.0.2-next.4 → 21.0.2-next.40

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 (53) hide show
  1. package/fesm2022/acorex-cdk-accordion.mjs +35 -35
  2. package/fesm2022/acorex-cdk-accordion.mjs.map +1 -1
  3. package/fesm2022/acorex-cdk-carousel.mjs +4 -4
  4. package/fesm2022/acorex-cdk-carousel.mjs.map +1 -1
  5. package/fesm2022/acorex-cdk-clipboard.mjs +7 -7
  6. package/fesm2022/acorex-cdk-clipboard.mjs.map +1 -1
  7. package/fesm2022/acorex-cdk-common.mjs +101 -101
  8. package/fesm2022/acorex-cdk-common.mjs.map +1 -1
  9. package/fesm2022/acorex-cdk-dom.mjs +3 -3
  10. package/fesm2022/acorex-cdk-double-click.mjs +5 -5
  11. package/fesm2022/acorex-cdk-double-click.mjs.map +1 -1
  12. package/fesm2022/acorex-cdk-drag-drop.mjs +68 -68
  13. package/fesm2022/acorex-cdk-drag-drop.mjs.map +1 -1
  14. package/fesm2022/acorex-cdk-drawer.mjs +35 -35
  15. package/fesm2022/acorex-cdk-drawer.mjs.map +1 -1
  16. package/fesm2022/acorex-cdk-focus-trap.mjs +19 -19
  17. package/fesm2022/acorex-cdk-focus-trap.mjs.map +1 -1
  18. package/fesm2022/acorex-cdk-full-screen.mjs +4 -4
  19. package/fesm2022/acorex-cdk-full-screen.mjs.map +1 -1
  20. package/fesm2022/acorex-cdk-input-mask.mjs +19 -13
  21. package/fesm2022/acorex-cdk-input-mask.mjs.map +1 -1
  22. package/fesm2022/acorex-cdk-list-navigation.mjs +17 -17
  23. package/fesm2022/acorex-cdk-list-navigation.mjs.map +1 -1
  24. package/fesm2022/acorex-cdk-outline.mjs +77 -66
  25. package/fesm2022/acorex-cdk-outline.mjs.map +1 -1
  26. package/fesm2022/acorex-cdk-overlay.mjs +16 -3
  27. package/fesm2022/acorex-cdk-overlay.mjs.map +1 -1
  28. package/fesm2022/acorex-cdk-pan-view.mjs +67 -49
  29. package/fesm2022/acorex-cdk-pan-view.mjs.map +1 -1
  30. package/fesm2022/acorex-cdk-resizable.mjs +46 -22
  31. package/fesm2022/acorex-cdk-resizable.mjs.map +1 -1
  32. package/fesm2022/acorex-cdk-selection.mjs +21 -21
  33. package/fesm2022/acorex-cdk-selection.mjs.map +1 -1
  34. package/fesm2022/acorex-cdk-sliding-item.mjs +11 -11
  35. package/fesm2022/acorex-cdk-sliding-item.mjs.map +1 -1
  36. package/fesm2022/acorex-cdk-sticky.mjs +3 -3
  37. package/fesm2022/acorex-cdk-uploader.mjs +298 -188
  38. package/fesm2022/acorex-cdk-uploader.mjs.map +1 -1
  39. package/fesm2022/acorex-cdk-virtual-scroll.mjs +17 -17
  40. package/fesm2022/acorex-cdk-virtual-scroll.mjs.map +1 -1
  41. package/fesm2022/acorex-cdk-wysiwyg.mjs +1 -1
  42. package/fesm2022/acorex-cdk-wysiwyg.mjs.map +1 -1
  43. package/fesm2022/acorex-cdk-z-index.mjs +4 -4
  44. package/fesm2022/acorex-cdk-z-index.mjs.map +1 -1
  45. package/package.json +3 -2
  46. package/types/acorex-cdk-drawer.d.ts +2 -0
  47. package/types/acorex-cdk-focus-trap.d.ts +2 -3
  48. package/types/acorex-cdk-input-mask.d.ts +1 -0
  49. package/types/acorex-cdk-outline.d.ts +1 -0
  50. package/types/acorex-cdk-overlay.d.ts +1 -0
  51. package/types/acorex-cdk-pan-view.d.ts +4 -0
  52. package/types/acorex-cdk-resizable.d.ts +2 -0
  53. package/types/acorex-cdk-uploader.d.ts +120 -110
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-cdk-uploader.mjs","sources":["../../../../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 { AXEvent } from '@acorex/cdk/common';\nimport { computed, signal } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\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 { AXFileService } from '@acorex/core/file';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, computed, 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} from './uploader.models';\n\n/**\n * Service for managing file uploads with drag-and-drop support, progress tracking, and dialog management.\n * @category Services\n */\n@Injectable({ providedIn: 'root' })\nexport class AXUploaderService {\n /**\n * Translation service for localized text.\n * @ignore\n */\n private translateService = inject(AXTranslationService);\n\n /**\n * File service for file operations.\n * @ignore\n */\n private fileService: AXFileService = inject(AXFileService);\n\n /**\n * Behavior subject for managing upload requests.\n * @ignore\n */\n private readonly _files$ = new BehaviorSubject<AXUploadRequest[]>([]);\n\n /**\n * Gets the files behavior subject for observing upload requests.\n */\n public readonly files = this._files$.asObservable();\n\n /**\n * Subject for file upload start events.\n */\n public readonly onFileUploadStart = new Subject<AXUploaderFileStartEvent>();\n\n /**\n * Subject for file upload complete events.\n */\n public readonly onFileUploadComplete = new Subject<AXUploaderFileCompleteEvent>();\n\n /**\n * Subject for all files upload complete events.\n */\n public readonly onFilesUploadComplete = new Subject<AXUploaderFilesCompleteEvent>();\n\n /**\n * Subject for file upload canceled events.\n */\n public readonly onFileUploadCanceled = new Subject<AXUploaderFileCancelEvent>();\n\n /**\n * Signal indicating if any upload has determined progress.\n */\n public readonly isAnyDetermined = computed(() => this._files$.value.some((file) => file.isDetermined()));\n\n /**\n * Observable for total estimated upload time.\n */\n public readonly totalEstimateTime = this._files$.pipe(\n map((files) => sumBy(files, (file) => (file.status() === 'inprogress' ? file.estimateTime() : 0))),\n );\n\n /**\n * Converts a File object to an AXUploadRequest.\n * @private\n */\n private convertFileToRequest(file: File): AXUploadRequest {\n return new AXUploadRequest(file);\n }\n\n /**\n * Starts uploading files that are in 'new' status.\n * @private\n */\n private 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\n /**\n * Binds event handlers to an upload request.\n * @private\n */\n private async bindEvents(c: AXUploadRequest) {\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 /**\n * Opens the file browser dialog and returns selected files as upload requests.\n * @param options - Configuration options for file selection\n * @returns Promise that resolves to an array of upload requests\n */\n async browse(options: { multiple?: boolean; accept?: string } = { multiple: false }): Promise<AXUploadRequest[]> {\n try {\n const files = await this.fileService.choose({ multiple: options?.multiple || false, accept: options.accept });\n if (files.length) {\n return this.add(files);\n }\n return [];\n } catch (error) {\n // It's good practice to log the error.\n console.error('File browse failed:', error);\n return [];\n }\n }\n\n /**\n * Adds files to the upload queue and starts the upload process.\n * @param files - Files to add to the upload queue\n * @returns Promise that resolves to an array of upload requests\n */\n async add(files: FileList | File[]): Promise<AXUploadRequest[]> {\n const list = Array.from(files).map((f) => this.convertFileToRequest(f));\n const newFiles = [...this._files$.value, ...list];\n this._files$.next(newFiles);\n this.startUpload();\n return list;\n }\n\n /**\n * Cancels all pending and in-progress uploads.\n */\n async cancelAll() {\n await Promise.all(this._files$.value.filter((c) => c.status() !== 'completed').map((c) => c.cancel()));\n }\n\n /**\n * Clears all completed uploads from the queue.\n */\n clearAll() {\n const remainingFiles = this._files$.value.filter((c) => c.status() === 'inprogress');\n this._files$.next(remainingFiles);\n }\n\n /**\n * Removes a specific upload request from the queue.\n * @param item - The upload request to remove\n */\n remove(item: AXUploadRequest) {\n const updatedFiles = this._files$.value.filter((c) => c !== item);\n this._files$.next(updatedFiles);\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 { AXUploaderChangedEvent, AXUploaderFileCompleteEvent, AXUploaderFilesCompleteEvent } from './uploader.models';\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 * 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<{ event: Event; files: File[] }>();\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\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 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 const files = Array.from(event.dataTransfer.files);\n\n // Emit simple file change event (like HTML input)\n this.fileChange.emit({ event, files });\n\n // Also emit the old onChanged event for backward compatibility\n const requests = await this.uploadService.add(event.dataTransfer.files);\n this.onChanged.emit({\n component: this,\n requests,\n isUserInteraction: true,\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 if (this.disableBrowse()) return;\n const files = await this.uploadService.browse({ accept: this.accept() ?? undefined, multiple: this.multiple() });\n\n if (files.length > 0) {\n // Create a synthetic event for consistency\n const syntheticEvent = new Event('change');\n const target = Object.create(EventTarget.prototype) as EventTarget & { files: File[] };\n target.files = files.map((r) => r.file);\n Object.defineProperty(syntheticEvent, 'target', { value: target, writable: false });\n\n // Emit simple file change event (like HTML input)\n this.fileChange.emit({\n event: syntheticEvent,\n files: files.map((r) => r.file),\n });\n\n // Also emit the old onChanged event for backward compatibility\n this.onChanged.emit({\n component: this,\n requests: files,\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 { AXUploaderZoneDirective } from './uploader-zone.directive';\n\n/**\n * A directive that provides browse functionality for file uploads.\n * When applied to an element, clicking it will trigger the file browser dialog.\n * @category Directives\n */\n@Directive({ selector: '[axUploaderBrowseHandle]' })\nexport class AXUploaderBrowseDirective implements OnInit, OnDestroy {\n /**\n * The uploader zone directive instance.\n * @ignore\n */\n private uploaderZone = inject(AXUploaderZoneDirective);\n\n /**\n * The element reference for the directive host.\n * @ignore\n */\n private elementRef: ElementRef<HTMLElement> = inject(ElementRef<HTMLElement>);\n\n /**\n * Platform ID for browser detection.\n * @ignore\n */\n private platformID = inject(PLATFORM_ID);\n\n /**\n * Initializes the directive by adding click event listener and data attribute.\n */\n ngOnInit() {\n if (isPlatformBrowser(this.platformID) && this.elementRef?.nativeElement) {\n const element = this.elementRef.nativeElement;\n element.addEventListener('click', this.handleClick.bind(this));\n // Use setAttribute for SSR compatibility\n if (element.dataset) {\n element.dataset['axUploaderBrowseHandle'] = 'true';\n } else {\n element.setAttribute('data-ax-uploader-browse-handle', 'true');\n }\n }\n }\n\n /**\n * Cleans up the directive by removing event listeners.\n */\n ngOnDestroy(): void {\n if (isPlatformBrowser(this.platformID) && this.elementRef.nativeElement) {\n this.elementRef.nativeElement.removeEventListener('click', this.handleClick.bind(this));\n }\n }\n\n /**\n * Handles the click event to trigger file browser.\n * @private\n */\n private async handleClick() {\n await this.uploaderZone.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":["../../../../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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"}
@@ -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.1.3", ngImport: i0, type: AXVirtualScrollingItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
12
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.3", type: AXVirtualScrollingItemDirective, isStandalone: true, selector: "[axVirtualScrollingItem]", ngImport: i0 }); }
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 }); }
13
13
  }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXVirtualScrollingItemDirective, decorators: [{
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", 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" }] : []));
21
+ this.height = input.required(...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
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" }] : []));
29
+ this.children = contentChildren(AXVirtualScrollingItemDirective, ...(ngDevMode ? [{ debugName: "children" }] : /* istanbul ignore next */ []));
30
30
  /** @ignore */
31
- this.firstCall = signal(false, ...(ngDevMode ? [{ debugName: "firstCall" }] : []));
31
+ this.firstCall = signal(false, ...(ngDevMode ? [{ debugName: "firstCall" }] : /* istanbul ignore next */ []));
32
32
  /** @ignore */
33
33
  this.lastChildElem = computed(() => {
34
34
  return this.children()[0]?.nativeElement;
35
- }, ...(ngDevMode ? [{ debugName: "lastChildElem" }] : []));
35
+ }, ...(ngDevMode ? [{ debugName: "lastChildElem" }] : /* istanbul ignore next */ []));
36
36
  /** @ignore */
37
37
  this.firstChildElem = computed(() => {
38
38
  return this.children()[this.children().length - 1]?.nativeElement;
39
- }, ...(ngDevMode ? [{ debugName: "firstChildElem" }] : []));
39
+ }, ...(ngDevMode ? [{ debugName: "firstChildElem" }] : /* istanbul ignore next */ []));
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" }] : []));
45
+ }, ...(ngDevMode ? [{ debugName: "#eff2" }] : /* istanbul ignore next */ []));
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" }] : []));
56
+ }, ...(ngDevMode ? [{ debugName: "#eff3" }] : /* istanbul ignore next */ []));
57
57
  this.#init = afterNextRender(() => {
58
58
  this.container.nativeElement.style.overflowY = 'auto';
59
59
  this.container.nativeElement.style.display = 'block';
@@ -76,10 +76,10 @@ 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.1.3", ngImport: i0, type: AXVirtualScrollingContainerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
80
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.1.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 }); }
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 }); }
81
81
  }
82
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXVirtualScrollingContainerDirective, decorators: [{
82
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXVirtualScrollingContainerDirective, decorators: [{
83
83
  type: Directive,
84
84
  args: [{ selector: '[axVirtualScrollingContainer]' }]
85
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: [{
@@ -90,11 +90,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", 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.1.3", ngImport: i0, type: AXVirtualScrollModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
94
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: AXVirtualScrollModule, imports: [AXVirtualScrollingContainerDirective, AXVirtualScrollingItemDirective], exports: [AXVirtualScrollingContainerDirective, AXVirtualScrollingItemDirective] }); }
95
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXVirtualScrollModule, imports: [MODULES] }); }
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] }); }
96
96
  }
97
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXVirtualScrollModule, decorators: [{
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXVirtualScrollModule, decorators: [{
98
98
  type: NgModule,
99
99
  args: [{
100
100
  imports: [...MODULES, ...COMPONENT],
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-cdk-virtual-scroll.mjs","sources":["../../../../packages/cdk/virtual-scroll/src/lib/virtual-scrolling-item/virtual-scrolling-item.directive.ts","../../../../packages/cdk/virtual-scroll/src/lib/virtual-scrolling-contianer/virtual-scrolling-contianer.directive.ts","../../../../packages/cdk/virtual-scroll/src/lib/virtual-scroll.module.ts","../../../../packages/cdk/virtual-scroll/src/acorex-cdk-virtual-scroll.ts"],"sourcesContent":["import { Directive, ElementRef, inject } from '@angular/core';\n\n@Directive({ selector: '[axVirtualScrollingItem]' })\nexport class AXVirtualScrollingItemDirective {\n private elementRef: ElementRef<HTMLElement> = inject(ElementRef);\n\n public get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n}\n","import {\n afterNextRender,\n computed,\n contentChildren,\n Directive,\n effect,\n ElementRef,\n HostBinding,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { AXVirtualScrollingItemDirective } from '../virtual-scrolling-item/virtual-scrolling-item.directive';\n\n@Directive({ selector: '[axVirtualScrollingContainer]' })\nexport class AXVirtualScrollingContainerDirective {\n height = input.required<string>();\n\n /** @ignore */\n protected observer = new IntersectionObserver(this.callBack.bind(this));\n\n ScrollEnd = output();\n\n /** @ignore */\n loading = false;\n\n container = inject(ElementRef);\n\n /** @ignore */\n protected children = contentChildren(AXVirtualScrollingItemDirective);\n\n /** @ignore */\n protected firstCall = signal(false);\n\n /** @ignore */\n protected lastChildElem = computed<Element | null>(() => {\n return this.children()[0]?.nativeElement;\n });\n\n /** @ignore */\n protected firstChildElem = computed<Element | null>(() => {\n return this.children()[this.children().length - 1]?.nativeElement;\n });\n\n /** @ignore */\n #eff2 = effect(() => {\n if (this.lastChildElem()) {\n this.observer.observe(this.lastChildElem());\n }\n });\n\n /** @ignore */\n #eff3 = effect(() => {\n if (this.firstChildElem() && !this.loading) {\n setTimeout(() => {\n this.container.nativeElement.scrollTo({\n top: this.container.nativeElement.scrollHeight,\n behavior: 'instant',\n });\n });\n }\n });\n\n #init = afterNextRender(() => {\n (this.container.nativeElement as HTMLElement).style.overflowY = 'auto';\n (this.container.nativeElement as HTMLElement).style.display = 'block';\n });\n\n /** @ignore */\n protected callBack(entries: IntersectionObserverEntry[]) {\n if (entries[0].isIntersecting && this.firstCall()) {\n this.ScrollEnd.emit();\n this.loading = true;\n }\n this.loading = false;\n this.firstCall.set(true);\n }\n\n @HostBinding('style.height')\n get __hostClass(): string {\n return `${this.height()}`;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { AXVirtualScrollingContainerDirective } from './virtual-scrolling-contianer/virtual-scrolling-contianer.directive';\nimport { AXVirtualScrollingItemDirective } from './virtual-scrolling-item/virtual-scrolling-item.directive';\n\nconst COMPONENT = [AXVirtualScrollingContainerDirective, AXVirtualScrollingItemDirective];\n\nconst MODULES = [];\n\n@NgModule({\n imports: [...MODULES, ...COMPONENT],\n exports: [...COMPONENT],\n providers: [],\n})\nexport class AXVirtualScrollModule {}\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-virtual-scroll.mjs","sources":["../../../../packages/cdk/virtual-scroll/src/lib/virtual-scrolling-item/virtual-scrolling-item.directive.ts","../../../../packages/cdk/virtual-scroll/src/lib/virtual-scrolling-contianer/virtual-scrolling-contianer.directive.ts","../../../../packages/cdk/virtual-scroll/src/lib/virtual-scroll.module.ts","../../../../packages/cdk/virtual-scroll/src/acorex-cdk-virtual-scroll.ts"],"sourcesContent":["import { Directive, ElementRef, inject } from '@angular/core';\n\n@Directive({ selector: '[axVirtualScrollingItem]' })\nexport class AXVirtualScrollingItemDirective {\n private elementRef: ElementRef<HTMLElement> = inject(ElementRef);\n\n public get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n}\n","import {\n afterNextRender,\n computed,\n contentChildren,\n Directive,\n effect,\n ElementRef,\n HostBinding,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { AXVirtualScrollingItemDirective } from '../virtual-scrolling-item/virtual-scrolling-item.directive';\n\n@Directive({ selector: '[axVirtualScrollingContainer]' })\nexport class AXVirtualScrollingContainerDirective {\n height = input.required<string>();\n\n /** @ignore */\n protected observer = new IntersectionObserver(this.callBack.bind(this));\n\n ScrollEnd = output();\n\n /** @ignore */\n loading = false;\n\n container = inject(ElementRef);\n\n /** @ignore */\n protected children = contentChildren(AXVirtualScrollingItemDirective);\n\n /** @ignore */\n protected firstCall = signal(false);\n\n /** @ignore */\n protected lastChildElem = computed<Element | null>(() => {\n return this.children()[0]?.nativeElement;\n });\n\n /** @ignore */\n protected firstChildElem = computed<Element | null>(() => {\n return this.children()[this.children().length - 1]?.nativeElement;\n });\n\n /** @ignore */\n #eff2 = effect(() => {\n if (this.lastChildElem()) {\n this.observer.observe(this.lastChildElem());\n }\n });\n\n /** @ignore */\n #eff3 = effect(() => {\n if (this.firstChildElem() && !this.loading) {\n setTimeout(() => {\n this.container.nativeElement.scrollTo({\n top: this.container.nativeElement.scrollHeight,\n behavior: 'instant',\n });\n });\n }\n });\n\n #init = afterNextRender(() => {\n (this.container.nativeElement as HTMLElement).style.overflowY = 'auto';\n (this.container.nativeElement as HTMLElement).style.display = 'block';\n });\n\n /** @ignore */\n protected callBack(entries: IntersectionObserverEntry[]) {\n if (entries[0].isIntersecting && this.firstCall()) {\n this.ScrollEnd.emit();\n this.loading = true;\n }\n this.loading = false;\n this.firstCall.set(true);\n }\n\n @HostBinding('style.height')\n get __hostClass(): string {\n return `${this.height()}`;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { AXVirtualScrollingContainerDirective } from './virtual-scrolling-contianer/virtual-scrolling-contianer.directive';\nimport { AXVirtualScrollingItemDirective } from './virtual-scrolling-item/virtual-scrolling-item.directive';\n\nconst COMPONENT = [AXVirtualScrollingContainerDirective, AXVirtualScrollingItemDirective];\n\nconst MODULES = [];\n\n@NgModule({\n imports: [...MODULES, ...COMPONENT],\n exports: [...COMPONENT],\n providers: [],\n})\nexport class AXVirtualScrollModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { signal, inject, PLATFORM_ID } from '@angular/core';
3
3
 
4
4
  class AXWysiwyg {
5
5
  constructor() {
6
- this.quillObj = signal(null, ...(ngDevMode ? [{ debugName: "quillObj" }] : []));
6
+ this.quillObj = signal(null, ...(ngDevMode ? [{ debugName: "quillObj" }] : /* istanbul ignore next */ []));
7
7
  this.platformId = inject(PLATFORM_ID);
8
8
  }
9
9
  async init(container, option) {
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-cdk-wysiwyg.mjs","sources":["../../../../packages/cdk/wysiwyg/src/wysiwyg.class.ts","../../../../packages/cdk/wysiwyg/src/acorex-cdk-wysiwyg.ts"],"sourcesContent":["import { isPlatformBrowser } from '@angular/common';\nimport { inject, PLATFORM_ID, signal } from '@angular/core';\nimport type Quill from 'quill/quill.d.ts';\nimport type { QuillOptions, Range } from 'quill/quill.d.ts';\n\nexport type Wysiwyg = Quill;\nexport type WysiwygOptions = QuillOptions;\n\nexport class AXWysiwyg {\n quillObj = signal<Wysiwyg | null>(null);\n\n private platformId = inject(PLATFORM_ID);\n\n async init(container: HTMLElement | string, option?: WysiwygOptions) {\n if (!isPlatformBrowser(this.platformId)) return;\n await import('quill').then((e) => {\n const wysiwygObject = new e.default(container, option);\n this.quillObj.set(wysiwygObject);\n });\n }\n\n bold(value: boolean) {\n this.quillObj().format('bold', value);\n }\n\n italic(value: boolean) {\n this.quillObj().format('italic', value);\n }\n\n underLine(value: boolean) {\n this.quillObj().format('underline', value);\n }\n\n strike(value: boolean) {\n this.quillObj().format('strike', value);\n }\n\n color(value: string) {\n this.quillObj().format('color', value);\n }\n\n header(value: number) {\n this.quillObj().format('header', value);\n }\n\n list(value: 'ordered' | 'bullet' | '') {\n this.quillObj().format('list', value);\n }\n\n align(value: 'center' | 'right' | 'left' | 'justify') {\n if (value === 'left') {\n this.quillObj().format('align', '');\n } else {\n this.quillObj().format('align', value);\n }\n }\n\n direction(value: 'rtl' | 'ltr') {\n this.quillObj().format('direction', value);\n }\n\n fontSize(value: 'small' | false | 'large' | 'huge', range: Range) {\n this.quillObj().formatText(range.index, range.length, 'size', value);\n }\n\n get HTMLoutput() {\n return this.quillObj().root.innerHTML;\n }\n\n undo() {\n this.quillObj().history.undo();\n }\n\n redo() {\n this.quillObj().history.redo();\n }\n\n background(value: string) {\n this.quillObj().format('background', value);\n }\n\n addImage(value: string) {\n const range = this.quillObj().getSelection();\n const currentIndex = range?.index;\n this.quillObj().insertEmbed(currentIndex, 'image', value);\n }\n\n focus() {\n this.quillObj().focus();\n }\n\n blur() {\n this.quillObj().blur();\n }\n\n codeBlock(range: Range, status: boolean) {\n if (!range) return;\n this.quillObj().formatLine(range.index, range.length, 'code-block', status);\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-wysiwyg.mjs","sources":["../../../../packages/cdk/wysiwyg/src/wysiwyg.class.ts","../../../../packages/cdk/wysiwyg/src/acorex-cdk-wysiwyg.ts"],"sourcesContent":["import { isPlatformBrowser } from '@angular/common';\nimport { inject, PLATFORM_ID, signal } from '@angular/core';\nimport type Quill from 'quill/quill.d.ts';\nimport type { QuillOptions, Range } from 'quill/quill.d.ts';\n\nexport type Wysiwyg = Quill;\nexport type WysiwygOptions = QuillOptions;\n\nexport class AXWysiwyg {\n quillObj = signal<Wysiwyg | null>(null);\n\n private platformId = inject(PLATFORM_ID);\n\n async init(container: HTMLElement | string, option?: WysiwygOptions) {\n if (!isPlatformBrowser(this.platformId)) return;\n await import('quill').then((e) => {\n const wysiwygObject = new e.default(container, option);\n this.quillObj.set(wysiwygObject);\n });\n }\n\n bold(value: boolean) {\n this.quillObj().format('bold', value);\n }\n\n italic(value: boolean) {\n this.quillObj().format('italic', value);\n }\n\n underLine(value: boolean) {\n this.quillObj().format('underline', value);\n }\n\n strike(value: boolean) {\n this.quillObj().format('strike', value);\n }\n\n color(value: string) {\n this.quillObj().format('color', value);\n }\n\n header(value: number) {\n this.quillObj().format('header', value);\n }\n\n list(value: 'ordered' | 'bullet' | '') {\n this.quillObj().format('list', value);\n }\n\n align(value: 'center' | 'right' | 'left' | 'justify') {\n if (value === 'left') {\n this.quillObj().format('align', '');\n } else {\n this.quillObj().format('align', value);\n }\n }\n\n direction(value: 'rtl' | 'ltr') {\n this.quillObj().format('direction', value);\n }\n\n fontSize(value: 'small' | false | 'large' | 'huge', range: Range) {\n this.quillObj().formatText(range.index, range.length, 'size', value);\n }\n\n get HTMLoutput() {\n return this.quillObj().root.innerHTML;\n }\n\n undo() {\n this.quillObj().history.undo();\n }\n\n redo() {\n this.quillObj().history.redo();\n }\n\n background(value: string) {\n this.quillObj().format('background', value);\n }\n\n addImage(value: string) {\n const range = this.quillObj().getSelection();\n const currentIndex = range?.index;\n this.quillObj().insertEmbed(currentIndex, 'image', value);\n }\n\n focus() {\n this.quillObj().focus();\n }\n\n blur() {\n this.quillObj().blur();\n }\n\n codeBlock(range: Range, status: boolean) {\n if (!range) return;\n this.quillObj().formatLine(range.index, range.length, 'code-block', status);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ class AXZindexDirective {
6
6
  constructor() {
7
7
  this.el = inject(ElementRef);
8
8
  this.z = inject(AXZIndexService);
9
- this.token = signal(null, ...(ngDevMode ? [{ debugName: "token" }] : []));
9
+ this.token = signal(null, ...(ngDevMode ? [{ debugName: "token" }] : /* istanbul ignore next */ []));
10
10
  this.#init = afterNextRender(() => {
11
11
  this.token.set(this.z.acquire());
12
12
  this.el.nativeElement.style.zIndex = String(this.token().zIndex);
@@ -16,10 +16,10 @@ class AXZindexDirective {
16
16
  ngOnDestroy() {
17
17
  this.z.release(this.token());
18
18
  }
19
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXZindexDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
20
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.3", type: AXZindexDirective, isStandalone: true, selector: "[axZindex]", exportAs: ["axZindex"], ngImport: i0 }); }
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXZindexDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
20
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: AXZindexDirective, isStandalone: true, selector: "[axZindex]", exportAs: ["axZindex"], ngImport: i0 }); }
21
21
  }
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXZindexDirective, decorators: [{
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXZindexDirective, decorators: [{
23
23
  type: Directive,
24
24
  args: [{
25
25
  selector: '[axZindex]',
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-cdk-z-index.mjs","sources":["../../../../packages/cdk/z-index/src/lib/z-index.directive.ts","../../../../packages/cdk/z-index/src/acorex-cdk-z-index.ts"],"sourcesContent":["import { AXZIndexService, AXZToken } from '@acorex/core/z-index';\nimport { afterNextRender, Directive, ElementRef, inject, OnDestroy, signal } from '@angular/core';\n@Directive({\n selector: '[axZindex]',\n exportAs: 'axZindex',\n})\nexport class AXZindexDirective implements OnDestroy {\n private el = inject<ElementRef<HTMLElement>>(ElementRef);\n private z = inject(AXZIndexService);\n\n private token = signal<AXZToken>(null);\n\n #init = afterNextRender(() => {\n this.token.set(this.z.acquire());\n this.el.nativeElement.style.zIndex = String(this.token().zIndex);\n });\n\n ngOnDestroy() {\n this.z.release(this.token());\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAMa,iBAAiB,CAAA;AAJ9B,IAAA,WAAA,GAAA;AAKU,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAA0B,UAAU,CAAC;AAChD,QAAA,IAAA,CAAA,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC;AAE3B,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAW,IAAI,iDAAC;AAEtC,QAAA,IAAA,CAAA,KAAK,GAAG,eAAe,CAAC,MAAK;AAC3B,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAChC,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC;AAClE,QAAA,CAAC,CAAC;AAKH,IAAA;AARC,IAAA,KAAK;IAKL,WAAW,GAAA;QACT,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC9B;8GAbW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,QAAQ,EAAE,UAAU;AACrB,iBAAA;;;ACLD;;AAEG;;;;"}
1
+ {"version":3,"file":"acorex-cdk-z-index.mjs","sources":["../../../../packages/cdk/z-index/src/lib/z-index.directive.ts","../../../../packages/cdk/z-index/src/acorex-cdk-z-index.ts"],"sourcesContent":["import { AXZIndexService, AXZToken } from '@acorex/core/z-index';\nimport { afterNextRender, Directive, ElementRef, inject, OnDestroy, signal } from '@angular/core';\n@Directive({\n selector: '[axZindex]',\n exportAs: 'axZindex',\n})\nexport class AXZindexDirective implements OnDestroy {\n private el = inject<ElementRef<HTMLElement>>(ElementRef);\n private z = inject(AXZIndexService);\n\n private token = signal<AXZToken>(null);\n\n #init = afterNextRender(() => {\n this.token.set(this.z.acquire());\n this.el.nativeElement.style.zIndex = String(this.token().zIndex);\n });\n\n ngOnDestroy() {\n this.z.release(this.token());\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAMa,iBAAiB,CAAA;AAJ9B,IAAA,WAAA,GAAA;AAKU,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAA0B,UAAU,CAAC;AAChD,QAAA,IAAA,CAAA,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC;AAE3B,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAW,IAAI,4EAAC;AAEtC,QAAA,IAAA,CAAA,KAAK,GAAG,eAAe,CAAC,MAAK;AAC3B,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAChC,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC;AAClE,QAAA,CAAC,CAAC;AAKH,IAAA;AARC,IAAA,KAAK;IAKL,WAAW,GAAA;QACT,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC9B;8GAbW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,QAAQ,EAAE,UAAU;AACrB,iBAAA;;;ACLD;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@acorex/cdk",
3
- "version": "21.0.2-next.4",
3
+ "version": "21.0.2-next.40",
4
4
  "peerDependencies": {
5
- "@acorex/core": "21.0.2-next.4",
5
+ "@acorex/core": "21.0.2-next.40",
6
6
  "quill": ">=2.0.2",
7
7
  "qrcode": ">=1.5.4",
8
8
  "swiper": ">=11.1.15",
@@ -116,6 +116,7 @@
116
116
  "default": "./fesm2022/acorex-cdk-z-index.mjs"
117
117
  }
118
118
  },
119
+ "type": "module",
119
120
  "dependencies": {
120
121
  "tslib": "^2.3.0"
121
122
  }
@@ -11,9 +11,11 @@ declare class AXDrawerItemDirective implements OnDestroy {
11
11
  private parent;
12
12
  private platformID;
13
13
  private zIndexService;
14
+ private localeService;
14
15
  private zToken;
15
16
  private collapseState;
16
17
  private resizeObserver;
18
+ private readonly isRtl;
17
19
  collapseStateChanged: _angular_core.OutputEmitterRef<boolean>;
18
20
  location: _angular_core.ModelSignal<AXDrawerLocation>;
19
21
  collapsed: _angular_core.ModelSignal<boolean>;
@@ -3,17 +3,16 @@ import { OnDestroy } from '@angular/core';
3
3
 
4
4
  declare class AXFocusTrapDirective implements OnDestroy {
5
5
  #private;
6
+ arrowNavigation: i0.InputSignal<boolean>;
6
7
  private el;
7
8
  private focusableElements;
8
- private firstElement;
9
- private lastElement;
10
9
  private nativeElement;
11
10
  private observer;
12
11
  ngOnDestroy(): void;
13
12
  private setFocusableElements;
14
13
  handleKeyboardEvent(event: KeyboardEvent): void;
15
14
  static ɵfac: i0.ɵɵFactoryDeclaration<AXFocusTrapDirective, never>;
16
- static ɵdir: i0.ɵɵDirectiveDeclaration<AXFocusTrapDirective, "[axFocusTrap]", never, {}, {}, never, never, true, never>;
15
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AXFocusTrapDirective, "[axFocusTrap]", never, { "arrowNavigation": { "alias": "axFocusTrapArrowNavigation"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
17
16
  }
18
17
 
19
18
  export { AXFocusTrapDirective };
@@ -35,6 +35,7 @@ type AXMaskTokens = {
35
35
  declare class AXInputMaskDirective {
36
36
  #private;
37
37
  private elm;
38
+ private platformId;
38
39
  private maskaJs;
39
40
  /**
40
41
  * The mode of input masking to apply.
@@ -14,6 +14,7 @@ declare class AXOutlineContainerDirective implements OnDestroy, AfterViewInit {
14
14
  #private;
15
15
  private zone;
16
16
  private platformId;
17
+ private document;
17
18
  private el;
18
19
  private unsubscriber;
19
20
  private clipboardService;
@@ -120,6 +120,7 @@ declare class AXOverlayService {
120
120
  * Positions the overlay container relative to the anchor element.
121
121
  */
122
122
  private positionOverlay;
123
+ private addHostClass;
123
124
  static ɵfac: i0.ɵɵFactoryDeclaration<AXOverlayService, never>;
124
125
  static ɵprov: i0.ɵɵInjectableDeclaration<AXOverlayService>;
125
126
  }
@@ -13,6 +13,8 @@ declare class AXPanViewDirective implements OnDestroy {
13
13
  private startY;
14
14
  private pointerDown;
15
15
  private wrapper;
16
+ private readonly wheelListener;
17
+ private static readonly WHEEL_PAN_FACTOR;
16
18
  zoomStep: _angular_core.InputSignal<number>;
17
19
  minZoom: _angular_core.InputSignal<number>;
18
20
  maxZoom: _angular_core.InputSignal<number>;
@@ -37,6 +39,8 @@ declare class AXPanViewDirective implements OnDestroy {
37
39
  private handlePointerDown;
38
40
  private handlePointerMove;
39
41
  private handlePointerUp;
42
+ private handleWheel;
43
+ private getWheelDelta;
40
44
  private handleZoomChange;
41
45
  private sizeChanged;
42
46
  private setFitContentScale;
@@ -43,6 +43,8 @@ declare class AXResizableDirective implements AfterViewInit, OnDestroy {
43
43
  ngAfterViewInit(): void;
44
44
  ngOnDestroy(): void;
45
45
  private setupResizableState;
46
+ private applyWidthFromModel;
47
+ private applyElementWidth;
46
48
  private createResizeHandle;
47
49
  private applyHandleStyles;
48
50
  private updateHandlePosition;