@acorex/components 22.0.0-next.7 → 22.0.0-next.8

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.
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-components-file-viewer.mjs","sources":["../../../../packages/components/file-viewer/src/lib/file-viewer.service.ts","../../../../packages/components/file-viewer/src/lib/resolve-file-viewer-file-type.ts","../../../../packages/components/file-viewer/src/lib/file-viewer-slide/file-viewer-slide.component.ts","../../../../packages/components/file-viewer/src/lib/file-viewer-thumb-preview/file-viewer-thumb-preview.component.ts","../../../../packages/components/file-viewer/src/lib/file-viewer-container/file-viewer-container.component.ts","../../../../packages/components/file-viewer/src/lib/file-viewer-container/file-viewer-container.component.html","../../../../packages/components/file-viewer/src/lib/file-viewer-gallery.service.ts","../../../../packages/components/file-viewer/src/lib/file-types/file-viewer-file-types.ts","../../../../packages/components/file-viewer/src/lib/provide-file-viewer.ts","../../../../packages/components/file-viewer/src/lib/file-viewer-header-placeholder/file-viewer-header-placeholder.component.ts","../../../../packages/components/file-viewer/src/lib/file-viewer-thumbnails/file-viewer-thumbnails.component.ts","../../../../packages/components/file-viewer/src/lib/viewers/image-viewer.component.ts","../../../../packages/components/file-viewer/src/lib/viewers/video-viewer.component.ts","../../../../packages/components/file-viewer/src/lib/viewers/audio-viewer.component.ts","../../../../packages/components/file-viewer/src/lib/viewers/pdf-viewer.component.ts","../../../../packages/components/file-viewer/src/lib/viewers/file-fallback-viewer.component.ts","../../../../packages/components/file-viewer/src/acorex-components-file-viewer.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\nimport type { AXFileViewerItem } from './file-viewer.types';\n\n/** Carousel state shared between container, slides and thumbnails. Provided per-container. */\n@Injectable()\nexport class AXFileViewerService {\n readonly items = signal<AXFileViewerItem[]>([]);\n readonly selectedIndex = signal(0);\n\n private readonly urlCache = new Map<string, string>();\n\n /** Resolve a potentially lazy URL — caches the result. */\n async resolveUrl(item: AXFileViewerItem, key: 'url' | 'thumbnailUrl'): Promise<string | undefined> {\n const raw = item[key];\n if (!raw) {\n return undefined;\n }\n const cacheKey = `${item.id}:${key}`;\n const cached = this.urlCache.get(cacheKey);\n if (cached) {\n return cached;\n }\n const resolved = typeof raw === 'function' ? await raw() : raw;\n this.urlCache.set(cacheKey, resolved);\n return resolved;\n }\n}\n","import type { AXFileTypeExtensionHint } from '@acorex/core/file';\nimport type { AXFileViewerItem } from './file-viewer.types';\n\nconst MIME_PREFIX_MAP: Record<string, string> = {\n 'image/': 'image',\n 'video/': 'video',\n 'audio/': 'audio',\n 'application/pdf': 'document',\n};\n\n/** Infers a file-type catalog name from the item. */\nexport function resolveFileViewerFileType(item: AXFileViewerItem): string {\n if (item.fileType) {\n return item.fileType;\n }\n if (item.mimeType) {\n const mime = item.mimeType.toLowerCase();\n for (const [prefix, name] of Object.entries(MIME_PREFIX_MAP)) {\n if (mime.startsWith(prefix) || mime === prefix) {\n return name;\n }\n }\n }\n if (item.extension) {\n const ext = item.extension.replace(/^\\./, '').toLowerCase();\n if (['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg'].includes(ext)) return 'image';\n if (['mp4', 'webm', 'ogg'].includes(ext)) return 'video';\n if (['mp3', 'wav', 'm4a'].includes(ext)) return 'audio';\n if (ext === 'pdf') return 'document';\n }\n return 'file';\n}\n\n/** Builds an extension hint from item metadata. */\nexport function buildFileViewerExtensionHint(item: AXFileViewerItem): AXFileTypeExtensionHint | undefined {\n if (!item.mimeType && !item.extension) {\n return undefined;\n }\n return {\n mimeType: item.mimeType,\n extensionName: item.extension,\n };\n}\n","import { AXFileTypeRendererOutletComponent } from '@acorex/core/file';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, TemplateRef, Type } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type {\n AXFileViewerFallbackContent,\n AXFileViewerFallbackContentInputs,\n AXFileViewerItem,\n AXFileViewerViewPayload,\n} from '../file-viewer.types';\nimport { buildFileViewerExtensionHint, resolveFileViewerFileType } from '../resolve-file-viewer-file-type';\n\n@Component({\n selector: 'ax-file-viewer-slide',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgComponentOutlet, NgTemplateOutlet, AXFileTypeRendererOutletComponent],\n template: `\n @if (useCustomFallback()) {\n <div class=\"ax-file-viewer-slide__custom\">\n @if (fallbackTemplateContent(); as template) {\n <ng-container *ngTemplateOutlet=\"template; context: fallbackContentContext()\" />\n } @else if (fallbackComponentContent(); as component) {\n <ng-container *ngComponentOutlet=\"component; inputs: fallbackComponentInputs()\" />\n }\n </div>\n } @else {\n <ax-file-type-renderer [fileType]=\"fileTypeName()\" [payload]=\"viewPayload()\" [extensionHint]=\"extensionHint()\" />\n }\n `,\n styles: `\n :host {\n display: flex;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n align-items: stretch;\n justify-content: stretch;\n user-select: none;\n box-sizing: border-box;\n }\n\n .ax-file-viewer-slide__custom {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n box-sizing: border-box;\n }\n `,\n})\nexport class AXFileViewerSlideComponent {\n readonly item = input.required<AXFileViewerItem>();\n readonly index = input.required<number>();\n /** Component or template replacing the built-in fallback viewer for `file` type items. */\n readonly fallbackContent = input<AXFileViewerFallbackContent | null>(null);\n /** Inputs for {@link fallbackContent} when it is a component. */\n readonly fallbackContentInputs = input<AXFileViewerFallbackContentInputs>({});\n /** Context data exposed as `$implicit` to fallback templates. */\n readonly fallbackContentData = input<unknown>();\n\n private readonly service = inject(AXFileViewerService);\n\n readonly fileTypeName = computed(() => resolveFileViewerFileType(this.item()));\n\n readonly extensionHint = computed(() => buildFileViewerExtensionHint(this.item()));\n\n readonly viewPayload = computed<AXFileViewerViewPayload>(() => ({\n item: this.item(),\n index: this.index(),\n active: this.service.selectedIndex() === this.index(),\n }));\n\n readonly fallbackTemplateContent = computed(() => {\n const content = this.fallbackContent();\n return content instanceof TemplateRef ? content : null;\n });\n\n readonly fallbackComponentContent = computed(() => {\n const content = this.fallbackContent();\n return content && typeof content === 'function' ? (content as Type<unknown>) : null;\n });\n\n readonly useCustomFallback = computed(\n () => this.fileTypeName() === 'file' && !!(this.fallbackTemplateContent() || this.fallbackComponentContent()),\n );\n\n readonly fallbackContentContext = computed(() => ({\n $implicit: this.fallbackContentData(),\n payload: this.viewPayload(),\n item: this.item(),\n index: this.index(),\n active: this.viewPayload().active,\n }));\n\n readonly fallbackComponentInputs = computed(() => ({\n payload: this.viewPayload(),\n ...this.fallbackContentInputs(),\n }));\n}\n","import { Component, computed, effect, inject, input, signal } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerItem } from '../file-viewer.types';\nimport { resolveFileViewerFileType } from '../resolve-file-viewer-file-type';\n\nconst TYPE_ICON_MAP: Record<string, string> = {\n image: 'fa-light fa-image',\n video: 'fa-light fa-video',\n audio: 'fa-light fa-music',\n document: 'fa-light fa-file-pdf',\n file: 'fa-light fa-file-zipper',\n};\n\n@Component({\n selector: 'ax-file-viewer-thumb-preview',\n\n host: { class: 'ax-file-viewer__thumb-preview' },\n template: `\n @if (src()) {\n <img [src]=\"src()!\" [alt]=\"item().name ?? ''\" loading=\"lazy\" />\n } @else {\n <i [class]=\"icon()\"></i>\n }\n `,\n})\nexport class AXFileViewerThumbPreviewComponent {\n readonly item = input.required<AXFileViewerItem>();\n\n private readonly service = inject(AXFileViewerService);\n\n readonly src = signal<string | null>(null);\n readonly icon = computed(() => {\n const type = resolveFileViewerFileType(this.item());\n return TYPE_ICON_MAP[type] ?? TYPE_ICON_MAP['file'];\n });\n\n #resolve = effect((onCleanup) => {\n const item = this.item();\n this.src.set(null);\n let cancelled = false;\n onCleanup(() => {\n cancelled = true;\n });\n void this.resolvePreview(item).then((url) => {\n if (!cancelled) {\n this.src.set(url ?? null);\n }\n });\n });\n\n private async resolvePreview(item: AXFileViewerItem): Promise<string | undefined> {\n const thumbnail = await this.service.resolveUrl(item, 'thumbnailUrl');\n if (thumbnail) {\n return thumbnail;\n }\n // Images can use the main asset URL when no dedicated thumbnail is provided.\n if (resolveFileViewerFileType(item) === 'image') {\n return this.service.resolveUrl(item, 'url');\n }\n return undefined;\n }\n}\n","import { AXCarouselDirective, type AXCarouselOptions } from '@acorex/cdk/carousel';\nimport type { AXStyleColorType } from '@acorex/cdk/common';\nimport { AXBadgeComponent } from '@acorex/components/badge';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXLoadingComponent } from '@acorex/components/loading';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXFullScreenService } from '@acorex/core/full-screen';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n output,\n signal,\n TemplateRef,\n Type,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport type Swiper from 'swiper';\nimport { AXFileViewerSlideComponent } from '../file-viewer-slide/file-viewer-slide.component';\nimport { AXFileViewerThumbPreviewComponent } from '../file-viewer-thumb-preview/file-viewer-thumb-preview.component';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type {\n AXFileViewerFallbackContent,\n AXFileViewerFallbackContentInputs,\n AXFileViewerHeaderContent,\n AXFileViewerHeaderContentInputs,\n AXFileViewerHeaderPlaceholderContent,\n AXFileViewerHeaderPlaceholderInputs,\n AXFileViewerItem,\n} from '../file-viewer.types';\nimport { resolveFileViewerFileType } from '../resolve-file-viewer-file-type';\n\nconst TYPE_LABEL_MAP: Record<string, string> = {\n image: 'IMAGE',\n video: 'VIDEO',\n audio: 'AUDIO',\n document: 'PDF',\n file: 'FILE',\n};\n\nconst TYPE_COLOR_MAP: Record<string, AXStyleColorType> = {\n image: 'success',\n video: 'primary',\n audio: 'danger',\n document: 'warning',\n file: 'secondary',\n};\n\n@Component({\n selector: 'ax-file-viewer-container',\n templateUrl: './file-viewer-container.component.html',\n styleUrl: './file-viewer-container.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class.ax-file-viewer--fullscreen]': 'isFullscreenActive()',\n },\n providers: [AXFileViewerService],\n imports: [\n NgComponentOutlet,\n NgTemplateOutlet,\n AXCarouselDirective,\n AXFileViewerSlideComponent,\n AXFileViewerThumbPreviewComponent,\n AXBadgeComponent,\n AXButtonComponent,\n AXDecoratorIconComponent,\n AXLoadingComponent,\n AXTooltipDirective,\n ],\n})\nexport class AXFileViewerContainerComponent implements OnDestroy {\n readonly items = input<AXFileViewerItem[]>([]);\n readonly startIndex = input(0);\n readonly thumbnail = input(true);\n readonly pagination = input(true);\n readonly download = input(true);\n readonly fullscreen = input(true);\n /** When true, opens in a gallery overlay and closes when fullscreen exits. */\n readonly galleryMode = input(false);\n /** Component or template rendered in the header center slot. */\n readonly headerContent = input<AXFileViewerHeaderContent | null>(null);\n /** Inputs for {@link headerContent} when it is a component. */\n readonly headerContentInputs = input<AXFileViewerHeaderContentInputs>({});\n /** Context data exposed as `$implicit` to header templates. */\n readonly headerContentData = input<unknown>();\n /** Custom placeholder when {@link headerContent} is omitted. */\n readonly headerContentPlaceholder = input<AXFileViewerHeaderPlaceholderContent | null>(null);\n /** Inputs for {@link headerContentPlaceholder} when it is a component. */\n readonly headerContentPlaceholderInputs = input<AXFileViewerHeaderPlaceholderInputs>({});\n /** Component or template replacing the built-in fallback viewer for `file` type items. */\n readonly fallbackContent = input<AXFileViewerFallbackContent | null>(null);\n /** Inputs for {@link fallbackContent} when it is a component. */\n readonly fallbackContentInputs = input<AXFileViewerFallbackContentInputs>({});\n /** Context data exposed as `$implicit` to fallback templates. */\n readonly fallbackContentData = input<unknown>();\n /** External loading flag — show overlay while parent data is being fetched. */\n readonly loading = input(false);\n\n readonly fullscreenClosed = output<void>();\n\n readonly service = inject(AXFileViewerService);\n private readonly host = inject(ElementRef<HTMLElement>);\n private readonly fullScreenService = inject(AXFullScreenService);\n\n private readonly mainCarouselRef = viewChild<AXCarouselDirective>('mainCarousel');\n private readonly thumbCarouselRef = viewChild<AXCarouselDirective>('thumbCarousel');\n\n private initToken = 0;\n\n readonly isFullscreenActive = signal(false);\n\n /** True while carousels are being (re)initialized. */\n readonly initializing = signal(true);\n\n readonly isBusy = computed(() => this.loading() || this.initializing());\n\n readonly isFirstSlide = computed(() => this.service.selectedIndex() <= 0);\n readonly isLastSlide = computed(() => this.service.selectedIndex() >= Math.max(this.service.items().length - 1, 0));\n\n readonly currentItem = computed(() => this.service.items()[this.service.selectedIndex()]);\n readonly currentFileType = computed(() => {\n const item = this.currentItem();\n return item ? resolveFileViewerFileType(item) : 'file';\n });\n readonly currentTypeLabel = computed(() => TYPE_LABEL_MAP[this.currentFileType()] ?? 'FILE');\n readonly currentTypeColor = computed(() => TYPE_COLOR_MAP[this.currentFileType()] ?? 'secondary');\n readonly slideCounter = computed(() => {\n const total = this.service.items().length;\n if (!total) return '0 / 0';\n return `${this.service.selectedIndex() + 1} / ${total}`;\n });\n\n readonly headerTemplateContent = computed(() => {\n const content = this.headerContent();\n return content instanceof TemplateRef ? content : null;\n });\n\n readonly headerComponentContent = computed(() => {\n const content = this.headerContent();\n return content && typeof content === 'function' ? (content as Type<unknown>) : null;\n });\n\n readonly headerPlaceholderTemplateContent = computed(() => {\n const content = this.headerContentPlaceholder();\n return content instanceof TemplateRef ? content : null;\n });\n\n readonly headerPlaceholderComponentContent = computed(() => {\n const content = this.headerContentPlaceholder();\n return content && typeof content === 'function' ? (content as Type<unknown>) : null;\n });\n\n readonly hasHeaderCenterContent = computed(\n () =>\n !!(\n this.headerTemplateContent() ||\n this.headerComponentContent() ||\n this.headerPlaceholderTemplateContent() ||\n this.headerPlaceholderComponentContent()\n ),\n );\n\n readonly headerContentContext = computed(() => ({\n $implicit: this.headerContentData(),\n item: this.currentItem(),\n items: this.service.items(),\n selectedIndex: this.service.selectedIndex(),\n slideCounter: this.slideCounter(),\n }));\n\n readonly resolveFileType = resolveFileViewerFileType;\n\n resolveTypeLabel(item: AXFileViewerItem): string {\n return TYPE_LABEL_MAP[resolveFileViewerFileType(item)] ?? 'FILE';\n }\n\n formatSize(size?: number): string {\n if (size == null || Number.isNaN(size)) return '';\n if (size < 1024) return `${size} B`;\n if (size < 1024 * 1024) return `${(size / 1024).toFixed(1)} KB`;\n return `${(size / (1024 * 1024)).toFixed(1)} MB`;\n }\n\n private readonly mainCarouselOptions: AXCarouselOptions = {\n slidesPerView: 1,\n observer: true,\n observeParents: true,\n updateOnWindowResize: true,\n resizeObserver: true,\n keyboard: true,\n watchSlidesProgress: true,\n speed: 300,\n };\n\n private readonly thumbnailCarouselOptions: AXCarouselOptions = {\n spaceBetween: 10,\n slidesPerView: 'auto',\n watchSlidesProgress: true,\n observer: true,\n observeParents: true,\n updateOnWindowResize: true,\n resizeObserver: true,\n };\n\n #syncItems = effect(() => {\n const items = this.items();\n const startIndex = this.startIndex();\n this.service.items.set(items);\n this.service.selectedIndex.set(Math.min(Math.max(startIndex, 0), Math.max(items.length - 1, 0)));\n if (items.length > 0) {\n this.initializing.set(true);\n setTimeout(() => void this.initCarousels());\n } else if (!this.loading()) {\n this.initializing.set(false);\n }\n });\n\n #bindSlideChange = effect(() => {\n const carousel = this.mainCarouselRef()?.carousel();\n if (carousel) {\n carousel.on('activeIndexChange', this.onSlideChange);\n }\n });\n\n #init = afterNextRender(() => {\n void this.initCarousels();\n if (this.galleryMode() && this.fullscreen()) {\n this.enterFullscreen();\n }\n });\n\n toggleFullscreen(): void {\n if (this.isFullscreenActive()) {\n this.exitFullscreen();\n } else {\n this.enterFullscreen();\n }\n }\n\n enterFullscreen(): void {\n if (this.isFullscreenActive()) return;\n const el = this.host.nativeElement;\n this.fullScreenService.enter(el);\n this.isFullscreenActive.set(true);\n }\n\n /** @param emitGalleryClose When false, skips gallery close notification (used during service teardown). */\n exitFullscreen(emitGalleryClose = true): void {\n if (!this.isFullscreenActive() && !this.fullScreenService.isFullscreen()) {\n return;\n }\n\n const el = this.host.nativeElement;\n this.fullScreenService.exit(el);\n this.isFullscreenActive.set(false);\n\n if (this.galleryMode() && emitGalleryClose) {\n this.fullscreenClosed.emit();\n }\n }\n\n closeGallery(): void {\n this.exitFullscreen();\n }\n\n private async initCarousels(): Promise<void> {\n const token = ++this.initToken;\n const mainRef = this.mainCarouselRef();\n if (!mainRef || !this.service.items().length) {\n if (!this.loading()) {\n this.initializing.set(false);\n }\n return;\n }\n\n this.initializing.set(true);\n\n try {\n const thumbRef = this.thumbnail() ? this.thumbCarouselRef() : undefined;\n\n if (thumbRef?.carousel()) {\n thumbRef.carousel().destroy(true, true);\n }\n if (mainRef.carousel()) {\n mainRef.carousel().destroy(true, true);\n }\n\n if (thumbRef) {\n await thumbRef.init(this.thumbnailCarouselOptions);\n await mainRef.init({\n ...this.mainCarouselOptions,\n thumbs: { swiper: thumbRef.carousel() },\n });\n } else {\n await mainRef.init(this.mainCarouselOptions);\n }\n\n if (token !== this.initToken) return;\n\n mainRef.carousel()?.slideTo(this.service.selectedIndex(), 0);\n } finally {\n if (token === this.initToken) {\n this.initializing.set(false);\n }\n }\n }\n\n private readonly onSlideChange = (swiper: Swiper) => {\n this.service.selectedIndex.set(swiper.activeIndex);\n };\n\n next(): void {\n if (this.isLastSlide()) return;\n if (this.thumbnail()) {\n this.thumbCarouselRef()?.carousel()?.slideNext();\n }\n this.mainCarouselRef()?.carousel()?.slideNext();\n }\n\n prev(): void {\n if (this.isFirstSlide()) return;\n if (this.thumbnail()) {\n this.thumbCarouselRef()?.carousel()?.slidePrev();\n }\n this.mainCarouselRef()?.carousel()?.slidePrev();\n }\n\n goToIndex(index: number, speed = 300): void {\n this.service.selectedIndex.set(index);\n this.mainCarouselRef()?.carousel()?.slideTo(index, speed);\n if (this.thumbnail()) {\n this.thumbCarouselRef()?.carousel()?.slideTo(index, speed);\n }\n }\n\n async downloadCurrent(): Promise<void> {\n const item = this.currentItem();\n if (!item) return;\n const url = await this.service.resolveUrl(item, 'url');\n if (!url) return;\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = item.name ?? 'download';\n anchor.target = '_blank';\n anchor.rel = 'noopener';\n anchor.click();\n }\n\n ngOnDestroy(): void {\n this.mainCarouselRef()?.carousel()?.off('activeIndexChange', this.onSlideChange);\n this.exitFullscreen(false);\n }\n}\n","@if (isBusy()) {\n <div class=\"ax-file-viewer__loading\" aria-busy=\"true\" aria-live=\"polite\">\n <ax-loading></ax-loading>\n </div>\n}\n\n@if (currentItem(); as item) {\n <header\n class=\"ax-file-viewer__header\"\n [class.ax-file-viewer__header--no-content]=\"!hasHeaderCenterContent()\"\n >\n <div class=\"ax-file-viewer__meta\">\n <div class=\"ax-file-viewer__title-row\">\n <span class=\"ax-file-viewer__name\">{{ item.name || 'Untitled' }}</span>\n </div>\n <div class=\"ax-file-viewer__submeta\">\n @if (formatSize(item.size); as sizeLabel) {\n <span>{{ sizeLabel }}</span>\n <span class=\"ax-file-viewer__dot\">·</span>\n }\n <ax-badge\n class=\"ax-file-viewer__type-badge ax-pill ax-sm\"\n look=\"outline\"\n [color]=\"currentTypeColor()\"\n [text]=\"currentTypeLabel()\"\n />\n </div>\n @if (formatSize(item.size); as sizeLabel) {\n <div class=\"ax-file-viewer__submeta\">\n <span>{{ sizeLabel }}</span>\n </div>\n }\n </div>\n\n @if (hasHeaderCenterContent()) {\n <div class=\"ax-file-viewer__header-content\">\n @if (headerTemplateContent(); as template) {\n <ng-container *ngTemplateOutlet=\"template; context: headerContentContext()\" />\n } @else if (headerComponentContent(); as component) {\n <ng-container *ngComponentOutlet=\"component; inputs: headerContentInputs()\" />\n } @else if (headerPlaceholderTemplateContent(); as placeholderTemplate) {\n <ng-container *ngTemplateOutlet=\"placeholderTemplate; context: headerContentContext()\" />\n } @else if (headerPlaceholderComponentContent(); as placeholderComponent) {\n <ng-container *ngComponentOutlet=\"placeholderComponent; inputs: headerContentPlaceholderInputs()\" />\n }\n </div>\n }\n\n <div class=\"ax-file-viewer__header-actions\">\n @if (download()) {\n <ax-button\n class=\"ax-file-viewer__action-btn\"\n look=\"outline\"\n color=\"default\"\n [iconOnly]=\"true\"\n [axTooltip]=\"'Download'\"\n (onClick)=\"downloadCurrent()\"\n >\n <ax-icon icon=\"fa-light fa-download\"></ax-icon>\n </ax-button>\n }\n\n @if (fullscreen()) {\n <ax-button\n class=\"ax-file-viewer__action-btn ax-file-viewer__fullscreen-wrap\"\n look=\"outline\"\n color=\"default\"\n [iconOnly]=\"true\"\n [axTooltip]=\"isFullscreenActive() ? 'Close' : 'Fullscreen'\"\n (onClick)=\"toggleFullscreen()\"\n >\n <ax-icon [icon]=\"isFullscreenActive() ? 'fa-light fa-xmark' : 'fa-light fa-expand'\"></ax-icon>\n </ax-button>\n }\n </div>\n </header>\n}\n\n<div\n class=\"ax-file-viewer__stage\"\n [class.ax-file-viewer__stage--nav]=\"service.items().length > 1\"\n [class.ax-file-viewer__stage--hidden]=\"isBusy()\"\n>\n @if (service.items().length > 1) {\n <ax-button\n class=\"ax-file-viewer__nav ax-file-viewer__nav--prev\"\n look=\"solid\"\n color=\"default\"\n [iconOnly]=\"true\"\n [disabled]=\"isFirstSlide()\"\n (onClick)=\"prev()\"\n >\n <ax-icon icon=\"fa-light fa-chevron-left\"></ax-icon>\n </ax-button>\n }\n\n <div class=\"ax-file-viewer__canvas\">\n <div #mainCarousel=\"axCarousel\" axCarousel class=\"ax-carousel\">\n <div class=\"ax-carousel-wrapper\">\n @for (file of service.items(); track file.id) {\n <div class=\"ax-carousel-slide\">\n <ax-file-viewer-slide\n [item]=\"file\"\n [index]=\"$index\"\n [fallbackContent]=\"fallbackContent()\"\n [fallbackContentInputs]=\"fallbackContentInputs()\"\n [fallbackContentData]=\"fallbackContentData()\"\n />\n </div>\n }\n </div>\n </div>\n\n @if (service.items().length > 0) {\n <span class=\"ax-file-viewer__overlay-counter\">{{ slideCounter() }}</span>\n }\n </div>\n\n @if (service.items().length > 1) {\n <ax-button\n class=\"ax-file-viewer__nav ax-file-viewer__nav--next\"\n look=\"solid\"\n color=\"default\"\n [iconOnly]=\"true\"\n [disabled]=\"isLastSlide()\"\n (onClick)=\"next()\"\n >\n <ax-icon icon=\"fa-light fa-chevron-right\"></ax-icon>\n </ax-button>\n }\n</div>\n\n@if (thumbnail() && service.items().length > 1) {\n <footer class=\"ax-file-viewer__thumbs\" [class.ax-file-viewer__thumbs--hidden]=\"isBusy()\">\n <div class=\"ax-file-viewer__thumbs-track\">\n <div #thumbCarousel=\"axCarousel\" axCarousel class=\"ax-carousel\">\n <div class=\"ax-carousel-wrapper\">\n @for (file of service.items(); track file.id) {\n <div\n class=\"ax-carousel-slide ax-file-viewer__thumb\"\n [attr.data-type]=\"resolveFileType(file)\"\n [class.ax-file-viewer__thumb--active]=\"service.selectedIndex() === $index\"\n (click)=\"goToIndex($index)\"\n >\n <ax-file-viewer-thumb-preview [item]=\"file\" />\n <div class=\"ax-file-viewer__thumb-footer\">\n <span class=\"ax-file-viewer__thumb-name\">{{ file.name || resolveTypeLabel(file) }}</span>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </footer>\n}\n","import { AXComponentClosedPromise } from '@acorex/cdk/common';\nimport { AXOverlayRef, AXOverlayService } from '@acorex/cdk/overlay';\nimport { AXComponentInputs } from '@acorex/core/components';\nimport { ComponentRef, inject, Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { AXFileViewerContainerComponent } from './file-viewer-container/file-viewer-container.component';\nimport type { AXFileViewerGalleryConfig, AXFileViewerGalleryRef } from './file-viewer-gallery.types';\n\ninterface AXFileViewerGalleryEntry {\n overlay: AXOverlayRef<AXFileViewerContainerComponent>;\n gallery: AXFileViewerGalleryRef;\n closedSub?: { unsubscribe: () => void };\n}\n\n/** Opens {@link AXFileViewerContainerComponent} in fullscreen gallery mode. */\n@Injectable({ providedIn: 'root' })\nexport class AXFileViewerGalleryService {\n private readonly galleryList = new Map<number, AXFileViewerGalleryEntry>();\n private readonly overlayService = inject(AXOverlayService);\n\n /**\n * Opens a file viewer gallery in fullscreen.\n * @param config - Gallery configuration\n * @returns Promise that resolves when the gallery is closed\n */\n open(config: AXFileViewerGalleryConfig): AXComponentClosedPromise {\n const defaultConfig: AXFileViewerGalleryConfig = {\n items: [],\n startIndex: 0,\n thumbnail: true,\n download: true,\n loading: false,\n panelClass: [],\n };\n\n const mergedConfig = Object.assign(defaultConfig, config);\n\n const promise = new AXComponentClosedPromise((resolve) => {\n this.openInternal(mergedConfig).then((ref) => {\n ref.onClose.subscribe((data) => {\n resolve({\n sender: ref.componentInstance,\n data,\n });\n });\n });\n });\n\n return promise;\n }\n\n /**\n * Closes a gallery by its ID.\n * @param id - The gallery ID to close\n * @param data - Optional data to pass to the close event\n */\n close<TResult = unknown>(id: number, data?: TResult): void {\n const ref = this.galleryList.get(id);\n if (!ref) return;\n\n this.galleryList.delete(id);\n ref.closedSub?.unsubscribe();\n\n const componentRef = ref.overlay.instance as ComponentRef<AXFileViewerContainerComponent>;\n componentRef?.instance.exitFullscreen(false);\n\n ref.gallery.onClose.next(data);\n ref.gallery.onClose.complete();\n ref.overlay.dispose();\n }\n\n /**\n * Sets input values for a gallery by its ID.\n * @param id - The gallery ID\n * @param values - Object containing input values to set\n */\n setInputs(id: number, values: AXComponentInputs): void {\n const ref = this.galleryList.get(id)?.overlay.instance;\n if (!ref) return;\n if (ref instanceof ComponentRef) {\n Object.entries(values).forEach(([key, value]) => {\n ref.setInput(key, value);\n });\n }\n }\n\n /**\n * Brings a gallery to the front of all other overlays.\n * @param id - The gallery ID to bring to front\n */\n bringToFront(id: number): void {\n const ref = this.galleryList.get(id);\n if (!ref) return;\n ref.overlay.bringToFront();\n }\n\n private async openInternal(config: AXFileViewerGalleryConfig): Promise<AXFileViewerGalleryRef> {\n const randomId = Math.floor(Math.random() * 100000000000);\n const onClose = new Subject<unknown>();\n\n const returnRef: AXFileViewerGalleryRef = {\n close: (data) => {\n this.close(randomId, data);\n },\n setInputs: (values) => {\n this.setInputs(randomId, values);\n },\n bringToFront: () => {\n this.bringToFront(randomId);\n },\n onClose,\n };\n\n const panelClasses = ['ax-file-viewer-gallery-overlay'];\n if (config.panelClass?.length) {\n panelClasses.push(...config.panelClass);\n }\n\n const overlayRef = await this.overlayService.create(AXFileViewerContainerComponent, {\n backdrop: { enabled: false },\n panelClass: panelClasses,\n inputs: {\n items: config.items,\n startIndex: config.startIndex ?? 0,\n thumbnail: config.thumbnail ?? true,\n download: config.download ?? true,\n fullscreen: true,\n galleryMode: true,\n loading: config.loading ?? false,\n headerContent: config.headerContent ?? null,\n headerContentInputs: config.headerContentInputs ?? {},\n headerContentData: config.headerContentData,\n headerContentPlaceholder: config.headerContentPlaceholder ?? null,\n headerContentPlaceholderInputs: config.headerContentPlaceholderInputs ?? {},\n fallbackContent: config.fallbackContent ?? null,\n fallbackContentInputs: config.fallbackContentInputs ?? {},\n fallbackContentData: config.fallbackContentData,\n },\n });\n\n const componentRef = overlayRef.instance as ComponentRef<AXFileViewerContainerComponent>;\n returnRef.componentInstance = componentRef.instance;\n\n const closedSub = componentRef.instance.fullscreenClosed.subscribe(() => {\n this.close(randomId);\n });\n\n this.galleryList.set(randomId, { overlay: overlayRef, gallery: returnRef, closedSub });\n\n return returnRef;\n }\n}\n","import {\n AX_AUDIO_FILE_TYPE,\n AX_DOCUMENT_FILE_TYPE,\n AX_FILE_FILE_TYPE,\n AX_IMAGE_FILE_TYPE,\n AX_VIDEO_FILE_TYPE,\n defineFileType,\n type AXFileType,\n} from '@acorex/core/file';\n\nexport function createFileViewerFileTypes(): AXFileType[] {\n return [\n defineFileType({\n ...AX_IMAGE_FILE_TYPE,\n name: 'image',\n component: () =>\n import('../viewers/image-viewer.component').then((m) => m.AXFileViewerImageComponent),\n }),\n defineFileType({\n ...AX_VIDEO_FILE_TYPE,\n name: 'video',\n component: () =>\n import('../viewers/video-viewer.component').then((m) => m.AXFileViewerVideoComponent),\n }),\n defineFileType({\n ...AX_AUDIO_FILE_TYPE,\n name: 'audio',\n component: () =>\n import('../viewers/audio-viewer.component').then((m) => m.AXFileViewerAudioComponent),\n }),\n defineFileType({\n ...AX_DOCUMENT_FILE_TYPE,\n name: 'document',\n component: () =>\n import('../viewers/pdf-viewer.component').then((m) => m.AXFileViewerPdfComponent),\n extensions: (AX_DOCUMENT_FILE_TYPE.extensions ?? []).map((extension) =>\n extension.name.toLowerCase() === 'pdf'\n ? {\n ...extension,\n component: () => import('../viewers/pdf-viewer.component').then((m) => m.AXFileViewerPdfComponent),\n }\n : extension,\n ),\n }),\n defineFileType({\n ...AX_FILE_FILE_TYPE,\n name: 'file',\n component: () =>\n import('../viewers/file-fallback-viewer.component').then((m) => m.AXFileViewerFileFallbackComponent),\n }),\n ];\n}\n","import { AXFileTypeRegistryService } from '@acorex/core/file';\nimport { APP_INITIALIZER, type Provider } from '@angular/core';\nimport { createFileViewerFileTypes } from './file-types/file-viewer-file-types';\n\n/** Registers file-viewer components on standard file-type catalog entries. */\nexport function provideFileViewer(): Provider[] {\n return [\n {\n provide: APP_INITIALIZER,\n useFactory: (registry: AXFileTypeRegistryService) => () =>\n registry.registerTypes(createFileViewerFileTypes()),\n deps: [AXFileTypeRegistryService],\n multi: true,\n },\n ];\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/** Optional center header slot component for use with {@link headerContentPlaceholder}. */\n@Component({\n selector: 'ax-file-viewer-header-placeholder',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"ax-file-viewer__header-placeholder\">{{ slideCounter() }}</span>\n `,\n styles: `\n :host {\n display: flex;\n width: 100%;\n min-width: 0;\n align-items: center;\n justify-content: center;\n }\n\n .ax-file-viewer__header-placeholder {\n font-size: 0.8rem;\n font-weight: 500;\n color: var(--ax-fv-muted, rgba(var(--ax-sys-color-on-surface), 0.65));\n white-space: nowrap;\n }\n `,\n})\nexport class AXFileViewerHeaderPlaceholderComponent {\n readonly slideCounter = input('0 / 0');\n}\n","import { Component, computed, inject } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport { resolveFileViewerFileType } from '../resolve-file-viewer-file-type';\n\ninterface ThumbnailEntry {\n id: string;\n index: number;\n type: string;\n icon: string;\n}\n\nconst TYPE_ICON_MAP: Record<string, string> = {\n image: 'fa-light fa-image',\n video: 'fa-light fa-video',\n audio: 'fa-light fa-music',\n document: 'fa-light fa-file-lines',\n file: 'fa-light fa-file',\n};\n\n@Component({\n selector: 'ax-file-viewer-thumbnails',\n\n template: `\n <div class=\"ax-file-viewer-thumbnails\">\n @for (thumb of thumbnails(); track thumb.id) {\n <button\n class=\"ax-file-viewer-thumb\"\n [class.ax-file-viewer-thumb--active]=\"thumb.index === service.selectedIndex()\"\n (click)=\"service.selectedIndex.set(thumb.index)\"\n >\n <i [class]=\"thumb.icon\"></i>\n </button>\n }\n </div>\n `,\n styles: `\n :host {\n display: block;\n }\n .ax-file-viewer-thumbnails {\n display: flex;\n gap: 0.5rem;\n justify-content: center;\n padding: 0.5rem;\n flex-wrap: wrap;\n }\n .ax-file-viewer-thumb {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 3rem;\n height: 3rem;\n border-radius: var(--ax-sys-border-radius, 0.25rem);\n border: 1px solid rgb(var(--ax-sys-color-border-lightest-surface));\n background: transparent;\n cursor: pointer;\n opacity: 0.5;\n transition: opacity 0.2s;\n font-size: 1.25rem;\n color: rgb(var(--ax-sys-color-on-surface));\n }\n .ax-file-viewer-thumb--active {\n opacity: 1;\n border-color: rgb(var(--ax-sys-color-primary));\n }\n `,\n})\nexport class AXFileViewerThumbnailsComponent {\n readonly service = inject(AXFileViewerService);\n\n readonly thumbnails = computed<ThumbnailEntry[]>(() =>\n this.service.items().map((item, index) => {\n const type = resolveFileViewerFileType(item);\n return {\n id: item.id,\n index,\n type,\n icon: TYPE_ICON_MAP[type] ?? TYPE_ICON_MAP['file'],\n };\n }),\n );\n}\n","import { AXLoadingComponent } from '@acorex/components/loading';\nimport type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { Component, effect, inject, input, signal } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\n\n@Component({\n selector: 'ax-file-viewer-image',\n\n imports: [AXLoadingComponent],\n template: `\n @if (loading()) {\n <ax-loading></ax-loading>\n } @else if (src()) {\n <img [src]=\"src()\" [alt]=\"payload().item.name ?? 'Image'\" />\n }\n `,\n styles: `\n :host {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n padding: 0.75rem;\n box-sizing: border-box;\n }\n img {\n width: 100%;\n height: 100%;\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n border-radius: 0.75rem;\n }\n `,\n})\nexport class AXFileViewerImageComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {\n readonly payload = input.required<AXFileViewerViewPayload>();\n private readonly service = inject(AXFileViewerService);\n readonly src = signal<string | null>(null);\n readonly loading = signal(false);\n\n #resolve = effect(() => {\n const p = this.payload();\n if (p.active) {\n this.loading.set(true);\n void this.service\n .resolveUrl(p.item, 'url')\n .then((url) => this.src.set(url ?? null))\n .finally(() => this.loading.set(false));\n }\n });\n}\n","import { AXLoadingComponent } from '@acorex/components/loading';\nimport type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { Component, effect, inject, input, signal } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\n\n@Component({\n selector: 'ax-file-viewer-video',\n\n imports: [AXLoadingComponent],\n template: `\n @if (loading()) {\n <ax-loading></ax-loading>\n } @else if (src()) {\n <video controls [src]=\"src()\"></video>\n }\n `,\n styles: `\n :host {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n padding: 0.75rem;\n box-sizing: border-box;\n }\n video {\n width: 100%;\n height: 100%;\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n border-radius: 0.75rem;\n background: rgb(var(--ax-sys-color-dark));\n }\n `,\n})\nexport class AXFileViewerVideoComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {\n readonly payload = input.required<AXFileViewerViewPayload>();\n private readonly service = inject(AXFileViewerService);\n readonly src = signal<string | null>(null);\n readonly loading = signal(false);\n\n #resolve = effect(() => {\n const p = this.payload();\n if (p.active) {\n this.loading.set(true);\n void this.service\n .resolveUrl(p.item, 'url')\n .then((url) => this.src.set(url ?? null))\n .finally(() => this.loading.set(false));\n }\n });\n}\n","import { AXLoadingComponent } from '@acorex/components/loading';\nimport type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { Component, effect, inject, input, signal } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\n\n@Component({\n selector: 'ax-file-viewer-audio',\n\n imports: [AXLoadingComponent],\n template: `\n @if (loading()) {\n <ax-loading></ax-loading>\n } @else if (src()) {\n <audio controls [src]=\"src()\"></audio>\n }\n `,\n styles: `\n :host {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n padding: 1rem;\n box-sizing: border-box;\n }\n audio {\n width: 100%;\n max-width: min(40rem, 100%);\n min-width: 0;\n }\n `,\n})\nexport class AXFileViewerAudioComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {\n readonly payload = input.required<AXFileViewerViewPayload>();\n private readonly service = inject(AXFileViewerService);\n readonly src = signal<string | null>(null);\n readonly loading = signal(false);\n\n #resolve = effect(() => {\n const p = this.payload();\n if (p.active) {\n this.loading.set(true);\n void this.service\n .resolveUrl(p.item, 'url')\n .then((url) => this.src.set(url ?? null))\n .finally(() => this.loading.set(false));\n }\n });\n}\n","import { AXLoadingComponent } from '@acorex/components/loading';\nimport { AXPdfReaderComponent } from '@acorex/components/pdf-reader';\nimport type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { Component, effect, inject, input, signal } from '@angular/core';\nimport { DomSanitizer, type SafeResourceUrl } from '@angular/platform-browser';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\n\n@Component({\n selector: 'ax-file-viewer-pdf',\n\n imports: [AXLoadingComponent, AXPdfReaderComponent],\n template: `\n @if (loading()) {\n <ax-loading></ax-loading>\n } @else if (safeSrc()) {\n <ax-pdf-reader [src]=\"safeSrc()\"></ax-pdf-reader>\n }\n `,\n styles: `\n :host {\n display: flex;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n padding: 0.5rem;\n box-sizing: border-box;\n }\n ax-pdf-reader {\n display: block;\n width: 100%;\n height: 100%;\n }\n `,\n})\nexport class AXFileViewerPdfComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {\n readonly payload = input.required<AXFileViewerViewPayload>();\n private readonly service = inject(AXFileViewerService);\n private readonly sanitizer = inject(DomSanitizer);\n readonly safeSrc = signal<SafeResourceUrl | null>(null);\n readonly loading = signal(false);\n\n #resolve = effect(() => {\n const p = this.payload();\n if (p.active) {\n this.loading.set(true);\n void this.service\n .resolveUrl(p.item, 'url')\n .then((url) => {\n this.safeSrc.set(url ? this.sanitizer.bypassSecurityTrustResourceUrl(url) : null);\n })\n .finally(() => this.loading.set(false));\n }\n });\n}\n","import type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { Component, computed, input } from '@angular/core';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\n\n@Component({\n selector: 'ax-file-viewer-fallback',\n\n template: `\n <div class=\"ax-file-viewer-fallback\">\n <i class=\"fa-light fa-file ax-file-viewer-fallback__icon\"></i>\n @if (name()) {\n <span class=\"ax-file-viewer-fallback__name\">{{ name() }}</span>\n }\n </div>\n `,\n styles: `\n :host {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n box-sizing: border-box;\n }\n .ax-file-viewer-fallback {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.5rem;\n color: inherit;\n opacity: 0.85;\n }\n .ax-file-viewer-fallback__icon {\n font-size: 3rem;\n opacity: 0.55;\n }\n .ax-file-viewer-fallback__name {\n font-size: 0.875rem;\n opacity: 0.75;\n max-width: min(20rem, 80vw);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n `,\n})\nexport class AXFileViewerFileFallbackComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {\n readonly payload = input.required<AXFileViewerViewPayload>();\n readonly name = computed(() => this.payload().item.name);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["TYPE_ICON_MAP"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-components-file-viewer.mjs","sources":["../../../../packages/components/file-viewer/src/lib/file-viewer.service.ts","../../../../packages/components/file-viewer/src/lib/resolve-file-viewer-file-type.ts","../../../../packages/components/file-viewer/src/lib/file-viewer-slide/file-viewer-slide.component.ts","../../../../packages/components/file-viewer/src/lib/file-viewer-thumb-preview/file-viewer-thumb-preview.component.ts","../../../../packages/components/file-viewer/src/lib/file-viewer-container/file-viewer-container.component.ts","../../../../packages/components/file-viewer/src/lib/file-viewer-container/file-viewer-container.component.html","../../../../packages/components/file-viewer/src/lib/file-viewer-gallery.service.ts","../../../../packages/components/file-viewer/src/lib/file-types/file-viewer-file-types.ts","../../../../packages/components/file-viewer/src/lib/provide-file-viewer.ts","../../../../packages/components/file-viewer/src/lib/file-viewer-header-placeholder/file-viewer-header-placeholder.component.ts","../../../../packages/components/file-viewer/src/lib/file-viewer-thumbnails/file-viewer-thumbnails.component.ts","../../../../packages/components/file-viewer/src/lib/viewers/image-viewer.component.ts","../../../../packages/components/file-viewer/src/lib/viewers/video-viewer.component.ts","../../../../packages/components/file-viewer/src/lib/viewers/audio-viewer.component.ts","../../../../packages/components/file-viewer/src/lib/viewers/pdf-viewer.component.ts","../../../../packages/components/file-viewer/src/lib/viewers/file-fallback-viewer.component.ts","../../../../packages/components/file-viewer/src/acorex-components-file-viewer.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\nimport type { AXFileViewerItem } from './file-viewer.types';\n\n/** Carousel state shared between container, slides and thumbnails. Provided per-container. */\n@Injectable()\nexport class AXFileViewerService {\n readonly items = signal<AXFileViewerItem[]>([]);\n readonly selectedIndex = signal(0);\n\n private readonly urlCache = new Map<string, string>();\n\n /** Resolve a potentially lazy URL — caches the result. */\n async resolveUrl(item: AXFileViewerItem, key: 'url' | 'thumbnailUrl'): Promise<string | undefined> {\n const raw = item[key];\n if (!raw) {\n return undefined;\n }\n const cacheKey = `${item.id}:${key}`;\n const cached = this.urlCache.get(cacheKey);\n if (cached) {\n return cached;\n }\n const resolved = typeof raw === 'function' ? await raw() : raw;\n this.urlCache.set(cacheKey, resolved);\n return resolved;\n }\n}\n","import type { AXFileTypeExtensionHint } from '@acorex/core/file';\nimport type { AXFileViewerItem } from './file-viewer.types';\n\nconst MIME_PREFIX_MAP: Record<string, string> = {\n 'image/': 'image',\n 'video/': 'video',\n 'audio/': 'audio',\n 'application/pdf': 'document',\n};\n\n/** Infers a file-type catalog name from the item. */\nexport function resolveFileViewerFileType(item: AXFileViewerItem): string {\n if (item.fileType) {\n return item.fileType;\n }\n if (item.mimeType) {\n const mime = item.mimeType.toLowerCase();\n for (const [prefix, name] of Object.entries(MIME_PREFIX_MAP)) {\n if (mime.startsWith(prefix) || mime === prefix) {\n return name;\n }\n }\n }\n if (item.extension) {\n const ext = item.extension.replace(/^\\./, '').toLowerCase();\n if (['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg'].includes(ext)) return 'image';\n if (['mp4', 'webm', 'ogg'].includes(ext)) return 'video';\n if (['mp3', 'wav', 'm4a'].includes(ext)) return 'audio';\n if (ext === 'pdf') return 'document';\n }\n return 'file';\n}\n\n/** Builds an extension hint from item metadata. */\nexport function buildFileViewerExtensionHint(item: AXFileViewerItem): AXFileTypeExtensionHint | undefined {\n if (!item.mimeType && !item.extension) {\n return undefined;\n }\n return {\n mimeType: item.mimeType,\n extensionName: item.extension,\n };\n}\n","import { AXFileTypeRendererOutletComponent } from '@acorex/core/file';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, TemplateRef, Type } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type {\n AXFileViewerFallbackContent,\n AXFileViewerFallbackContentInputs,\n AXFileViewerItem,\n AXFileViewerViewPayload,\n} from '../file-viewer.types';\nimport { buildFileViewerExtensionHint, resolveFileViewerFileType } from '../resolve-file-viewer-file-type';\n\n@Component({\n selector: 'ax-file-viewer-slide',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgComponentOutlet, NgTemplateOutlet, AXFileTypeRendererOutletComponent],\n template: `\n @if (useCustomFallback()) {\n <div class=\"ax-file-viewer-slide__custom\">\n @if (fallbackTemplateContent(); as template) {\n <ng-container *ngTemplateOutlet=\"template; context: fallbackContentContext()\" />\n } @else if (fallbackComponentContent(); as component) {\n <ng-container *ngComponentOutlet=\"component; inputs: fallbackComponentInputs()\" />\n }\n </div>\n } @else {\n <ax-file-type-renderer [fileType]=\"fileTypeName()\" [payload]=\"viewPayload()\" [extensionHint]=\"extensionHint()\" />\n }\n `,\n styles: `\n :host {\n display: flex;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n align-items: stretch;\n justify-content: stretch;\n user-select: none;\n box-sizing: border-box;\n }\n\n .ax-file-viewer-slide__custom {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n box-sizing: border-box;\n }\n `,\n})\nexport class AXFileViewerSlideComponent {\n readonly item = input.required<AXFileViewerItem>();\n readonly index = input.required<number>();\n /** Component or template replacing the built-in fallback viewer for `file` type items. */\n readonly fallbackContent = input<AXFileViewerFallbackContent | null>(null);\n /** Inputs for {@link fallbackContent} when it is a component. */\n readonly fallbackContentInputs = input<AXFileViewerFallbackContentInputs>({});\n /** Context data exposed as `$implicit` to fallback templates. */\n readonly fallbackContentData = input<unknown>();\n\n private readonly service = inject(AXFileViewerService);\n\n readonly fileTypeName = computed(() => resolveFileViewerFileType(this.item()));\n\n readonly extensionHint = computed(() => buildFileViewerExtensionHint(this.item()));\n\n readonly viewPayload = computed<AXFileViewerViewPayload>(() => ({\n item: this.item(),\n index: this.index(),\n active: this.service.selectedIndex() === this.index(),\n }));\n\n readonly fallbackTemplateContent = computed(() => {\n const content = this.fallbackContent();\n return content instanceof TemplateRef ? content : null;\n });\n\n readonly fallbackComponentContent = computed(() => {\n const content = this.fallbackContent();\n return content && typeof content === 'function' ? (content as Type<unknown>) : null;\n });\n\n readonly useCustomFallback = computed(\n () => this.fileTypeName() === 'file' && !!(this.fallbackTemplateContent() || this.fallbackComponentContent()),\n );\n\n readonly fallbackContentContext = computed(() => ({\n $implicit: this.fallbackContentData(),\n payload: this.viewPayload(),\n item: this.item(),\n index: this.index(),\n active: this.viewPayload().active,\n }));\n\n readonly fallbackComponentInputs = computed(() => ({\n payload: this.viewPayload(),\n ...this.fallbackContentInputs(),\n }));\n}\n","import { Component, computed, effect, inject, input, signal } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerItem } from '../file-viewer.types';\nimport { resolveFileViewerFileType } from '../resolve-file-viewer-file-type';\n\nconst TYPE_ICON_MAP: Record<string, string> = {\n image: 'fa-light fa-image',\n video: 'fa-light fa-video',\n audio: 'fa-light fa-music',\n document: 'fa-light fa-file-pdf',\n file: 'fa-light fa-file-zipper',\n};\n\n@Component({\n selector: 'ax-file-viewer-thumb-preview',\n\n host: { class: 'ax-file-viewer__thumb-preview' },\n template: `\n @if (src()) {\n <img [src]=\"src()!\" [alt]=\"item().name ?? ''\" loading=\"lazy\" />\n } @else {\n <i [class]=\"icon()\"></i>\n }\n `,\n})\nexport class AXFileViewerThumbPreviewComponent {\n readonly item = input.required<AXFileViewerItem>();\n\n private readonly service = inject(AXFileViewerService);\n\n readonly src = signal<string | null>(null);\n readonly icon = computed(() => {\n const type = resolveFileViewerFileType(this.item());\n return TYPE_ICON_MAP[type] ?? TYPE_ICON_MAP['file'];\n });\n\n #resolve = effect((onCleanup) => {\n const item = this.item();\n this.src.set(null);\n let cancelled = false;\n onCleanup(() => {\n cancelled = true;\n });\n void this.resolvePreview(item).then((url) => {\n if (!cancelled) {\n this.src.set(url ?? null);\n }\n });\n });\n\n private async resolvePreview(item: AXFileViewerItem): Promise<string | undefined> {\n const thumbnail = await this.service.resolveUrl(item, 'thumbnailUrl');\n if (thumbnail) {\n return thumbnail;\n }\n // Images can use the main asset URL when no dedicated thumbnail is provided.\n if (resolveFileViewerFileType(item) === 'image') {\n return this.service.resolveUrl(item, 'url');\n }\n return undefined;\n }\n}\n","import { AXCarouselDirective, type AXCarouselOptions } from '@acorex/cdk/carousel';\nimport type { AXStyleColorType } from '@acorex/cdk/common';\nimport { AXBadgeComponent } from '@acorex/components/badge';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXLoadingComponent } from '@acorex/components/loading';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXFullScreenService } from '@acorex/core/full-screen';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n output,\n signal,\n TemplateRef,\n Type,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport type Swiper from 'swiper';\nimport { AXFileViewerSlideComponent } from '../file-viewer-slide/file-viewer-slide.component';\nimport { AXFileViewerThumbPreviewComponent } from '../file-viewer-thumb-preview/file-viewer-thumb-preview.component';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type {\n AXFileViewerFallbackContent,\n AXFileViewerFallbackContentInputs,\n AXFileViewerHeaderContent,\n AXFileViewerHeaderContentInputs,\n AXFileViewerHeaderPlaceholderContent,\n AXFileViewerHeaderPlaceholderInputs,\n AXFileViewerItem,\n} from '../file-viewer.types';\nimport { resolveFileViewerFileType } from '../resolve-file-viewer-file-type';\n\nconst TYPE_LABEL_MAP: Record<string, string> = {\n image: 'IMAGE',\n video: 'VIDEO',\n audio: 'AUDIO',\n document: 'PDF',\n file: 'FILE',\n};\n\nconst TYPE_COLOR_MAP: Record<string, AXStyleColorType> = {\n image: 'success',\n video: 'primary',\n audio: 'danger',\n document: 'warning',\n file: 'secondary',\n};\n\n@Component({\n selector: 'ax-file-viewer-container',\n templateUrl: './file-viewer-container.component.html',\n styleUrl: './file-viewer-container.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class.ax-file-viewer--fullscreen]': 'isFullscreenActive()',\n },\n providers: [AXFileViewerService],\n imports: [\n NgComponentOutlet,\n NgTemplateOutlet,\n AXCarouselDirective,\n AXFileViewerSlideComponent,\n AXFileViewerThumbPreviewComponent,\n AXBadgeComponent,\n AXButtonComponent,\n AXDecoratorIconComponent,\n AXLoadingComponent,\n AXTooltipDirective,\n ],\n})\nexport class AXFileViewerContainerComponent implements OnDestroy {\n readonly items = input<AXFileViewerItem[]>([]);\n readonly startIndex = input(0);\n readonly thumbnail = input(true);\n readonly pagination = input(true);\n readonly download = input(true);\n readonly fullscreen = input(true);\n /** When true, opens in a gallery overlay and closes when fullscreen exits. */\n readonly galleryMode = input(false);\n /** Component or template rendered in the header center slot. */\n readonly headerContent = input<AXFileViewerHeaderContent | null>(null);\n /** Inputs for {@link headerContent} when it is a component. */\n readonly headerContentInputs = input<AXFileViewerHeaderContentInputs>({});\n /** Context data exposed as `$implicit` to header templates. */\n readonly headerContentData = input<unknown>();\n /** Custom placeholder when {@link headerContent} is omitted. */\n readonly headerContentPlaceholder = input<AXFileViewerHeaderPlaceholderContent | null>(null);\n /** Inputs for {@link headerContentPlaceholder} when it is a component. */\n readonly headerContentPlaceholderInputs = input<AXFileViewerHeaderPlaceholderInputs>({});\n /** Component or template replacing the built-in fallback viewer for `file` type items. */\n readonly fallbackContent = input<AXFileViewerFallbackContent | null>(null);\n /** Inputs for {@link fallbackContent} when it is a component. */\n readonly fallbackContentInputs = input<AXFileViewerFallbackContentInputs>({});\n /** Context data exposed as `$implicit` to fallback templates. */\n readonly fallbackContentData = input<unknown>();\n /** External loading flag — show overlay while parent data is being fetched. */\n readonly loading = input(false);\n\n readonly fullscreenClosed = output<void>();\n\n readonly service = inject(AXFileViewerService);\n private readonly host = inject(ElementRef<HTMLElement>);\n private readonly fullScreenService = inject(AXFullScreenService);\n\n private readonly mainCarouselRef = viewChild<AXCarouselDirective>('mainCarousel');\n private readonly thumbCarouselRef = viewChild<AXCarouselDirective>('thumbCarousel');\n\n private initToken = 0;\n\n readonly isFullscreenActive = signal(false);\n\n /** True while carousels are being (re)initialized. */\n readonly initializing = signal(true);\n\n readonly isBusy = computed(() => this.loading() || this.initializing());\n\n readonly isFirstSlide = computed(() => this.service.selectedIndex() <= 0);\n readonly isLastSlide = computed(() => this.service.selectedIndex() >= Math.max(this.service.items().length - 1, 0));\n\n readonly currentItem = computed(() => this.service.items()[this.service.selectedIndex()]);\n readonly currentFileType = computed(() => {\n const item = this.currentItem();\n return item ? resolveFileViewerFileType(item) : 'file';\n });\n readonly currentTypeLabel = computed(() => TYPE_LABEL_MAP[this.currentFileType()] ?? 'FILE');\n readonly currentTypeColor = computed(() => TYPE_COLOR_MAP[this.currentFileType()] ?? 'secondary');\n readonly slideCounter = computed(() => {\n const total = this.service.items().length;\n if (!total) return '0 / 0';\n return `${this.service.selectedIndex() + 1} / ${total}`;\n });\n\n readonly headerTemplateContent = computed(() => {\n const content = this.headerContent();\n return content instanceof TemplateRef ? content : null;\n });\n\n readonly headerComponentContent = computed(() => {\n const content = this.headerContent();\n return content && typeof content === 'function' ? (content as Type<unknown>) : null;\n });\n\n readonly headerPlaceholderTemplateContent = computed(() => {\n const content = this.headerContentPlaceholder();\n return content instanceof TemplateRef ? content : null;\n });\n\n readonly headerPlaceholderComponentContent = computed(() => {\n const content = this.headerContentPlaceholder();\n return content && typeof content === 'function' ? (content as Type<unknown>) : null;\n });\n\n readonly hasHeaderCenterContent = computed(\n () =>\n !!(\n this.headerTemplateContent() ||\n this.headerComponentContent() ||\n this.headerPlaceholderTemplateContent() ||\n this.headerPlaceholderComponentContent()\n ),\n );\n\n readonly headerContentContext = computed(() => ({\n $implicit: this.headerContentData(),\n item: this.currentItem(),\n items: this.service.items(),\n selectedIndex: this.service.selectedIndex(),\n slideCounter: this.slideCounter(),\n }));\n\n readonly resolveFileType = resolveFileViewerFileType;\n\n resolveTypeLabel(item: AXFileViewerItem): string {\n return TYPE_LABEL_MAP[resolveFileViewerFileType(item)] ?? 'FILE';\n }\n\n formatSize(size?: number): string {\n if (size == null || Number.isNaN(size)) return '';\n if (size < 1024) return `${size} B`;\n if (size < 1024 * 1024) return `${(size / 1024).toFixed(1)} KB`;\n return `${(size / (1024 * 1024)).toFixed(1)} MB`;\n }\n\n private readonly mainCarouselOptions: AXCarouselOptions = {\n slidesPerView: 1,\n observer: true,\n observeParents: true,\n updateOnWindowResize: true,\n resizeObserver: true,\n keyboard: true,\n watchSlidesProgress: true,\n speed: 300,\n };\n\n private readonly thumbnailCarouselOptions: AXCarouselOptions = {\n spaceBetween: 10,\n slidesPerView: 'auto',\n watchSlidesProgress: true,\n observer: true,\n observeParents: true,\n updateOnWindowResize: true,\n resizeObserver: true,\n };\n\n #syncItems = effect(() => {\n const items = this.items();\n const startIndex = this.startIndex();\n this.service.items.set(items);\n this.service.selectedIndex.set(Math.min(Math.max(startIndex, 0), Math.max(items.length - 1, 0)));\n if (items.length > 0) {\n this.initializing.set(true);\n setTimeout(() => void this.initCarousels());\n } else if (!this.loading()) {\n this.initializing.set(false);\n }\n });\n\n #bindSlideChange = effect(() => {\n const carousel = this.mainCarouselRef()?.carousel();\n if (carousel) {\n carousel.on('activeIndexChange', this.onSlideChange);\n }\n });\n\n #init = afterNextRender(() => {\n void this.initCarousels();\n if (this.galleryMode() && this.fullscreen()) {\n this.enterFullscreen();\n }\n });\n\n toggleFullscreen(): void {\n if (this.isFullscreenActive()) {\n this.exitFullscreen();\n } else {\n this.enterFullscreen();\n }\n }\n\n enterFullscreen(): void {\n if (this.isFullscreenActive()) return;\n const el = this.host.nativeElement;\n this.fullScreenService.enter(el);\n this.isFullscreenActive.set(true);\n }\n\n /** @param emitGalleryClose When false, skips gallery close notification (used during service teardown). */\n exitFullscreen(emitGalleryClose = true): void {\n if (!this.isFullscreenActive() && !this.fullScreenService.isFullscreen()) {\n return;\n }\n\n const el = this.host.nativeElement;\n this.fullScreenService.exit(el);\n this.isFullscreenActive.set(false);\n\n if (this.galleryMode() && emitGalleryClose) {\n this.fullscreenClosed.emit();\n }\n }\n\n closeGallery(): void {\n this.exitFullscreen();\n }\n\n private async initCarousels(): Promise<void> {\n const token = ++this.initToken;\n const mainRef = this.mainCarouselRef();\n if (!mainRef || !this.service.items().length) {\n if (!this.loading()) {\n this.initializing.set(false);\n }\n return;\n }\n\n this.initializing.set(true);\n\n try {\n const thumbRef = this.thumbnail() ? this.thumbCarouselRef() : undefined;\n\n if (thumbRef?.carousel()) {\n thumbRef.carousel().destroy(true, true);\n }\n if (mainRef.carousel()) {\n mainRef.carousel().destroy(true, true);\n }\n\n if (thumbRef) {\n await thumbRef.init(this.thumbnailCarouselOptions);\n await mainRef.init({\n ...this.mainCarouselOptions,\n thumbs: { swiper: thumbRef.carousel() },\n });\n } else {\n await mainRef.init(this.mainCarouselOptions);\n }\n\n if (token !== this.initToken) return;\n\n mainRef.carousel()?.slideTo(this.service.selectedIndex(), 0);\n } finally {\n if (token === this.initToken) {\n this.initializing.set(false);\n }\n }\n }\n\n private readonly onSlideChange = (swiper: Swiper) => {\n this.service.selectedIndex.set(swiper.activeIndex);\n };\n\n next(): void {\n if (this.isLastSlide()) return;\n if (this.thumbnail()) {\n this.thumbCarouselRef()?.carousel()?.slideNext();\n }\n this.mainCarouselRef()?.carousel()?.slideNext();\n }\n\n prev(): void {\n if (this.isFirstSlide()) return;\n if (this.thumbnail()) {\n this.thumbCarouselRef()?.carousel()?.slidePrev();\n }\n this.mainCarouselRef()?.carousel()?.slidePrev();\n }\n\n goToIndex(index: number, speed = 300): void {\n this.service.selectedIndex.set(index);\n this.mainCarouselRef()?.carousel()?.slideTo(index, speed);\n if (this.thumbnail()) {\n this.thumbCarouselRef()?.carousel()?.slideTo(index, speed);\n }\n }\n\n async downloadCurrent(): Promise<void> {\n const item = this.currentItem();\n if (!item) return;\n const url = await this.service.resolveUrl(item, 'url');\n if (!url) return;\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = item.name ?? 'download';\n anchor.target = '_blank';\n anchor.rel = 'noopener';\n anchor.click();\n }\n\n ngOnDestroy(): void {\n this.mainCarouselRef()?.carousel()?.off('activeIndexChange', this.onSlideChange);\n this.exitFullscreen(false);\n }\n}\n","@if (isBusy()) {\n <div class=\"ax-file-viewer__loading\" aria-busy=\"true\" aria-live=\"polite\">\n <ax-loading></ax-loading>\n </div>\n}\n\n@if (currentItem(); as item) {\n <header\n class=\"ax-file-viewer__header\"\n [class.ax-file-viewer__header--no-content]=\"!hasHeaderCenterContent()\"\n >\n <div class=\"ax-file-viewer__meta\">\n <div class=\"ax-file-viewer__title-row\">\n <span class=\"ax-file-viewer__name\">{{ item.name || 'Untitled' }}</span>\n </div>\n <div class=\"ax-file-viewer__submeta\">\n @if (formatSize(item.size); as sizeLabel) {\n <span>{{ sizeLabel }}</span>\n <span class=\"ax-file-viewer__dot\">·</span>\n }\n <ax-badge\n class=\"ax-file-viewer__type-badge ax-pill ax-sm\"\n look=\"outline\"\n [color]=\"currentTypeColor()\"\n [text]=\"currentTypeLabel()\"\n />\n </div>\n @if (formatSize(item.size); as sizeLabel) {\n <div class=\"ax-file-viewer__submeta\">\n <span>{{ sizeLabel }}</span>\n </div>\n }\n </div>\n\n @if (hasHeaderCenterContent()) {\n <div class=\"ax-file-viewer__header-content\">\n @if (headerTemplateContent(); as template) {\n <ng-container *ngTemplateOutlet=\"template; context: headerContentContext()\" />\n } @else if (headerComponentContent(); as component) {\n <ng-container *ngComponentOutlet=\"component; inputs: headerContentInputs()\" />\n } @else if (headerPlaceholderTemplateContent(); as placeholderTemplate) {\n <ng-container *ngTemplateOutlet=\"placeholderTemplate; context: headerContentContext()\" />\n } @else if (headerPlaceholderComponentContent(); as placeholderComponent) {\n <ng-container *ngComponentOutlet=\"placeholderComponent; inputs: headerContentPlaceholderInputs()\" />\n }\n </div>\n }\n\n <div class=\"ax-file-viewer__header-actions\">\n @if (download()) {\n <ax-button\n class=\"ax-file-viewer__action-btn\"\n look=\"outline\"\n color=\"default\"\n [iconOnly]=\"true\"\n [axTooltip]=\"'Download'\"\n (onClick)=\"downloadCurrent()\"\n >\n <ax-icon icon=\"fa-light fa-download\"></ax-icon>\n </ax-button>\n }\n\n @if (fullscreen()) {\n <ax-button\n class=\"ax-file-viewer__action-btn ax-file-viewer__fullscreen-wrap\"\n look=\"outline\"\n color=\"default\"\n [iconOnly]=\"true\"\n [axTooltip]=\"isFullscreenActive() ? 'Close' : 'Fullscreen'\"\n (onClick)=\"toggleFullscreen()\"\n >\n <ax-icon [icon]=\"isFullscreenActive() ? 'fa-light fa-xmark' : 'fa-light fa-expand'\"></ax-icon>\n </ax-button>\n }\n </div>\n </header>\n}\n\n<div\n class=\"ax-file-viewer__stage\"\n [class.ax-file-viewer__stage--nav]=\"service.items().length > 1\"\n [class.ax-file-viewer__stage--hidden]=\"isBusy()\"\n>\n @if (service.items().length > 1) {\n <ax-button\n class=\"ax-file-viewer__nav ax-file-viewer__nav--prev\"\n look=\"solid\"\n color=\"default\"\n [iconOnly]=\"true\"\n [disabled]=\"isFirstSlide()\"\n (onClick)=\"prev()\"\n >\n <ax-icon icon=\"fa-light fa-chevron-left\"></ax-icon>\n </ax-button>\n }\n\n <div class=\"ax-file-viewer__canvas\">\n <div #mainCarousel=\"axCarousel\" axCarousel class=\"ax-carousel\">\n <div class=\"ax-carousel-wrapper\">\n @for (file of service.items(); track file.id) {\n <div class=\"ax-carousel-slide\">\n <ax-file-viewer-slide\n [item]=\"file\"\n [index]=\"$index\"\n [fallbackContent]=\"fallbackContent()\"\n [fallbackContentInputs]=\"fallbackContentInputs()\"\n [fallbackContentData]=\"fallbackContentData()\"\n />\n </div>\n }\n </div>\n </div>\n\n @if (service.items().length > 0) {\n <span class=\"ax-file-viewer__overlay-counter\">{{ slideCounter() }}</span>\n }\n </div>\n\n @if (service.items().length > 1) {\n <ax-button\n class=\"ax-file-viewer__nav ax-file-viewer__nav--next\"\n look=\"solid\"\n color=\"default\"\n [iconOnly]=\"true\"\n [disabled]=\"isLastSlide()\"\n (onClick)=\"next()\"\n >\n <ax-icon icon=\"fa-light fa-chevron-right\"></ax-icon>\n </ax-button>\n }\n</div>\n\n@if (thumbnail() && service.items().length > 1) {\n <footer class=\"ax-file-viewer__thumbs\" [class.ax-file-viewer__thumbs--hidden]=\"isBusy()\">\n <div class=\"ax-file-viewer__thumbs-track\">\n <div #thumbCarousel=\"axCarousel\" axCarousel class=\"ax-carousel\">\n <div class=\"ax-carousel-wrapper\">\n @for (file of service.items(); track file.id) {\n <div\n class=\"ax-carousel-slide ax-file-viewer__thumb\"\n [attr.data-type]=\"resolveFileType(file)\"\n [class.ax-file-viewer__thumb--active]=\"service.selectedIndex() === $index\"\n (click)=\"goToIndex($index)\"\n >\n <ax-file-viewer-thumb-preview [item]=\"file\" />\n <div class=\"ax-file-viewer__thumb-footer\">\n <span class=\"ax-file-viewer__thumb-name\">{{ file.name || resolveTypeLabel(file) }}</span>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </footer>\n}\n","import { AXComponentClosedPromise } from '@acorex/cdk/common';\nimport { AXOverlayRef, AXOverlayService } from '@acorex/cdk/overlay';\nimport { AXComponentInputs } from '@acorex/core/components';\nimport { ComponentRef, inject, Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { AXFileViewerContainerComponent } from './file-viewer-container/file-viewer-container.component';\nimport type { AXFileViewerGalleryConfig, AXFileViewerGalleryRef } from './file-viewer-gallery.types';\n\ninterface AXFileViewerGalleryEntry {\n overlay: AXOverlayRef<AXFileViewerContainerComponent>;\n gallery: AXFileViewerGalleryRef;\n closedSub?: { unsubscribe: () => void };\n}\n\n/** Opens {@link AXFileViewerContainerComponent} in fullscreen gallery mode. */\n@Injectable({ providedIn: 'root' })\nexport class AXFileViewerGalleryService {\n private readonly galleryList = new Map<number, AXFileViewerGalleryEntry>();\n private readonly overlayService = inject(AXOverlayService);\n\n /**\n * Opens a file viewer gallery in fullscreen.\n * @param config - Gallery configuration\n * @returns Promise that resolves when the gallery is closed\n */\n open(config: AXFileViewerGalleryConfig): AXComponentClosedPromise {\n const defaultConfig: AXFileViewerGalleryConfig = {\n items: [],\n startIndex: 0,\n thumbnail: true,\n download: true,\n loading: false,\n panelClass: [],\n };\n\n const mergedConfig = Object.assign(defaultConfig, config);\n\n const promise = new AXComponentClosedPromise((resolve) => {\n this.openInternal(mergedConfig).then((ref) => {\n ref.onClose.subscribe((data) => {\n resolve({\n sender: ref.componentInstance,\n data,\n });\n });\n });\n });\n\n return promise;\n }\n\n /**\n * Closes a gallery by its ID.\n * @param id - The gallery ID to close\n * @param data - Optional data to pass to the close event\n */\n close<TResult = unknown>(id: number, data?: TResult): void {\n const ref = this.galleryList.get(id);\n if (!ref) return;\n\n this.galleryList.delete(id);\n ref.closedSub?.unsubscribe();\n\n const componentRef = ref.overlay.instance as ComponentRef<AXFileViewerContainerComponent>;\n componentRef?.instance.exitFullscreen(false);\n\n ref.gallery.onClose.next(data);\n ref.gallery.onClose.complete();\n ref.overlay.dispose();\n }\n\n /**\n * Sets input values for a gallery by its ID.\n * @param id - The gallery ID\n * @param values - Object containing input values to set\n */\n setInputs(id: number, values: AXComponentInputs): void {\n const ref = this.galleryList.get(id)?.overlay.instance;\n if (!ref) return;\n if (ref instanceof ComponentRef) {\n Object.entries(values).forEach(([key, value]) => {\n ref.setInput(key, value);\n });\n }\n }\n\n /**\n * Brings a gallery to the front of all other overlays.\n * @param id - The gallery ID to bring to front\n */\n bringToFront(id: number): void {\n const ref = this.galleryList.get(id);\n if (!ref) return;\n ref.overlay.bringToFront();\n }\n\n private async openInternal(config: AXFileViewerGalleryConfig): Promise<AXFileViewerGalleryRef> {\n const randomId = Math.floor(Math.random() * 100000000000);\n const onClose = new Subject<unknown>();\n\n const returnRef: AXFileViewerGalleryRef = {\n close: (data) => {\n this.close(randomId, data);\n },\n setInputs: (values) => {\n this.setInputs(randomId, values);\n },\n bringToFront: () => {\n this.bringToFront(randomId);\n },\n onClose,\n };\n\n const panelClasses = ['ax-file-viewer-gallery-overlay'];\n if (config.panelClass?.length) {\n panelClasses.push(...config.panelClass);\n }\n\n const overlayRef = await this.overlayService.create(AXFileViewerContainerComponent, {\n backdrop: { enabled: false },\n panelClass: panelClasses,\n inputs: {\n items: config.items,\n startIndex: config.startIndex ?? 0,\n thumbnail: config.thumbnail ?? true,\n download: config.download ?? true,\n fullscreen: true,\n galleryMode: true,\n loading: config.loading ?? false,\n headerContent: config.headerContent ?? null,\n headerContentInputs: config.headerContentInputs ?? {},\n headerContentData: config.headerContentData,\n headerContentPlaceholder: config.headerContentPlaceholder ?? null,\n headerContentPlaceholderInputs: config.headerContentPlaceholderInputs ?? {},\n fallbackContent: config.fallbackContent ?? null,\n fallbackContentInputs: config.fallbackContentInputs ?? {},\n fallbackContentData: config.fallbackContentData,\n },\n });\n\n const componentRef = overlayRef.instance as ComponentRef<AXFileViewerContainerComponent>;\n returnRef.componentInstance = componentRef.instance;\n\n const closedSub = componentRef.instance.fullscreenClosed.subscribe(() => {\n this.close(randomId);\n });\n\n this.galleryList.set(randomId, { overlay: overlayRef, gallery: returnRef, closedSub });\n\n return returnRef;\n }\n}\n","import {\n AX_AUDIO_FILE_TYPE,\n AX_DOCUMENT_FILE_TYPE,\n AX_FILE_FILE_TYPE,\n AX_IMAGE_FILE_TYPE,\n AX_VIDEO_FILE_TYPE,\n defineFileType,\n type AXFileType,\n} from '@acorex/core/file';\n\nexport function createFileViewerFileTypes(): AXFileType[] {\n return [\n defineFileType({\n ...AX_IMAGE_FILE_TYPE,\n name: 'image',\n component: () =>\n import('../viewers/image-viewer.component').then((m) => m.AXFileViewerImageComponent),\n }),\n defineFileType({\n ...AX_VIDEO_FILE_TYPE,\n name: 'video',\n component: () =>\n import('../viewers/video-viewer.component').then((m) => m.AXFileViewerVideoComponent),\n }),\n defineFileType({\n ...AX_AUDIO_FILE_TYPE,\n name: 'audio',\n component: () =>\n import('../viewers/audio-viewer.component').then((m) => m.AXFileViewerAudioComponent),\n }),\n defineFileType({\n ...AX_DOCUMENT_FILE_TYPE,\n name: 'document',\n component: () =>\n import('../viewers/pdf-viewer.component').then((m) => m.AXFileViewerPdfComponent),\n extensions: (AX_DOCUMENT_FILE_TYPE.extensions ?? []).map((extension) =>\n extension.name.toLowerCase() === 'pdf'\n ? {\n ...extension,\n component: () => import('../viewers/pdf-viewer.component').then((m) => m.AXFileViewerPdfComponent),\n }\n : extension,\n ),\n }),\n defineFileType({\n ...AX_FILE_FILE_TYPE,\n name: 'file',\n component: () =>\n import('../viewers/file-fallback-viewer.component').then((m) => m.AXFileViewerFileFallbackComponent),\n }),\n ];\n}\n","import { AXFileTypeRegistryService } from '@acorex/core/file';\nimport { APP_INITIALIZER, type Provider } from '@angular/core';\nimport { createFileViewerFileTypes } from './file-types/file-viewer-file-types';\n\n/** Registers file-viewer components on standard file-type catalog entries. */\nexport function provideFileViewer(): Provider[] {\n return [\n {\n provide: APP_INITIALIZER,\n useFactory: (registry: AXFileTypeRegistryService) => () =>\n registry.registerTypes(createFileViewerFileTypes()),\n deps: [AXFileTypeRegistryService],\n multi: true,\n },\n ];\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/** Optional center header slot component for use with {@link headerContentPlaceholder}. */\n@Component({\n selector: 'ax-file-viewer-header-placeholder',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"ax-file-viewer__header-placeholder\">{{ slideCounter() }}</span>\n `,\n styles: `\n :host {\n display: flex;\n width: 100%;\n min-width: 0;\n align-items: center;\n justify-content: center;\n }\n\n .ax-file-viewer__header-placeholder {\n font-size: 0.8rem;\n font-weight: 500;\n color: var(--ax-fv-muted, rgba(var(--ax-sys-color-on-surface), 0.65));\n white-space: nowrap;\n }\n `,\n})\nexport class AXFileViewerHeaderPlaceholderComponent {\n readonly slideCounter = input('0 / 0');\n}\n","import { Component, computed, inject } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport { resolveFileViewerFileType } from '../resolve-file-viewer-file-type';\n\ninterface ThumbnailEntry {\n id: string;\n index: number;\n type: string;\n icon: string;\n}\n\nconst TYPE_ICON_MAP: Record<string, string> = {\n image: 'fa-light fa-image',\n video: 'fa-light fa-video',\n audio: 'fa-light fa-music',\n document: 'fa-light fa-file-lines',\n file: 'fa-light fa-file',\n};\n\n@Component({\n selector: 'ax-file-viewer-thumbnails',\n\n template: `\n <div class=\"ax-file-viewer-thumbnails\">\n @for (thumb of thumbnails(); track thumb.id) {\n <button\n class=\"ax-file-viewer-thumb\"\n [class.ax-file-viewer-thumb--active]=\"thumb.index === service.selectedIndex()\"\n (click)=\"service.selectedIndex.set(thumb.index)\"\n >\n <i [class]=\"thumb.icon\"></i>\n </button>\n }\n </div>\n `,\n styles: `\n :host {\n display: block;\n }\n .ax-file-viewer-thumbnails {\n display: flex;\n gap: 0.5rem;\n justify-content: center;\n padding: 0.5rem;\n flex-wrap: wrap;\n }\n .ax-file-viewer-thumb {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 3rem;\n height: 3rem;\n border-radius: var(--ax-sys-border-radius, 0.25rem);\n border: 1px solid rgb(var(--ax-sys-color-border-lightest-surface));\n background: transparent;\n cursor: pointer;\n opacity: 0.5;\n transition: opacity 0.2s;\n font-size: 1.25rem;\n color: rgb(var(--ax-sys-color-on-surface));\n }\n .ax-file-viewer-thumb--active {\n opacity: 1;\n border-color: rgb(var(--ax-sys-color-primary));\n }\n `,\n})\nexport class AXFileViewerThumbnailsComponent {\n readonly service = inject(AXFileViewerService);\n\n readonly thumbnails = computed<ThumbnailEntry[]>(() =>\n this.service.items().map((item, index) => {\n const type = resolveFileViewerFileType(item);\n return {\n id: item.id,\n index,\n type,\n icon: TYPE_ICON_MAP[type] ?? TYPE_ICON_MAP['file'],\n };\n }),\n );\n}\n","import { AXLoadingComponent } from '@acorex/components/loading';\nimport type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { Component, effect, inject, input, signal } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\n\n@Component({\n selector: 'ax-file-viewer-image',\n\n imports: [AXLoadingComponent],\n template: `\n @if (loading()) {\n <ax-loading></ax-loading>\n } @else if (src()) {\n <img [src]=\"src()\" [alt]=\"payload().item.name ?? 'Image'\" />\n }\n `,\n styles: `\n :host {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n padding: 0.75rem;\n box-sizing: border-box;\n }\n img {\n width: 100%;\n height: 100%;\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n border-radius: 0.75rem;\n }\n `,\n})\nexport class AXFileViewerImageComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {\n readonly payload = input.required<AXFileViewerViewPayload>();\n private readonly service = inject(AXFileViewerService);\n readonly src = signal<string | null>(null);\n readonly loading = signal(false);\n\n #resolve = effect(() => {\n const p = this.payload();\n if (p.active) {\n this.loading.set(true);\n void this.service\n .resolveUrl(p.item, 'url')\n .then((url) => this.src.set(url ?? null))\n .finally(() => this.loading.set(false));\n }\n });\n}\n","import { AXLoadingComponent } from '@acorex/components/loading';\nimport type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { Component, effect, inject, input, signal } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\n\n@Component({\n selector: 'ax-file-viewer-video',\n\n imports: [AXLoadingComponent],\n template: `\n @if (loading()) {\n <ax-loading></ax-loading>\n } @else if (src()) {\n <video controls [src]=\"src()\"></video>\n }\n `,\n styles: `\n :host {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n padding: 0.75rem;\n box-sizing: border-box;\n }\n video {\n width: 100%;\n height: 100%;\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n border-radius: 0.75rem;\n background: rgb(var(--ax-sys-color-dark));\n }\n `,\n})\nexport class AXFileViewerVideoComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {\n readonly payload = input.required<AXFileViewerViewPayload>();\n private readonly service = inject(AXFileViewerService);\n readonly src = signal<string | null>(null);\n readonly loading = signal(false);\n\n #resolve = effect(() => {\n const p = this.payload();\n if (p.active) {\n this.loading.set(true);\n void this.service\n .resolveUrl(p.item, 'url')\n .then((url) => this.src.set(url ?? null))\n .finally(() => this.loading.set(false));\n }\n });\n}\n","import { AXLoadingComponent } from '@acorex/components/loading';\nimport type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { Component, effect, inject, input, signal } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\n\n@Component({\n selector: 'ax-file-viewer-audio',\n\n imports: [AXLoadingComponent],\n template: `\n @if (loading()) {\n <ax-loading></ax-loading>\n } @else if (src()) {\n <audio controls [src]=\"src()\"></audio>\n }\n `,\n styles: `\n :host {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n padding: 1rem;\n box-sizing: border-box;\n }\n audio {\n width: 100%;\n max-width: min(40rem, 100%);\n min-width: 0;\n }\n `,\n})\nexport class AXFileViewerAudioComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {\n readonly payload = input.required<AXFileViewerViewPayload>();\n private readonly service = inject(AXFileViewerService);\n readonly src = signal<string | null>(null);\n readonly loading = signal(false);\n\n #resolve = effect(() => {\n const p = this.payload();\n if (p.active) {\n this.loading.set(true);\n void this.service\n .resolveUrl(p.item, 'url')\n .then((url) => this.src.set(url ?? null))\n .finally(() => this.loading.set(false));\n }\n });\n}\n","import { AXLoadingComponent } from '@acorex/components/loading';\nimport { AXPdfReaderComponent } from '@acorex/components/pdf-reader';\nimport type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { Component, effect, inject, input, signal } from '@angular/core';\nimport { DomSanitizer, type SafeResourceUrl } from '@angular/platform-browser';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\n\n@Component({\n selector: 'ax-file-viewer-pdf',\n\n imports: [AXLoadingComponent, AXPdfReaderComponent],\n template: `\n @if (loading()) {\n <ax-loading></ax-loading>\n } @else if (safeSrc()) {\n <ax-pdf-reader [src]=\"safeSrc()\"></ax-pdf-reader>\n }\n `,\n styles: `\n :host {\n display: flex;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n padding: 0.5rem;\n box-sizing: border-box;\n }\n ax-pdf-reader {\n display: block;\n width: 100%;\n height: 100%;\n }\n `,\n})\nexport class AXFileViewerPdfComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {\n readonly payload = input.required<AXFileViewerViewPayload>();\n private readonly service = inject(AXFileViewerService);\n private readonly sanitizer = inject(DomSanitizer);\n readonly safeSrc = signal<SafeResourceUrl | null>(null);\n readonly loading = signal(false);\n\n #resolve = effect(() => {\n const p = this.payload();\n if (p.active) {\n this.loading.set(true);\n void this.service\n .resolveUrl(p.item, 'url')\n .then((url) => {\n this.safeSrc.set(url ? this.sanitizer.bypassSecurityTrustResourceUrl(url) : null);\n })\n .finally(() => this.loading.set(false));\n }\n });\n}\n","import type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { Component, computed, input } from '@angular/core';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\n\n@Component({\n selector: 'ax-file-viewer-fallback',\n\n template: `\n <div class=\"ax-file-viewer-fallback\">\n <i class=\"fa-light fa-file ax-file-viewer-fallback__icon\"></i>\n @if (name()) {\n <span class=\"ax-file-viewer-fallback__name\">{{ name() }}</span>\n }\n </div>\n `,\n styles: `\n :host {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n box-sizing: border-box;\n }\n .ax-file-viewer-fallback {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.5rem;\n color: inherit;\n opacity: 0.85;\n }\n .ax-file-viewer-fallback__icon {\n font-size: 3rem;\n opacity: 0.55;\n }\n .ax-file-viewer-fallback__name {\n font-size: 0.875rem;\n opacity: 0.75;\n max-width: min(20rem, 80vw);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n `,\n})\nexport class AXFileViewerFileFallbackComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {\n readonly payload = input.required<AXFileViewerViewPayload>();\n readonly name = computed(() => this.payload().item.name);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["TYPE_ICON_MAP"],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@acorex/components",
3
- "version": "22.0.0-next.7",
3
+ "version": "22.0.0-next.8",
4
4
  "peerDependencies": {
5
- "@acorex/core": "22.0.0-next.7",
6
- "@acorex/cdk": "22.0.0-next.7",
5
+ "@acorex/core": "22.0.0-next.8",
6
+ "@acorex/cdk": "22.0.0-next.8",
7
7
  "polytype": ">=0.17.0",
8
8
  "angular-imask": ">=7.6.1",
9
9
  "imask": ">=7.6.1",
@@ -174,10 +174,6 @@
174
174
  "types": "./types/acorex-components-datetime-picker.d.ts",
175
175
  "default": "./fesm2022/acorex-components-datetime-picker.mjs"
176
176
  },
177
- "./datetime-text-box": {
178
- "types": "./types/acorex-components-datetime-text-box.d.ts",
179
- "default": "./fesm2022/acorex-components-datetime-text-box.mjs"
180
- },
181
177
  "./decorators": {
182
178
  "types": "./types/acorex-components-decorators.d.ts",
183
179
  "default": "./fesm2022/acorex-components-decorators.mjs"
@@ -56,7 +56,9 @@ declare class AXDateTimeBoxComponent extends AXDateTimeBoxComponent_base {
56
56
  */
57
57
  formatChange: EventEmitter<string>;
58
58
  /**
59
- * Indicates whether typing is allowed in the component.
59
+ * Indicates whether typing is allowed in the input.
60
+ * When false, clicking the input (or the calendar icon) opens the picker.
61
+ * When true, the input is for typing and the picker opens from the calendar button.
60
62
  *
61
63
  * @defaultValue false
62
64
  */
@@ -91,7 +93,7 @@ declare class AXDateTimeBoxComponent extends AXDateTimeBoxComponent_base {
91
93
  protected _editingDateObj: _angular_core.WritableSignal<Date>;
92
94
  protected readonly _calendarSystem: _angular_core.Signal<string>;
93
95
  protected readonly _resolvedFormat: _angular_core.Signal<string>;
94
- protected readonly _classicDateFields: _acorex_components_datetime_box.AXDateTimeBoxClassicField[];
96
+ protected readonly _classicDateFields: _angular_core.Signal<_acorex_components_datetime_box.AXDateTimeBoxClassicField[]>;
95
97
  protected readonly _classicTimeFields: _acorex_components_datetime_box.AXDateTimeBoxClassicField[];
96
98
  private readonly _classicTimeOptions;
97
99
  protected _classicDate: _angular_core.Signal<dist_packages_core_types_acorex_core_date_time.AXDateTime>;
@@ -125,7 +127,13 @@ declare class AXDateTimeBoxComponent extends AXDateTimeBoxComponent_base {
125
127
  text: string;
126
128
  }[];
127
129
  /**
128
- * @ignore
130
+ * Syncs typed input values into the box (and the picker via `_editingDateObj`).
131
+ * @ignore
132
+ */
133
+ protected _handleInputModelChange(value: Date | null): void;
134
+ /**
135
+ * Syncs picker selection into the box (and the input via `_editingDateObj`).
136
+ * @ignore
129
137
  */
130
138
  protected _handlePickerModelChange(value: Date | null): void;
131
139
  /**
@@ -163,7 +171,9 @@ declare class AXDateTimeBoxComponent extends AXDateTimeBoxComponent_base {
163
171
  */
164
172
  private _readSelectValue;
165
173
  /**
166
- * @ignore
174
+ * When typing is disabled, open the picker on input click.
175
+ * When typing is enabled, keep the picker closed so the user can type.
176
+ * @ignore
167
177
  */
168
178
  protected _handleInputOnClick(): void;
169
179
  private get __hostName();