@acorex/components 22.2.25 → 22.2.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{acorex-components-conversation-acorex-components-conversation-BBWe3tfe.mjs → acorex-components-conversation-acorex-components-conversation-CObX5Gdf.mjs} +85 -12
- package/fesm2022/acorex-components-conversation-acorex-components-conversation-CObX5Gdf.mjs.map +1 -0
- package/fesm2022/{acorex-components-conversation-picker-rename-file-dialog.component-OAHRGH_G.mjs → acorex-components-conversation-picker-rename-file-dialog.component-BlGupvO5.mjs} +2 -2
- package/fesm2022/{acorex-components-conversation-picker-rename-file-dialog.component-OAHRGH_G.mjs.map → acorex-components-conversation-picker-rename-file-dialog.component-BlGupvO5.mjs.map} +1 -1
- package/fesm2022/acorex-components-conversation.mjs +1 -1
- package/fesm2022/acorex-components-data-table.mjs +28 -8
- package/fesm2022/acorex-components-data-table.mjs.map +1 -1
- package/fesm2022/acorex-components-file-viewer.mjs +2 -6
- package/fesm2022/acorex-components-file-viewer.mjs.map +1 -1
- package/package.json +3 -3
- package/types/acorex-components-conversation.d.ts +15 -0
- package/types/acorex-components-data-table.d.ts +16 -0
- package/fesm2022/acorex-components-conversation-acorex-components-conversation-BBWe3tfe.mjs.map +0 -1
|
@@ -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/file-viewer-empty-state/file-viewer-empty-state.component.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/viewer-src.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 { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'ax-file-viewer-empty-state',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrl: './file-viewer-empty-state.component.css',\n template: `\n <div class=\"ax-file-viewer-empty\" role=\"status\" aria-live=\"polite\">\n <div class=\"ax-file-viewer-empty__icon-wrap\" aria-hidden=\"true\">\n <i class=\"fa-light fa-folder-open ax-file-viewer-empty__icon\"></i>\n </div>\n <h3 class=\"ax-file-viewer-empty__title\">No files to preview</h3>\n <p class=\"ax-file-viewer-empty__description\">\n Add files to the viewer to start browsing images, video, audio, PDF, and other formats.\n </p>\n </div>\n `,\n})\nexport class AXFileViewerEmptyStateComponent {}\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 type { AXComponentContent, AXComponentInputs } from '@acorex/core/components';\nimport { AXFileTypeRendererOutletComponent } from '@acorex/core/file';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, TemplateRef, Type, ViewEncapsulation } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerItem, AXFileViewerViewPayload } 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 encapsulation: ViewEncapsulation.None,\n styleUrl: './file-viewer-slide.component.css',\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})\nexport class AXFileViewerSlideComponent {\n readonly item = input.required<AXFileViewerItem>();\n readonly index = input.required<number>();\n readonly fallbackContent = input<AXComponentContent | null>(null);\n readonly fallbackContentInputs = input<AXComponentInputs | null>(null);\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 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\" (error)=\"onImageError()\" />\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 onImageError(): void {\n this.src.set(null);\n }\n\n private async resolvePreview(item: AXFileViewerItem): Promise<string | undefined> {\n const type = resolveFileViewerFileType(item);\n const [thumbnail, content] = await Promise.all([\n this.service.resolveUrl(item, 'thumbnailUrl'),\n this.service.resolveUrl(item, 'url'),\n ]);\n\n // PDF/zip/etc. often reuse the asset URL as thumbnailUrl — that cannot render in <img>.\n if (thumbnail && (type === 'image' || thumbnail !== content)) {\n return thumbnail;\n }\n if (type === 'image') {\n return content;\n }\n return undefined;\n }\n}\n","import { AXCarouselDirective, type AXCarouselOptions } from '@acorex/cdk/carousel';\nimport type { AXClickEvent, 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 type { AXMenuItem } from '@acorex/components/menu';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport type { AXComponentContent, AXComponentInputs } from '@acorex/core/components';\nimport { AXFullScreenService } from '@acorex/core/full-screen';\nimport { DOCUMENT, isPlatformBrowser, NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n output,\n PLATFORM_ID,\n signal,\n TemplateRef,\n Type,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport type Swiper from 'swiper';\nimport { AXFileViewerEmptyStateComponent } from '../file-viewer-empty-state/file-viewer-empty-state.component';\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 { AXFileViewerItem } from '../file-viewer.types';\nimport { resolveFileViewerFileType } from '../resolve-file-viewer-file-type';\n\nexport interface AXFileViewerHeaderActionClickEvent {\n sender: AXFileViewerContainerComponent;\n nativeEvent: Event;\n canceled: boolean;\n item: {\n name?: string;\n text: string;\n data?: unknown;\n };\n}\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 AXFileViewerEmptyStateComponent,\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 /** Header action buttons rendered in the top-right actions area. */\n readonly headerActions = input<AXMenuItem[]>([]);\n /** When true, opens in a gallery overlay and closes when fullscreen exits. */\n readonly galleryMode = input(false);\n readonly headerContent = input<AXComponentContent | null>(null);\n readonly headerContentInputs = input<AXComponentInputs | null>(null);\n readonly fallbackContent = input<AXComponentContent | null>(null);\n readonly fallbackContentInputs = input<AXComponentInputs | null>(null);\n /** Custom empty-state template or component. Falls back to the built-in empty state. */\n readonly emptyContent = input<AXComponentContent | null>(null);\n readonly emptyContentInputs = input<AXComponentInputs | null>(null);\n /** External loading flag — show overlay while parent data is being fetched. */\n readonly loading = input(false);\n\n readonly headerActionClick = output<AXFileViewerHeaderActionClickEvent>();\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 private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly destroyRef = inject(DestroyRef);\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 readonly isEmpty = computed(() => !this.loading() && !this.initializing() && this.service.items().length === 0);\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 hasHeaderCenterContent = computed(() => !!(this.headerTemplateContent() || this.headerComponentContent()));\n\n readonly emptyTemplateContent = computed(() => {\n const content = this.emptyContent();\n return content instanceof TemplateRef ? content : null;\n });\n\n readonly emptyComponentContent = computed(() => {\n const content = this.emptyContent();\n return content && typeof content === 'function' ? (content as Type<unknown>) : null;\n });\n\n readonly resolvedHeaderActions = computed(() => {\n this.isFullscreenActive();\n const customActions = this.headerActions();\n if (customActions.length > 0) {\n let hasFullscreenAction = false;\n\n return customActions.reduce<AXMenuItem[]>((actions, action) => {\n if (this.isFullscreenAction(action.name)) {\n if (hasFullscreenAction) {\n return actions;\n }\n hasFullscreenAction = true;\n }\n\n actions.push(this.resolveHeaderAction(action));\n return actions;\n }, []);\n }\n\n const actions: AXMenuItem[] = [];\n\n if (this.download()) {\n actions.push({\n name: 'download',\n text: 'Download',\n icon: 'fa-light fa-download',\n });\n }\n\n if (this.fullscreen()) {\n actions.push(\n this.resolveHeaderAction({\n name: 'fullscreen',\n text: 'Fullscreen',\n icon: 'fa-light fa-expand',\n }),\n );\n }\n\n return actions;\n });\n\n readonly headerContentContext = computed(() => ({\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 updateOnWindowResize: true,\n resizeObserver: true,\n keyboard: true,\n watchSlidesProgress: true,\n speed: 300,\n threshold: 8,\n simulateTouch: true,\n noSwipingSelector: 'video, audio, ax-pdf-reader, ax-pdf-reader *',\n on: {\n afterInit(swiper) {\n requestAnimationFrame(() => swiper.update());\n },\n },\n };\n\n private readonly thumbnailCarouselOptions: AXCarouselOptions = {\n spaceBetween: 10,\n slidesPerView: 'auto',\n watchSlidesProgress: true,\n updateOnWindowResize: true,\n resizeObserver: true,\n threshold: 8,\n };\n\n #syncItems = effect(() => {\n const items = this.items();\n const startIndex = this.startIndex();\n const previousItems = untracked(() => this.service.items());\n const previousIndex = untracked(() => this.service.selectedIndex());\n const sameIds =\n previousItems.length === items.length && previousItems.every((item, index) => item.id === items[index]?.id);\n\n this.service.items.set(items);\n\n const maxIndex = Math.max(items.length - 1, 0);\n if (sameIds) {\n this.service.selectedIndex.set(Math.min(previousIndex, maxIndex));\n } else {\n this.service.selectedIndex.set(Math.min(Math.max(startIndex, 0), maxIndex));\n }\n\n if (items.length > 0) {\n const hasCarousel = untracked(() => !!this.mainCarouselRef()?.carousel());\n if (!sameIds || !hasCarousel) {\n this.initializing.set(true);\n setTimeout(() => void this.initCarousels());\n }\n } else if (!this.loading()) {\n this.initializing.set(false);\n }\n });\n\n #bindSlideChange = effect((onCleanup) => {\n const carousel = this.mainCarouselRef()?.carousel();\n if (!carousel) return;\n carousel.on('activeIndexChange', this.onSlideChange);\n onCleanup(() => {\n carousel.off('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 constructor() {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n const onKeydown = (event: KeyboardEvent) => this.onFullscreenEscape(event);\n this.document.addEventListener('keydown', onKeydown);\n this.destroyRef.onDestroy(() => {\n this.document.removeEventListener('keydown', onKeydown);\n });\n }\n\n resolveHeaderAction(action: AXMenuItem): AXMenuItem {\n if (!this.isFullscreenAction(action.name)) {\n return action;\n }\n\n const isActive = this.isFullscreenActive();\n\n if (isActive) {\n return {\n ...action,\n name: 'fullscreen',\n text: 'Close fullscreen',\n title: 'Close fullscreen',\n icon: 'fa-light fa-close',\n };\n }\n\n return {\n ...action,\n name: 'fullscreen',\n text: action.text || 'Fullscreen',\n title: action.title ?? action.text ?? 'Fullscreen',\n icon: action.icon ?? 'fa-light fa-expand',\n };\n }\n\n onHeaderActionClick(action: AXMenuItem, event: AXClickEvent): void {\n if (action.disabled || action.isLoading) {\n return;\n }\n\n const resolvedAction = this.isFullscreenAction(action.name) ? { ...action, name: 'fullscreen' as const } : action;\n\n const clickEvent: AXFileViewerHeaderActionClickEvent = {\n sender: this,\n nativeEvent: event.nativeEvent,\n canceled: false,\n item: {\n name: resolvedAction.name,\n text: resolvedAction.text,\n data: resolvedAction.data,\n },\n };\n\n switch (resolvedAction.name) {\n case 'download':\n void this.downloadCurrent();\n break;\n case 'fullscreen':\n this.toggleFullscreen();\n break;\n }\n\n this.headerActionClick.emit(clickEvent);\n }\n\n private isFullscreenAction(name?: string): boolean {\n return name === 'fullscreen' || name === 'close';\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.toggleFullscreen();\n }\n\n private onFullscreenEscape(event: KeyboardEvent): void {\n if (event.key !== 'Escape' || event.repeat) {\n return;\n }\n\n const doc = this.document as Document & { webkitFullscreenElement?: Element | null };\n if (doc.fullscreenElement || doc.webkitFullscreenElement) {\n return;\n }\n\n if (!this.isFullscreenActive() && !this.fullScreenService.isActive(this.host.nativeElement)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\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 thumbRef?.destroy();\n mainRef.destroy();\n\n if (token !== this.initToken) return;\n\n if (thumbRef) {\n await thumbRef.init(this.thumbnailCarouselOptions);\n if (token !== this.initToken) {\n thumbRef.destroy();\n return;\n }\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) {\n thumbRef?.destroy();\n mainRef.destroy();\n return;\n }\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 if (this.service.selectedIndex() === swiper.activeIndex) return;\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()?.destroy();\n this.thumbCarouselRef()?.destroy();\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 (isEmpty()) {\n <div class=\"ax-file-viewer__empty\" [class.ax-file-viewer__empty--hidden]=\"isBusy()\">\n @if (emptyTemplateContent(); as template) {\n <ng-container *ngTemplateOutlet=\"template\" />\n } @else if (emptyComponentContent(); as component) {\n <ng-container *ngComponentOutlet=\"component; inputs: emptyContentInputs() ?? {}\" />\n } @else {\n <ax-file-viewer-empty-state />\n }\n </div>\n} @else {\n @if (currentItem(); as item) {\n <header class=\"ax-file-viewer__header\" [class.ax-file-viewer__header--no-content]=\"!hasHeaderCenterContent()\">\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 </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 }\n </div>\n }\n\n <div class=\"ax-file-viewer__header-actions\">\n @for (action of resolvedHeaderActions(); track action.name ?? action.text) {\n <ax-button\n class=\"rounded-full\"\n [color]=\"action.color ?? 'default'\"\n [iconOnly]=\"!!action.icon\"\n [disabled]=\"action.disabled\"\n [axTooltip]=\"action.title ?? action.text\"\n (onClick)=\"onHeaderActionClick(action, $event)\"\n >\n @if (action.isLoading) {\n <ax-loading></ax-loading>\n } @else if (action.icon) {\n <ax-icon [icon]=\"action.icon\"></ax-icon>\n } @else {\n {{ action.text }}\n }\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 look=\"solid\"\n class=\"ax-file-viewer__nav ax-file-viewer__nav--prev\"\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 />\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 (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}\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 headerActions: config.headerActions ?? [],\n galleryMode: true,\n loading: config.loading ?? false,\n headerContent: config.headerContent ?? null,\n headerContentInputs: config.headerContentInputs ?? null,\n fallbackContent: config.fallbackContent ?? null,\n fallbackContentInputs: config.fallbackContentInputs ?? null,\n emptyContent: config.emptyContent ?? null,\n emptyContentInputs: config.emptyContentInputs ?? null,\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, ViewEncapsulation } from '@angular/core';\n\n/** Optional center header slot component for use with {@link headerContent}. */\n@Component({\n selector: 'ax-file-viewer-header-placeholder',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrl: './file-viewer-header-placeholder.component.css',\n template: `\n <span class=\"ax-file-viewer__header-placeholder\">{{ slideCounter() }}</span>\n `,\n})\nexport class AXFileViewerHeaderPlaceholderComponent {\n readonly slideCounter = input('0 / 0');\n}\n","import { Component, computed, inject, ViewEncapsulation } 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 encapsulation: ViewEncapsulation.None,\n styleUrl: './file-viewer-thumbnails.component.css',\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})\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 type { AXFileViewerViewPayload } from '../file-viewer.types';\n\n/** Load the active slide and its neighbors so swipe transitions have content ready. */\nexport function shouldLoadViewerSlide(payload: AXFileViewerViewPayload, selectedIndex: number, distance = 1): boolean {\n return Math.abs(payload.index - selectedIndex) <= distance;\n}\n","import { AXLoadingComponent } from '@acorex/components/loading';\nimport type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { Component, effect, inject, input, signal, untracked, ViewEncapsulation } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\nimport { shouldLoadViewerSlide } from './viewer-src';\n\n@Component({\n selector: 'ax-file-viewer-image',\n encapsulation: ViewEncapsulation.None,\n imports: [AXLoadingComponent],\n styleUrl: './image-viewer.component.css',\n template: `\n @if (loading()) {\n <ax-loading></ax-loading>\n } @else if (src()) {\n <img [src]=\"src()\" [alt]=\"payload().item.name ?? 'Image'\" draggable=\"false\" />\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 private loadedId: string | null = null;\n\n #resolve = effect(() => {\n const p = this.payload();\n if (!shouldLoadViewerSlide(p, this.service.selectedIndex())) return;\n if (this.loadedId === p.item.id && untracked(() => this.src())) return;\n\n const itemId = p.item.id;\n this.loading.set(this.loadedId !== itemId || !untracked(() => this.src()));\n void this.service\n .resolveUrl(p.item, 'url')\n .then((url) => {\n this.loadedId = itemId;\n this.src.set(url ?? null);\n })\n .finally(() => this.loading.set(false));\n });\n}\n","import { AXLoadingComponent } from '@acorex/components/loading';\nimport type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { Component, effect, ElementRef, inject, input, signal, untracked, viewChild, ViewEncapsulation } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\nimport { shouldLoadViewerSlide } from './viewer-src';\n\n@Component({\n selector: 'ax-file-viewer-video',\n encapsulation: ViewEncapsulation.None,\n imports: [AXLoadingComponent],\n styleUrl: './video-viewer.component.css',\n template: `\n @if (loading()) {\n <ax-loading></ax-loading>\n } @else if (src()) {\n <video #mediaEl controls preload=\"metadata\" [src]=\"src()\" [draggable]=\"false\"></video>\n }\n `,\n})\nexport class AXFileViewerVideoComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {\n readonly payload = input.required<AXFileViewerViewPayload>();\n private readonly service = inject(AXFileViewerService);\n private readonly mediaEl = viewChild<ElementRef<HTMLVideoElement>>('mediaEl');\n readonly src = signal<string | null>(null);\n readonly loading = signal(false);\n private loadedId: string | null = null;\n\n #resolve = effect(() => {\n const p = this.payload();\n if (!shouldLoadViewerSlide(p, this.service.selectedIndex())) return;\n if (this.loadedId === p.item.id && untracked(() => this.src())) return;\n\n const itemId = p.item.id;\n this.loading.set(this.loadedId !== itemId || !untracked(() => this.src()));\n void this.service\n .resolveUrl(p.item, 'url')\n .then((url) => {\n this.loadedId = itemId;\n this.src.set(url ?? null);\n })\n .finally(() => this.loading.set(false));\n });\n\n #pauseInactive = effect(() => {\n const media = this.mediaEl()?.nativeElement;\n if (media && !this.payload().active) {\n media.pause();\n }\n });\n}\n","import { AXLoadingComponent } from '@acorex/components/loading';\nimport type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { Component, effect, ElementRef, inject, input, signal, untracked, viewChild, ViewEncapsulation } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\nimport { shouldLoadViewerSlide } from './viewer-src';\n\n@Component({\n selector: 'ax-file-viewer-audio',\n encapsulation: ViewEncapsulation.None,\n imports: [AXLoadingComponent],\n styleUrl: './audio-viewer.component.css',\n template: `\n @if (loading()) {\n <ax-loading></ax-loading>\n } @else if (src()) {\n <audio #mediaEl controls preload=\"metadata\" [src]=\"src()\"></audio>\n }\n `,\n})\nexport class AXFileViewerAudioComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {\n readonly payload = input.required<AXFileViewerViewPayload>();\n private readonly service = inject(AXFileViewerService);\n private readonly mediaEl = viewChild<ElementRef<HTMLAudioElement>>('mediaEl');\n readonly src = signal<string | null>(null);\n readonly loading = signal(false);\n private loadedId: string | null = null;\n\n #resolve = effect(() => {\n const p = this.payload();\n if (!shouldLoadViewerSlide(p, this.service.selectedIndex())) return;\n if (this.loadedId === p.item.id && untracked(() => this.src())) return;\n\n const itemId = p.item.id;\n this.loading.set(this.loadedId !== itemId || !untracked(() => this.src()));\n void this.service\n .resolveUrl(p.item, 'url')\n .then((url) => {\n this.loadedId = itemId;\n this.src.set(url ?? null);\n })\n .finally(() => this.loading.set(false));\n });\n\n #pauseInactive = effect(() => {\n const media = this.mediaEl()?.nativeElement;\n if (media && !this.payload().active) {\n media.pause();\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, untracked, ViewEncapsulation } from '@angular/core';\nimport { DomSanitizer, type SafeResourceUrl } from '@angular/platform-browser';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\nimport { shouldLoadViewerSlide } from './viewer-src';\n\n@Component({\n selector: 'ax-file-viewer-pdf',\n encapsulation: ViewEncapsulation.None,\n imports: [AXLoadingComponent, AXPdfReaderComponent],\n styleUrl: './pdf-viewer.component.css',\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})\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 private loadedId: string | null = null;\n\n #resolve = effect(() => {\n const p = this.payload();\n if (!shouldLoadViewerSlide(p, this.service.selectedIndex())) return;\n if (this.loadedId === p.item.id && untracked(() => this.safeSrc())) return;\n\n const itemId = p.item.id;\n this.loading.set(this.loadedId !== itemId || !untracked(() => this.safeSrc()));\n void this.service\n .resolveUrl(p.item, 'url')\n .then((url) => {\n this.loadedId = itemId;\n this.safeSrc.set(url ? this.sanitizer.bypassSecurityTrustResourceUrl(url) : null);\n })\n .finally(() => this.loading.set(false));\n });\n}\n","import type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\n\n@Component({\n selector: 'ax-file-viewer-fallback',\n encapsulation: ViewEncapsulation.None,\n styleUrl: './file-fallback-viewer.component.css',\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})\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/file-viewer-empty-state/file-viewer-empty-state.component.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/viewer-src.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 { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'ax-file-viewer-empty-state',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrl: './file-viewer-empty-state.component.css',\n template: `\n <div class=\"ax-file-viewer-empty\" role=\"status\" aria-live=\"polite\">\n <div class=\"ax-file-viewer-empty__icon-wrap\" aria-hidden=\"true\">\n <i class=\"fa-light fa-folder-open ax-file-viewer-empty__icon\"></i>\n </div>\n <h3 class=\"ax-file-viewer-empty__title\">No files to preview</h3>\n <p class=\"ax-file-viewer-empty__description\">\n Add files to the viewer to start browsing images, video, audio, PDF, and other formats.\n </p>\n </div>\n `,\n})\nexport class AXFileViewerEmptyStateComponent {}\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 type { AXComponentContent, AXComponentInputs } from '@acorex/core/components';\nimport { AXFileTypeRendererOutletComponent } from '@acorex/core/file';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, TemplateRef, Type, ViewEncapsulation } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerItem, AXFileViewerViewPayload } 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 encapsulation: ViewEncapsulation.None,\n styleUrl: './file-viewer-slide.component.css',\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})\nexport class AXFileViewerSlideComponent {\n readonly item = input.required<AXFileViewerItem>();\n readonly index = input.required<number>();\n readonly fallbackContent = input<AXComponentContent | null>(null);\n readonly fallbackContentInputs = input<AXComponentInputs | null>(null);\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 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\" (error)=\"onImageError()\" />\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 onImageError(): void {\n this.src.set(null);\n }\n\n private async resolvePreview(item: AXFileViewerItem): Promise<string | undefined> {\n const type = resolveFileViewerFileType(item);\n const [thumbnail, content] = await Promise.all([\n this.service.resolveUrl(item, 'thumbnailUrl'),\n this.service.resolveUrl(item, 'url'),\n ]);\n\n // PDF/zip/etc. often reuse the asset URL as thumbnailUrl — that cannot render in <img>.\n if (thumbnail && (type === 'image' || thumbnail !== content)) {\n return thumbnail;\n }\n if (type === 'image') {\n return content;\n }\n return undefined;\n }\n}\n","import { AXCarouselDirective, type AXCarouselOptions } from '@acorex/cdk/carousel';\nimport type { AXClickEvent, 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 type { AXMenuItem } from '@acorex/components/menu';\nimport type { AXComponentContent, AXComponentInputs } from '@acorex/core/components';\nimport { AXFullScreenService } from '@acorex/core/full-screen';\nimport { DOCUMENT, isPlatformBrowser, NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n output,\n PLATFORM_ID,\n signal,\n TemplateRef,\n Type,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport type Swiper from 'swiper';\nimport { AXFileViewerEmptyStateComponent } from '../file-viewer-empty-state/file-viewer-empty-state.component';\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 { AXFileViewerItem } from '../file-viewer.types';\nimport { resolveFileViewerFileType } from '../resolve-file-viewer-file-type';\n\nexport interface AXFileViewerHeaderActionClickEvent {\n sender: AXFileViewerContainerComponent;\n nativeEvent: Event;\n canceled: boolean;\n item: {\n name?: string;\n text: string;\n data?: unknown;\n };\n}\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 AXFileViewerEmptyStateComponent,\n AXFileViewerSlideComponent,\n AXFileViewerThumbPreviewComponent,\n AXBadgeComponent,\n AXButtonComponent,\n AXDecoratorIconComponent,\n AXLoadingComponent,\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 /** Header action buttons rendered in the top-right actions area. */\n readonly headerActions = input<AXMenuItem[]>([]);\n /** When true, opens in a gallery overlay and closes when fullscreen exits. */\n readonly galleryMode = input(false);\n readonly headerContent = input<AXComponentContent | null>(null);\n readonly headerContentInputs = input<AXComponentInputs | null>(null);\n readonly fallbackContent = input<AXComponentContent | null>(null);\n readonly fallbackContentInputs = input<AXComponentInputs | null>(null);\n /** Custom empty-state template or component. Falls back to the built-in empty state. */\n readonly emptyContent = input<AXComponentContent | null>(null);\n readonly emptyContentInputs = input<AXComponentInputs | null>(null);\n /** External loading flag — show overlay while parent data is being fetched. */\n readonly loading = input(false);\n\n readonly headerActionClick = output<AXFileViewerHeaderActionClickEvent>();\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 private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly destroyRef = inject(DestroyRef);\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 readonly isEmpty = computed(() => !this.loading() && !this.initializing() && this.service.items().length === 0);\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 hasHeaderCenterContent = computed(() => !!(this.headerTemplateContent() || this.headerComponentContent()));\n\n readonly emptyTemplateContent = computed(() => {\n const content = this.emptyContent();\n return content instanceof TemplateRef ? content : null;\n });\n\n readonly emptyComponentContent = computed(() => {\n const content = this.emptyContent();\n return content && typeof content === 'function' ? (content as Type<unknown>) : null;\n });\n\n readonly resolvedHeaderActions = computed(() => {\n this.isFullscreenActive();\n const customActions = this.headerActions();\n if (customActions.length > 0) {\n let hasFullscreenAction = false;\n\n return customActions.reduce<AXMenuItem[]>((actions, action) => {\n if (this.isFullscreenAction(action.name)) {\n if (hasFullscreenAction) {\n return actions;\n }\n hasFullscreenAction = true;\n }\n\n actions.push(this.resolveHeaderAction(action));\n return actions;\n }, []);\n }\n\n const actions: AXMenuItem[] = [];\n\n if (this.download()) {\n actions.push({\n name: 'download',\n text: 'Download',\n icon: 'fa-light fa-download',\n });\n }\n\n if (this.fullscreen()) {\n actions.push(\n this.resolveHeaderAction({\n name: 'fullscreen',\n text: 'Fullscreen',\n icon: 'fa-light fa-expand',\n }),\n );\n }\n\n return actions;\n });\n\n readonly headerContentContext = computed(() => ({\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 updateOnWindowResize: true,\n resizeObserver: true,\n keyboard: true,\n watchSlidesProgress: true,\n speed: 300,\n threshold: 8,\n simulateTouch: true,\n noSwipingSelector: 'video, audio, ax-pdf-reader, ax-pdf-reader *',\n on: {\n afterInit(swiper) {\n requestAnimationFrame(() => swiper.update());\n },\n },\n };\n\n private readonly thumbnailCarouselOptions: AXCarouselOptions = {\n spaceBetween: 10,\n slidesPerView: 'auto',\n watchSlidesProgress: true,\n updateOnWindowResize: true,\n resizeObserver: true,\n threshold: 8,\n };\n\n #syncItems = effect(() => {\n const items = this.items();\n const startIndex = this.startIndex();\n const previousItems = untracked(() => this.service.items());\n const previousIndex = untracked(() => this.service.selectedIndex());\n const sameIds =\n previousItems.length === items.length && previousItems.every((item, index) => item.id === items[index]?.id);\n\n this.service.items.set(items);\n\n const maxIndex = Math.max(items.length - 1, 0);\n if (sameIds) {\n this.service.selectedIndex.set(Math.min(previousIndex, maxIndex));\n } else {\n this.service.selectedIndex.set(Math.min(Math.max(startIndex, 0), maxIndex));\n }\n\n if (items.length > 0) {\n const hasCarousel = untracked(() => !!this.mainCarouselRef()?.carousel());\n if (!sameIds || !hasCarousel) {\n this.initializing.set(true);\n setTimeout(() => void this.initCarousels());\n }\n } else if (!this.loading()) {\n this.initializing.set(false);\n }\n });\n\n #bindSlideChange = effect((onCleanup) => {\n const carousel = this.mainCarouselRef()?.carousel();\n if (!carousel) return;\n carousel.on('activeIndexChange', this.onSlideChange);\n onCleanup(() => {\n carousel.off('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 constructor() {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n const onKeydown = (event: KeyboardEvent) => this.onFullscreenEscape(event);\n this.document.addEventListener('keydown', onKeydown);\n this.destroyRef.onDestroy(() => {\n this.document.removeEventListener('keydown', onKeydown);\n });\n }\n\n resolveHeaderAction(action: AXMenuItem): AXMenuItem {\n if (!this.isFullscreenAction(action.name)) {\n return action;\n }\n\n const isActive = this.isFullscreenActive();\n\n if (isActive) {\n return {\n ...action,\n name: 'fullscreen',\n text: 'Close fullscreen',\n icon: 'fa-light fa-close',\n };\n }\n\n return {\n ...action,\n name: 'fullscreen',\n text: action.text || 'Fullscreen',\n icon: action.icon ?? 'fa-light fa-expand',\n };\n }\n\n onHeaderActionClick(action: AXMenuItem, event: AXClickEvent): void {\n if (action.disabled || action.isLoading) {\n return;\n }\n\n const resolvedAction = this.isFullscreenAction(action.name) ? { ...action, name: 'fullscreen' as const } : action;\n\n const clickEvent: AXFileViewerHeaderActionClickEvent = {\n sender: this,\n nativeEvent: event.nativeEvent,\n canceled: false,\n item: {\n name: resolvedAction.name,\n text: resolvedAction.text,\n data: resolvedAction.data,\n },\n };\n\n switch (resolvedAction.name) {\n case 'download':\n void this.downloadCurrent();\n break;\n case 'fullscreen':\n this.toggleFullscreen();\n break;\n }\n\n this.headerActionClick.emit(clickEvent);\n }\n\n private isFullscreenAction(name?: string): boolean {\n return name === 'fullscreen' || name === 'close';\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.toggleFullscreen();\n }\n\n private onFullscreenEscape(event: KeyboardEvent): void {\n if (event.key !== 'Escape' || event.repeat) {\n return;\n }\n\n const doc = this.document as Document & { webkitFullscreenElement?: Element | null };\n if (doc.fullscreenElement || doc.webkitFullscreenElement) {\n return;\n }\n\n if (!this.isFullscreenActive() && !this.fullScreenService.isActive(this.host.nativeElement)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\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 thumbRef?.destroy();\n mainRef.destroy();\n\n if (token !== this.initToken) return;\n\n if (thumbRef) {\n await thumbRef.init(this.thumbnailCarouselOptions);\n if (token !== this.initToken) {\n thumbRef.destroy();\n return;\n }\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) {\n thumbRef?.destroy();\n mainRef.destroy();\n return;\n }\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 if (this.service.selectedIndex() === swiper.activeIndex) return;\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()?.destroy();\n this.thumbCarouselRef()?.destroy();\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 (isEmpty()) {\n <div class=\"ax-file-viewer__empty\" [class.ax-file-viewer__empty--hidden]=\"isBusy()\">\n @if (emptyTemplateContent(); as template) {\n <ng-container *ngTemplateOutlet=\"template\" />\n } @else if (emptyComponentContent(); as component) {\n <ng-container *ngComponentOutlet=\"component; inputs: emptyContentInputs() ?? {}\" />\n } @else {\n <ax-file-viewer-empty-state />\n }\n </div>\n} @else {\n @if (currentItem(); as item) {\n <header class=\"ax-file-viewer__header\" [class.ax-file-viewer__header--no-content]=\"!hasHeaderCenterContent()\">\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 </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 }\n </div>\n }\n\n <div class=\"ax-file-viewer__header-actions\">\n @for (action of resolvedHeaderActions(); track action.name ?? action.text) {\n <ax-button\n class=\"rounded-full\"\n [color]=\"action.color ?? 'default'\"\n [iconOnly]=\"!!action.icon\"\n [disabled]=\"action.disabled\"\n [attr.aria-label]=\"action.text\"\n (onClick)=\"onHeaderActionClick(action, $event)\"\n >\n @if (action.isLoading) {\n <ax-loading></ax-loading>\n } @else if (action.icon) {\n <ax-icon [icon]=\"action.icon\"></ax-icon>\n } @else {\n {{ action.text }}\n }\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 look=\"solid\"\n class=\"ax-file-viewer__nav ax-file-viewer__nav--prev\"\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 />\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 (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}\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 headerActions: config.headerActions ?? [],\n galleryMode: true,\n loading: config.loading ?? false,\n headerContent: config.headerContent ?? null,\n headerContentInputs: config.headerContentInputs ?? null,\n fallbackContent: config.fallbackContent ?? null,\n fallbackContentInputs: config.fallbackContentInputs ?? null,\n emptyContent: config.emptyContent ?? null,\n emptyContentInputs: config.emptyContentInputs ?? null,\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, ViewEncapsulation } from '@angular/core';\n\n/** Optional center header slot component for use with {@link headerContent}. */\n@Component({\n selector: 'ax-file-viewer-header-placeholder',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrl: './file-viewer-header-placeholder.component.css',\n template: `\n <span class=\"ax-file-viewer__header-placeholder\">{{ slideCounter() }}</span>\n `,\n})\nexport class AXFileViewerHeaderPlaceholderComponent {\n readonly slideCounter = input('0 / 0');\n}\n","import { Component, computed, inject, ViewEncapsulation } 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 encapsulation: ViewEncapsulation.None,\n styleUrl: './file-viewer-thumbnails.component.css',\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})\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 type { AXFileViewerViewPayload } from '../file-viewer.types';\n\n/** Load the active slide and its neighbors so swipe transitions have content ready. */\nexport function shouldLoadViewerSlide(payload: AXFileViewerViewPayload, selectedIndex: number, distance = 1): boolean {\n return Math.abs(payload.index - selectedIndex) <= distance;\n}\n","import { AXLoadingComponent } from '@acorex/components/loading';\nimport type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { Component, effect, inject, input, signal, untracked, ViewEncapsulation } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\nimport { shouldLoadViewerSlide } from './viewer-src';\n\n@Component({\n selector: 'ax-file-viewer-image',\n encapsulation: ViewEncapsulation.None,\n imports: [AXLoadingComponent],\n styleUrl: './image-viewer.component.css',\n template: `\n @if (loading()) {\n <ax-loading></ax-loading>\n } @else if (src()) {\n <img [src]=\"src()\" [alt]=\"payload().item.name ?? 'Image'\" draggable=\"false\" />\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 private loadedId: string | null = null;\n\n #resolve = effect(() => {\n const p = this.payload();\n if (!shouldLoadViewerSlide(p, this.service.selectedIndex())) return;\n if (this.loadedId === p.item.id && untracked(() => this.src())) return;\n\n const itemId = p.item.id;\n this.loading.set(this.loadedId !== itemId || !untracked(() => this.src()));\n void this.service\n .resolveUrl(p.item, 'url')\n .then((url) => {\n this.loadedId = itemId;\n this.src.set(url ?? null);\n })\n .finally(() => this.loading.set(false));\n });\n}\n","import { AXLoadingComponent } from '@acorex/components/loading';\nimport type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { Component, effect, ElementRef, inject, input, signal, untracked, viewChild, ViewEncapsulation } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\nimport { shouldLoadViewerSlide } from './viewer-src';\n\n@Component({\n selector: 'ax-file-viewer-video',\n encapsulation: ViewEncapsulation.None,\n imports: [AXLoadingComponent],\n styleUrl: './video-viewer.component.css',\n template: `\n @if (loading()) {\n <ax-loading></ax-loading>\n } @else if (src()) {\n <video #mediaEl controls preload=\"metadata\" [src]=\"src()\" [draggable]=\"false\"></video>\n }\n `,\n})\nexport class AXFileViewerVideoComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {\n readonly payload = input.required<AXFileViewerViewPayload>();\n private readonly service = inject(AXFileViewerService);\n private readonly mediaEl = viewChild<ElementRef<HTMLVideoElement>>('mediaEl');\n readonly src = signal<string | null>(null);\n readonly loading = signal(false);\n private loadedId: string | null = null;\n\n #resolve = effect(() => {\n const p = this.payload();\n if (!shouldLoadViewerSlide(p, this.service.selectedIndex())) return;\n if (this.loadedId === p.item.id && untracked(() => this.src())) return;\n\n const itemId = p.item.id;\n this.loading.set(this.loadedId !== itemId || !untracked(() => this.src()));\n void this.service\n .resolveUrl(p.item, 'url')\n .then((url) => {\n this.loadedId = itemId;\n this.src.set(url ?? null);\n })\n .finally(() => this.loading.set(false));\n });\n\n #pauseInactive = effect(() => {\n const media = this.mediaEl()?.nativeElement;\n if (media && !this.payload().active) {\n media.pause();\n }\n });\n}\n","import { AXLoadingComponent } from '@acorex/components/loading';\nimport type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { Component, effect, ElementRef, inject, input, signal, untracked, viewChild, ViewEncapsulation } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\nimport { shouldLoadViewerSlide } from './viewer-src';\n\n@Component({\n selector: 'ax-file-viewer-audio',\n encapsulation: ViewEncapsulation.None,\n imports: [AXLoadingComponent],\n styleUrl: './audio-viewer.component.css',\n template: `\n @if (loading()) {\n <ax-loading></ax-loading>\n } @else if (src()) {\n <audio #mediaEl controls preload=\"metadata\" [src]=\"src()\"></audio>\n }\n `,\n})\nexport class AXFileViewerAudioComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {\n readonly payload = input.required<AXFileViewerViewPayload>();\n private readonly service = inject(AXFileViewerService);\n private readonly mediaEl = viewChild<ElementRef<HTMLAudioElement>>('mediaEl');\n readonly src = signal<string | null>(null);\n readonly loading = signal(false);\n private loadedId: string | null = null;\n\n #resolve = effect(() => {\n const p = this.payload();\n if (!shouldLoadViewerSlide(p, this.service.selectedIndex())) return;\n if (this.loadedId === p.item.id && untracked(() => this.src())) return;\n\n const itemId = p.item.id;\n this.loading.set(this.loadedId !== itemId || !untracked(() => this.src()));\n void this.service\n .resolveUrl(p.item, 'url')\n .then((url) => {\n this.loadedId = itemId;\n this.src.set(url ?? null);\n })\n .finally(() => this.loading.set(false));\n });\n\n #pauseInactive = effect(() => {\n const media = this.mediaEl()?.nativeElement;\n if (media && !this.payload().active) {\n media.pause();\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, untracked, ViewEncapsulation } from '@angular/core';\nimport { DomSanitizer, type SafeResourceUrl } from '@angular/platform-browser';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\nimport { shouldLoadViewerSlide } from './viewer-src';\n\n@Component({\n selector: 'ax-file-viewer-pdf',\n encapsulation: ViewEncapsulation.None,\n imports: [AXLoadingComponent, AXPdfReaderComponent],\n styleUrl: './pdf-viewer.component.css',\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})\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 private loadedId: string | null = null;\n\n #resolve = effect(() => {\n const p = this.payload();\n if (!shouldLoadViewerSlide(p, this.service.selectedIndex())) return;\n if (this.loadedId === p.item.id && untracked(() => this.safeSrc())) return;\n\n const itemId = p.item.id;\n this.loading.set(this.loadedId !== itemId || !untracked(() => this.safeSrc()));\n void this.service\n .resolveUrl(p.item, 'url')\n .then((url) => {\n this.loadedId = itemId;\n this.safeSrc.set(url ? this.sanitizer.bypassSecurityTrustResourceUrl(url) : null);\n })\n .finally(() => this.loading.set(false));\n });\n}\n","import type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\n\n@Component({\n selector: 'ax-file-viewer-fallback',\n encapsulation: ViewEncapsulation.None,\n styleUrl: './file-fallback-viewer.component.css',\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})\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.2.
|
|
3
|
+
"version": "22.2.27",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@acorex/core": "22.2.
|
|
6
|
-
"@acorex/cdk": "22.2.
|
|
5
|
+
"@acorex/core": "22.2.27",
|
|
6
|
+
"@acorex/cdk": "22.2.27",
|
|
7
7
|
"@angular/aria": ">=22.1.0",
|
|
8
8
|
"polytype": ">=0.17.0",
|
|
9
9
|
"hammerjs": ">=2.0.8",
|
|
@@ -1712,6 +1712,7 @@ declare class AXConversationComposerComponent implements OnDestroy {
|
|
|
1712
1712
|
readonly placeholder: _angular_core.Signal<string>;
|
|
1713
1713
|
constructor();
|
|
1714
1714
|
private draftSaveTimeout?;
|
|
1715
|
+
private seededEditMessageId;
|
|
1715
1716
|
/** Number of input rows - use service */
|
|
1716
1717
|
readonly inputRows: _angular_core.Signal<number>;
|
|
1717
1718
|
/** Can send message - use service */
|
|
@@ -1738,6 +1739,10 @@ declare class AXConversationComposerComponent implements OnDestroy {
|
|
|
1738
1739
|
readonly defaultAction: _angular_core.Signal<AXConversationComposerAction>;
|
|
1739
1740
|
/** Handle key down (send on Enter; typing is driven by draft changes only). */
|
|
1740
1741
|
onKeyDown(event: AXHtmlEvent<KeyboardEvent>): void;
|
|
1742
|
+
/** Keep the draft signal in sync with ngModel (signal two-way bind is unreliable on ax-text-area). */
|
|
1743
|
+
onDraftModelChange(value: string): void;
|
|
1744
|
+
/** Keep the draft signal in sync with ax-text-area CVA output. */
|
|
1745
|
+
onDraftValueChanged(event: unknown): void;
|
|
1741
1746
|
/** Handle draft text changes — throttled typing indicator via conversation service. */
|
|
1742
1747
|
onDraftChanged(): void;
|
|
1743
1748
|
/** Cleanup on destroy */
|
|
@@ -1791,6 +1796,11 @@ declare class AXConversationComposerComponent implements OnDestroy {
|
|
|
1791
1796
|
startReply(message: AXConversationMessage): void;
|
|
1792
1797
|
/** Focus the native textarea inside ax-text-area */
|
|
1793
1798
|
private focusTextArea;
|
|
1799
|
+
/** Prefer the visible textarea when it differs from the original edit; else the draft signal. */
|
|
1800
|
+
private resolveComposerText;
|
|
1801
|
+
private readOriginalEditText;
|
|
1802
|
+
private readNativeComposerText;
|
|
1803
|
+
private readChangedText;
|
|
1794
1804
|
private getClickTarget;
|
|
1795
1805
|
/** Handle action click */
|
|
1796
1806
|
onActionClick(actionId: string, event?: AXClickEvent | MouseEvent, initialFiles?: File[]): Promise<void>;
|
|
@@ -2085,6 +2095,7 @@ interface AXConversationUpdateData {
|
|
|
2085
2095
|
interface AXConversationDeleteOptions {
|
|
2086
2096
|
/**
|
|
2087
2097
|
* Private: destroy the chat for every participant (Telegram "delete for both").
|
|
2098
|
+
* Bot: always delete for both sides.
|
|
2088
2099
|
* Group/channel: only valid for the creator — destroys the room for everyone.
|
|
2089
2100
|
* Defaults to `false` (hide / clear history for the current user only).
|
|
2090
2101
|
*/
|
|
@@ -3443,8 +3454,10 @@ declare class AXConversationService {
|
|
|
3443
3454
|
/**
|
|
3444
3455
|
* Delete, hide, or leave a conversation.
|
|
3445
3456
|
* Opens a confirmation popup (checkbox for private/creator destroy), then updates the store.
|
|
3457
|
+
* Bot chats skip the prompt and always delete for both sides.
|
|
3446
3458
|
*/
|
|
3447
3459
|
deleteConversation(conversationId: string): Promise<boolean>;
|
|
3460
|
+
private performDeleteConversation;
|
|
3448
3461
|
/**
|
|
3449
3462
|
* Get reply count for a message
|
|
3450
3463
|
* @param messageId - Message ID
|
|
@@ -5675,6 +5688,7 @@ declare const AX_CONVERSATION_INFO_BAR_ARCHIVE_ACTION: AXConversationInfoBarActi
|
|
|
5675
5688
|
/**
|
|
5676
5689
|
* Delete/Leave conversation action (smart action that adapts based on conversation type)
|
|
5677
5690
|
* - Private: "Delete" - Deletes the conversation
|
|
5691
|
+
* - Bot: "Delete" - Deletes for both sides without a confirmation prompt
|
|
5678
5692
|
* - Group/Channel: "Leave & Delete" - Leaves the group and removes it from list
|
|
5679
5693
|
*/
|
|
5680
5694
|
declare const AX_CONVERSATION_INFO_BAR_DELETE_ACTION: AXConversationInfoBarAction;
|
|
@@ -6308,6 +6322,7 @@ declare const AX_CONVERSATION_ITEM_DIVIDER: AXConversationItemAction;
|
|
|
6308
6322
|
/**
|
|
6309
6323
|
* Delete/Leave conversation action (smart action that adapts based on conversation type)
|
|
6310
6324
|
* - Private: "Delete" - Deletes the conversation
|
|
6325
|
+
* - Bot: "Delete" - Deletes for both sides without a confirmation prompt
|
|
6311
6326
|
* - Group/Channel: "Leave & Delete" - Leaves the group and removes it from list
|
|
6312
6327
|
*/
|
|
6313
6328
|
declare const AX_CONVERSATION_ITEM_DELETE_ACTION: AXConversationItemAction;
|
|
@@ -848,6 +848,8 @@ interface DataTableBandHeaderCell {
|
|
|
848
848
|
type: 'band';
|
|
849
849
|
caption: string;
|
|
850
850
|
colspan: number;
|
|
851
|
+
/** Index of the last leaf column covered by this band within the current header section. */
|
|
852
|
+
endLeafIndex: number;
|
|
851
853
|
/** Top-level column used for drag-reorder on the first header row. */
|
|
852
854
|
column: AXDataTableColumnComponent;
|
|
853
855
|
}
|
|
@@ -855,6 +857,8 @@ interface DataTableLeafHeaderCell {
|
|
|
855
857
|
type: 'leaf';
|
|
856
858
|
column: AXDataTableColumnComponent;
|
|
857
859
|
rowspan: number;
|
|
860
|
+
/** Leaf column index within the current header section. */
|
|
861
|
+
endLeafIndex: number;
|
|
858
862
|
}
|
|
859
863
|
interface DataTableGapHeaderCell {
|
|
860
864
|
type: 'gap';
|
|
@@ -969,6 +973,18 @@ declare class AXDataTableComponent extends AXBaseDataTable implements OnInit, Af
|
|
|
969
973
|
* @ignore
|
|
970
974
|
*/
|
|
971
975
|
protected getEffectiveFixed(column: AXDataTableColumnComponent): 'start' | 'end' | undefined;
|
|
976
|
+
/**
|
|
977
|
+
* Last scrollable (non–start/end-fixed) leaf column — the cell immediately before the spacer col.
|
|
978
|
+
*
|
|
979
|
+
* @ignore
|
|
980
|
+
*/
|
|
981
|
+
protected isLastNormalLeafColumn(column: AXDataTableColumnComponent): boolean;
|
|
982
|
+
/**
|
|
983
|
+
* Header band/leaf whose inline-end edge aligns with the last scrollable leaf column.
|
|
984
|
+
*
|
|
985
|
+
* @ignore
|
|
986
|
+
*/
|
|
987
|
+
protected isNormalHeaderCellAtLastScrollableEdge(cell: DataTableHeaderCell): boolean;
|
|
972
988
|
/**
|
|
973
989
|
* Whether leaf cells for this column draw a trailing (inline-end) vertical border.
|
|
974
990
|
* Must stay aligned with `data-table.component.css` border-e rules.
|