@acorex/components 21.0.3-next.41 → 21.0.3-next.43
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-badge.mjs +17 -12
- package/fesm2022/acorex-components-badge.mjs.map +1 -1
- package/fesm2022/acorex-components-file-viewer.mjs +736 -0
- package/fesm2022/acorex-components-file-viewer.mjs.map +1 -0
- package/fesm2022/acorex-components-kbd.mjs +2 -2
- package/fesm2022/acorex-components-kbd.mjs.map +1 -1
- package/package.json +11 -6
- package/types/acorex-components-badge.d.ts +2 -4
- package/types/acorex-components-file-viewer.d.ts +178 -0
|
@@ -0,0 +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-types/file-viewer-file-types.ts","../../../../packages/components/file-viewer/src/lib/provide-file-viewer.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-thumbnails/file-viewer-thumbnails.component.ts","../../../../packages/components/file-viewer/src/lib/viewers/image-viewer.component.ts","../../../../packages/components/file-viewer/src/lib/viewers/video-viewer.component.ts","../../../../packages/components/file-viewer/src/lib/viewers/audio-viewer.component.ts","../../../../packages/components/file-viewer/src/lib/viewers/pdf-viewer.component.ts","../../../../packages/components/file-viewer/src/lib/viewers/file-fallback-viewer.component.ts","../../../../packages/components/file-viewer/src/acorex-components-file-viewer.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\nimport type { AXFileViewerItem } from './file-viewer.types';\n\n/** Carousel state shared between container, slides and thumbnails. Provided per-container. */\n@Injectable()\nexport class AXFileViewerService {\n readonly items = signal<AXFileViewerItem[]>([]);\n readonly selectedIndex = signal(0);\n\n private readonly urlCache = new Map<string, string>();\n\n /** Resolve a potentially lazy URL — caches the result. */\n async resolveUrl(item: AXFileViewerItem, key: 'url' | 'thumbnailUrl'): Promise<string | undefined> {\n const raw = item[key];\n if (!raw) {\n return undefined;\n }\n const cacheKey = `${item.id}:${key}`;\n const cached = this.urlCache.get(cacheKey);\n if (cached) {\n return cached;\n }\n const resolved = typeof raw === 'function' ? await raw() : raw;\n this.urlCache.set(cacheKey, resolved);\n return resolved;\n }\n}\n","import {\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 type { AXFileTypeExtensionHint } from '@acorex/core/file';\nimport type { AXFileViewerItem } from './file-viewer.types';\n\nconst MIME_PREFIX_MAP: Record<string, string> = {\n 'image/': 'image',\n 'video/': 'video',\n 'audio/': 'audio',\n 'application/pdf': 'document',\n};\n\n/** Infers a file-type catalog name from the item. */\nexport function resolveFileViewerFileType(item: AXFileViewerItem): string {\n if (item.fileType) {\n return item.fileType;\n }\n if (item.mimeType) {\n const mime = item.mimeType.toLowerCase();\n for (const [prefix, name] of Object.entries(MIME_PREFIX_MAP)) {\n if (mime.startsWith(prefix) || mime === prefix) {\n return name;\n }\n }\n }\n if (item.extension) {\n const ext = item.extension.replace(/^\\./, '').toLowerCase();\n if (['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg'].includes(ext)) return 'image';\n if (['mp4', 'webm', 'ogg'].includes(ext)) return 'video';\n if (['mp3', 'wav', 'm4a'].includes(ext)) return 'audio';\n if (ext === 'pdf') return 'document';\n }\n return 'file';\n}\n\n/** Builds an extension hint from item metadata. */\nexport function buildFileViewerExtensionHint(item: AXFileViewerItem): AXFileTypeExtensionHint | undefined {\n if (!item.mimeType && !item.extension) {\n return undefined;\n }\n return {\n mimeType: item.mimeType,\n extensionName: item.extension,\n };\n}\n","import { AXFileTypeRendererOutletComponent } from '@acorex/core/file';\nimport { ChangeDetectionStrategy, Component, computed, inject, input } 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 imports: [AXFileTypeRendererOutletComponent],\n template: `\n <ax-file-type-renderer [fileType]=\"fileTypeName()\" [payload]=\"viewPayload()\" [extensionHint]=\"extensionHint()\" />\n `,\n styles: `\n :host {\n display: flex;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n align-items: stretch;\n justify-content: stretch;\n user-select: none;\n box-sizing: border-box;\n }\n `,\n})\nexport class AXFileViewerSlideComponent {\n readonly item = input.required<AXFileViewerItem>();\n readonly index = input.required<number>();\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","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport { resolveFileViewerFileType } from '../resolve-file-viewer-file-type';\nimport type { AXFileViewerItem } from '../file-viewer.types';\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 changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'ax-file-viewer__thumb-preview' },\n template: `\n @if (src()) {\n <img [src]=\"src()!\" [alt]=\"item().name ?? ''\" loading=\"lazy\" />\n } @else {\n <i [class]=\"icon()\"></i>\n }\n `,\n})\nexport class AXFileViewerThumbPreviewComponent {\n readonly item = input.required<AXFileViewerItem>();\n\n private readonly service = inject(AXFileViewerService);\n\n readonly src = signal<string | null>(null);\n readonly icon = computed(() => {\n const type = resolveFileViewerFileType(this.item());\n return TYPE_ICON_MAP[type] ?? TYPE_ICON_MAP['file'];\n });\n\n #resolve = effect((onCleanup) => {\n const item = this.item();\n this.src.set(null);\n let cancelled = false;\n onCleanup(() => {\n cancelled = true;\n });\n void this.resolvePreview(item).then((url) => {\n if (!cancelled) {\n this.src.set(url ?? null);\n }\n });\n });\n\n private async resolvePreview(item: AXFileViewerItem): Promise<string | undefined> {\n const thumbnail = await this.service.resolveUrl(item, 'thumbnailUrl');\n if (thumbnail) {\n return thumbnail;\n }\n // Images can use the main asset URL when no dedicated thumbnail is provided.\n if (resolveFileViewerFileType(item) === 'image') {\n return this.service.resolveUrl(item, 'url');\n }\n return undefined;\n }\n}\n","import { AXCarouselDirective, type AXCarouselOptions } from '@acorex/cdk/carousel';\nimport type { AXStyleColorType } from '@acorex/cdk/common';\nimport { AXBadgeComponent } from '@acorex/components/badge';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport {\n AXDecoratorFullScreenButtonComponent,\n AXDecoratorIconComponent,\n} from '@acorex/components/decorators';\nimport { AXLoadingComponent } from '@acorex/components/loading';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXZIndexService, type AXZToken } from '@acorex/core/z-index';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport type Swiper from 'swiper';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport { AXFileViewerSlideComponent } from '../file-viewer-slide/file-viewer-slide.component';\nimport { AXFileViewerThumbPreviewComponent } from '../file-viewer-thumb-preview/file-viewer-thumb-preview.component';\nimport { resolveFileViewerFileType } from '../resolve-file-viewer-file-type';\nimport type { AXFileViewerItem } from '../file-viewer.types';\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 providers: [AXFileViewerService],\n imports: [\n AXCarouselDirective,\n AXFileViewerSlideComponent,\n AXFileViewerThumbPreviewComponent,\n AXBadgeComponent,\n AXButtonComponent,\n AXDecoratorIconComponent,\n AXDecoratorFullScreenButtonComponent,\n AXLoadingComponent,\n AXTooltipDirective,\n ],\n})\nexport class AXFileViewerContainerComponent implements OnDestroy {\n readonly items = input<AXFileViewerItem[]>([]);\n readonly thumbnail = input(true);\n readonly pagination = input(true);\n readonly download = input(true);\n readonly fullscreen = input(true);\n /** External loading flag — show overlay while parent data is being fetched. */\n readonly loading = input(false);\n\n readonly service = inject(AXFileViewerService);\n private readonly host = inject(ElementRef<HTMLElement>);\n private readonly zIndexService = inject(AXZIndexService);\n\n private readonly mainCarouselRef = viewChild<AXCarouselDirective>('mainCarousel');\n private readonly thumbCarouselRef = viewChild<AXCarouselDirective>('thumbCarousel');\n private readonly fullScreenButton = viewChild(AXDecoratorFullScreenButtonComponent);\n\n private zToken: AXZToken | null = null;\n private initToken = 0;\n\n /** True while carousels are being (re)initialized. */\n readonly initializing = signal(true);\n\n readonly isBusy = computed(() => this.loading() || this.initializing());\n\n readonly isFirstSlide = computed(() => this.service.selectedIndex() <= 0);\n readonly isLastSlide = computed(\n () => this.service.selectedIndex() >= Math.max(this.service.items().length - 1, 0),\n );\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(\n () => TYPE_COLOR_MAP[this.currentFileType()] ?? 'secondary',\n );\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 resolveFileType = resolveFileViewerFileType;\n\n resolveTypeLabel(item: AXFileViewerItem): string {\n return TYPE_LABEL_MAP[resolveFileViewerFileType(item)] ?? 'FILE';\n }\n\n formatSize(size?: number): string {\n if (size == null || Number.isNaN(size)) return '';\n if (size < 1024) return `${size} B`;\n if (size < 1024 * 1024) return `${(size / 1024).toFixed(1)} KB`;\n return `${(size / (1024 * 1024)).toFixed(1)} MB`;\n }\n\n private readonly mainCarouselOptions: AXCarouselOptions = {\n slidesPerView: 1,\n observer: true,\n observeParents: true,\n updateOnWindowResize: true,\n resizeObserver: true,\n keyboard: true,\n watchSlidesProgress: true,\n speed: 300,\n };\n\n private readonly thumbnailCarouselOptions: AXCarouselOptions = {\n spaceBetween: 10,\n slidesPerView: 'auto',\n watchSlidesProgress: true,\n observer: true,\n observeParents: true,\n updateOnWindowResize: true,\n resizeObserver: true,\n };\n\n #syncItems = effect(() => {\n const items = this.items();\n this.service.items.set(items);\n if (items.length > 0) {\n this.initializing.set(true);\n setTimeout(() => void this.initCarousels());\n } else if (!this.loading()) {\n this.initializing.set(false);\n }\n });\n\n #bindSlideChange = effect(() => {\n const carousel = this.mainCarouselRef()?.carousel();\n if (carousel) {\n carousel.on('activeIndexChange', this.onSlideChange);\n }\n });\n\n #bindFullscreenTarget = effect(() => {\n const btn = this.fullScreenButton();\n if (!btn) return;\n const host = this.host.nativeElement;\n untracked(() => {\n if (btn.element() !== host) {\n btn.element.set(host);\n }\n });\n });\n\n #init = afterNextRender(() => {\n void this.initCarousels();\n });\n\n #fullScreenClass = effect(() => {\n const active = this.fullScreenButton()?.isActive() ?? false;\n const el = this.host.nativeElement;\n if (active) {\n el.classList.add('ax-file-viewer--fullscreen');\n this.acquireFullscreenZIndex(el);\n } else {\n el.classList.remove('ax-file-viewer--fullscreen');\n this.releaseFullscreenZIndex(el);\n }\n });\n\n private acquireFullscreenZIndex(el: HTMLElement): void {\n if (this.zToken) {\n this.zToken = this.zIndexService.bringToFront(this.zToken);\n } else {\n this.zToken = this.zIndexService.acquire();\n }\n el.style.zIndex = String(this.zToken.zIndex);\n }\n\n private releaseFullscreenZIndex(el: HTMLElement): void {\n if (!this.zToken) return;\n this.zIndexService.release(this.zToken);\n this.zToken = null;\n el.style.zIndex = '';\n }\n\n private async initCarousels(): Promise<void> {\n const token = ++this.initToken;\n const mainRef = this.mainCarouselRef();\n if (!mainRef || !this.service.items().length) {\n if (!this.loading()) {\n this.initializing.set(false);\n }\n return;\n }\n\n this.initializing.set(true);\n\n try {\n const thumbRef = this.thumbnail() ? this.thumbCarouselRef() : undefined;\n\n if (thumbRef?.carousel()) {\n thumbRef.carousel().destroy(true, true);\n }\n if (mainRef.carousel()) {\n mainRef.carousel().destroy(true, true);\n }\n\n if (thumbRef) {\n await thumbRef.init(this.thumbnailCarouselOptions);\n await mainRef.init({\n ...this.mainCarouselOptions,\n thumbs: { swiper: thumbRef.carousel() },\n });\n } else {\n await mainRef.init(this.mainCarouselOptions);\n }\n\n if (token !== this.initToken) return;\n\n mainRef.carousel()?.slideTo(this.service.selectedIndex(), 0);\n } finally {\n if (token === this.initToken) {\n this.initializing.set(false);\n }\n }\n }\n\n private readonly onSlideChange = (swiper: Swiper) => {\n this.service.selectedIndex.set(swiper.activeIndex);\n };\n\n next(): void {\n if (this.isLastSlide()) return;\n if (this.thumbnail()) {\n this.thumbCarouselRef()?.carousel()?.slideNext();\n }\n this.mainCarouselRef()?.carousel()?.slideNext();\n }\n\n prev(): void {\n if (this.isFirstSlide()) return;\n if (this.thumbnail()) {\n this.thumbCarouselRef()?.carousel()?.slidePrev();\n }\n this.mainCarouselRef()?.carousel()?.slidePrev();\n }\n\n goToIndex(index: number, speed = 300): void {\n this.service.selectedIndex.set(index);\n this.mainCarouselRef()?.carousel()?.slideTo(index, speed);\n if (this.thumbnail()) {\n this.thumbCarouselRef()?.carousel()?.slideTo(index, speed);\n }\n }\n\n async downloadCurrent(): Promise<void> {\n const item = this.currentItem();\n if (!item) return;\n const url = await this.service.resolveUrl(item, 'url');\n if (!url) return;\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = item.name ?? 'download';\n anchor.target = '_blank';\n anchor.rel = 'noopener';\n anchor.click();\n }\n\n ngOnDestroy(): void {\n this.mainCarouselRef()?.carousel()?.off('activeIndexChange', this.onSlideChange);\n this.releaseFullscreenZIndex(this.host.nativeElement);\n }\n}\n","@if (isBusy()) {\n <div class=\"ax-file-viewer__loading\" aria-busy=\"true\" aria-live=\"polite\">\n <ax-loading></ax-loading>\n </div>\n}\n\n@if (currentItem(); as item) {\n <header class=\"ax-file-viewer__header\">\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 <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 class=\"ax-file-viewer__submeta\">\n @if (formatSize(item.size); as sizeLabel) {\n <span>{{ sizeLabel }}</span>\n }\n @if (item.extension) {\n <span class=\"ax-file-viewer__dot\">·</span>\n <span>.{{ item.extension }}</span>\n } @else if (item.mimeType) {\n <span class=\"ax-file-viewer__dot\">·</span>\n <span>{{ item.mimeType }}</span>\n }\n </div>\n </div>\n\n @if (download() || fullscreen()) {\n <div class=\"ax-file-viewer__header-actions\">\n @if (download()) {\n <ax-button\n class=\"ax-file-viewer__action-btn\"\n look=\"outline\"\n color=\"default\"\n [iconOnly]=\"true\"\n [axTooltip]=\"'Download'\"\n (onClick)=\"downloadCurrent()\"\n >\n <ax-icon icon=\"fa-light fa-download\"></ax-icon>\n </ax-button>\n }\n\n @if (fullscreen()) {\n <div class=\"ax-file-viewer__action-btn ax-file-viewer__fullscreen-wrap\">\n <ax-fullscreen-button></ax-fullscreen-button>\n </div>\n }\n </div>\n }\n </header>\n}\n\n<div\n class=\"ax-file-viewer__stage\"\n [class.ax-file-viewer__stage--nav]=\"service.items().length > 1\"\n [class.ax-file-viewer__stage--hidden]=\"isBusy()\"\n>\n @if (service.items().length > 1) {\n <ax-button\n class=\"ax-file-viewer__nav ax-file-viewer__nav--prev\"\n look=\"solid\"\n color=\"default\"\n [iconOnly]=\"true\"\n [disabled]=\"isFirstSlide()\"\n (onClick)=\"prev()\"\n >\n <ax-icon icon=\"fa-light fa-chevron-left\"></ax-icon>\n </ax-button>\n }\n\n <div class=\"ax-file-viewer__canvas\">\n <div #mainCarousel=\"axCarousel\" axCarousel class=\"ax-carousel\">\n <div class=\"ax-carousel-wrapper\">\n @for (file of service.items(); track file.id) {\n <div class=\"ax-carousel-slide\">\n <ax-file-viewer-slide [item]=\"file\" [index]=\"$index\" />\n </div>\n }\n </div>\n </div>\n\n @if (service.items().length > 0) {\n <span class=\"ax-file-viewer__overlay-counter\">{{ slideCounter() }}</span>\n }\n </div>\n\n @if (service.items().length > 1) {\n <ax-button\n class=\"ax-file-viewer__nav ax-file-viewer__nav--next\"\n look=\"solid\"\n color=\"default\"\n [iconOnly]=\"true\"\n [disabled]=\"isLastSlide()\"\n (onClick)=\"next()\"\n >\n <ax-icon icon=\"fa-light fa-chevron-right\"></ax-icon>\n </ax-button>\n }\n</div>\n\n@if (thumbnail() && service.items().length > 1) {\n <footer class=\"ax-file-viewer__thumbs\" [class.ax-file-viewer__thumbs--hidden]=\"isBusy()\">\n <div class=\"ax-file-viewer__thumbs-track\">\n <div #thumbCarousel=\"axCarousel\" axCarousel class=\"ax-carousel\">\n <div class=\"ax-carousel-wrapper\">\n @for (file of service.items(); track file.id) {\n <div\n class=\"ax-carousel-slide ax-file-viewer__thumb\"\n [attr.data-type]=\"resolveFileType(file)\"\n [class.ax-file-viewer__thumb--active]=\"service.selectedIndex() === $index\"\n (click)=\"goToIndex($index)\"\n >\n <ax-file-viewer-thumb-preview [item]=\"file\" />\n <div class=\"ax-file-viewer__thumb-footer\">\n <span class=\"ax-file-viewer__thumb-index\">{{ $index + 1 }}</span>\n <span class=\"ax-file-viewer__thumb-name\">{{ file.name || resolveTypeLabel(file) }}</span>\n @if (formatSize(file.size); as sizeLabel) {\n <span class=\"ax-file-viewer__thumb-size\">{{ sizeLabel }}</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </footer>\n}\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport { resolveFileViewerFileType } from '../resolve-file-viewer-file-type';\n\ninterface ThumbnailEntry {\n id: string;\n index: number;\n type: string;\n icon: string;\n}\n\nconst TYPE_ICON_MAP: Record<string, string> = {\n image: 'fa-light fa-image',\n video: 'fa-light fa-video',\n audio: 'fa-light fa-music',\n document: 'fa-light fa-file-lines',\n file: 'fa-light fa-file',\n};\n\n@Component({\n selector: 'ax-file-viewer-thumbnails',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"ax-file-viewer-thumbnails\">\n @for (thumb of thumbnails(); track thumb.id) {\n <button\n class=\"ax-file-viewer-thumb\"\n [class.ax-file-viewer-thumb--active]=\"thumb.index === service.selectedIndex()\"\n (click)=\"service.selectedIndex.set(thumb.index)\"\n >\n <i [class]=\"thumb.icon\"></i>\n </button>\n }\n </div>\n `,\n styles: `\n :host { display: block; }\n .ax-file-viewer-thumbnails {\n display: flex;\n gap: 0.5rem;\n justify-content: center;\n padding: 0.5rem;\n flex-wrap: wrap;\n }\n .ax-file-viewer-thumb {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 3rem;\n height: 3rem;\n border-radius: var(--ax-sys-border-radius, 0.25rem);\n border: 1px solid rgb(var(--ax-sys-color-border-lightest-surface));\n background: transparent;\n cursor: pointer;\n opacity: 0.5;\n transition: opacity 0.2s;\n font-size: 1.25rem;\n color: rgb(var(--ax-sys-color-on-surface));\n }\n .ax-file-viewer-thumb--active {\n opacity: 1;\n border-color: rgb(var(--ax-sys-color-primary));\n }\n `,\n})\nexport class AXFileViewerThumbnailsComponent {\n readonly service = inject(AXFileViewerService);\n\n readonly thumbnails = computed<ThumbnailEntry[]>(() =>\n this.service.items().map((item, index) => {\n const type = resolveFileViewerFileType(item);\n return {\n id: item.id,\n index,\n type,\n icon: TYPE_ICON_MAP[type] ?? TYPE_ICON_MAP['file'],\n };\n }),\n );\n}\n","import { AXLoadingComponent } from '@acorex/components/loading';\nimport type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { ChangeDetectionStrategy, Component, effect, inject, input, signal } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\n\n@Component({\n selector: 'ax-file-viewer-image',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXLoadingComponent],\n template: `\n @if (loading()) {\n <ax-loading></ax-loading>\n } @else if (src()) {\n <img [src]=\"src()\" [alt]=\"payload().item.name ?? 'Image'\" />\n }\n `,\n styles: `\n :host {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n padding: 0.75rem;\n box-sizing: border-box;\n }\n img {\n width: 100%;\n height: 100%;\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n border-radius: 0.75rem;\n }\n `,\n})\nexport class AXFileViewerImageComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {\n readonly payload = input.required<AXFileViewerViewPayload>();\n private readonly service = inject(AXFileViewerService);\n readonly src = signal<string | null>(null);\n readonly loading = signal(false);\n\n #resolve = effect(() => {\n const p = this.payload();\n if (p.active) {\n this.loading.set(true);\n void this.service\n .resolveUrl(p.item, 'url')\n .then((url) => this.src.set(url ?? null))\n .finally(() => this.loading.set(false));\n }\n });\n}\n","import { AXLoadingComponent } from '@acorex/components/loading';\nimport type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { ChangeDetectionStrategy, Component, effect, inject, input, signal } from '@angular/core';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\n\n@Component({\n selector: 'ax-file-viewer-video',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXLoadingComponent],\n template: `\n @if (loading()) {\n <ax-loading></ax-loading>\n } @else if (src()) {\n <video controls [src]=\"src()\"></video>\n }\n `,\n styles: `\n :host {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n padding: 0.75rem;\n box-sizing: border-box;\n }\n video {\n width: 100%;\n height: 100%;\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n border-radius: 0.75rem;\n background: rgb(var(--ax-sys-color-dark));\n }\n `,\n})\nexport class AXFileViewerVideoComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {\n readonly payload = input.required<AXFileViewerViewPayload>();\n private readonly service = inject(AXFileViewerService);\n readonly src = signal<string | null>(null);\n readonly loading = signal(false);\n\n #resolve = effect(() => {\n const p = this.payload();\n if (p.active) {\n this.loading.set(true);\n void this.service\n .resolveUrl(p.item, 'url')\n .then((url) => this.src.set(url ?? null))\n .finally(() => this.loading.set(false));\n }\n });\n}\n","import { AXLoadingComponent } from '@acorex/components/loading';\nimport { ChangeDetectionStrategy, Component, effect, inject, input, signal } from '@angular/core';\nimport type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\nimport { AXFileViewerService } from '../file-viewer.service';\n\n@Component({\n selector: 'ax-file-viewer-audio',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXLoadingComponent],\n template: `\n @if (loading()) {\n <ax-loading></ax-loading>\n } @else if (src()) {\n <audio controls [src]=\"src()\"></audio>\n }\n `,\n styles: `\n :host {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n padding: 1rem;\n box-sizing: border-box;\n }\n audio {\n width: 100%;\n max-width: min(40rem, 100%);\n min-width: 0;\n }\n `,\n})\nexport class AXFileViewerAudioComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {\n readonly payload = input.required<AXFileViewerViewPayload>();\n private readonly service = inject(AXFileViewerService);\n readonly src = signal<string | null>(null);\n readonly loading = signal(false);\n\n #resolve = effect(() => {\n const p = this.payload();\n if (p.active) {\n this.loading.set(true);\n void this.service\n .resolveUrl(p.item, 'url')\n .then((url) => this.src.set(url ?? null))\n .finally(() => this.loading.set(false));\n }\n });\n}\n","import { AXLoadingComponent } from '@acorex/components/loading';\nimport { AXPdfReaderComponent } from '@acorex/components/pdf-reader';\nimport type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { ChangeDetectionStrategy, Component, effect, inject, input, signal } from '@angular/core';\nimport { DomSanitizer, type SafeResourceUrl } from '@angular/platform-browser';\nimport { AXFileViewerService } from '../file-viewer.service';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\n\n@Component({\n selector: 'ax-file-viewer-pdf',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXLoadingComponent, AXPdfReaderComponent],\n template: `\n @if (loading()) {\n <ax-loading></ax-loading>\n } @else if (safeSrc()) {\n <ax-pdf-reader [src]=\"safeSrc()\"></ax-pdf-reader>\n }\n `,\n styles: `\n :host {\n display: flex;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n padding: 0.5rem;\n box-sizing: border-box;\n }\n ax-pdf-reader {\n display: block;\n width: 100%;\n height: 100%;\n }\n `,\n})\nexport class AXFileViewerPdfComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {\n readonly payload = input.required<AXFileViewerViewPayload>();\n private readonly service = inject(AXFileViewerService);\n private readonly sanitizer = inject(DomSanitizer);\n readonly safeSrc = signal<SafeResourceUrl | null>(null);\n readonly loading = signal(false);\n\n #resolve = effect(() => {\n const p = this.payload();\n if (p.active) {\n this.loading.set(true);\n void this.service\n .resolveUrl(p.item, 'url')\n .then((url) => {\n this.safeSrc.set(url ? this.sanitizer.bypassSecurityTrustResourceUrl(url) : null);\n })\n .finally(() => this.loading.set(false));\n }\n });\n}\n","import type { AXFileTypeViewComponent } from '@acorex/core/file';\nimport { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport type { AXFileViewerViewPayload } from '../file-viewer.types';\n\n@Component({\n selector: 'ax-file-viewer-fallback',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"ax-file-viewer-fallback\">\n <i class=\"fa-light fa-file ax-file-viewer-fallback__icon\"></i>\n @if (name()) {\n <span class=\"ax-file-viewer-fallback__name\">{{ name() }}</span>\n }\n </div>\n `,\n styles: `\n :host {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n box-sizing: border-box;\n }\n .ax-file-viewer-fallback {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.5rem;\n color: inherit;\n opacity: 0.85;\n }\n .ax-file-viewer-fallback__icon {\n font-size: 3rem;\n opacity: 0.55;\n }\n .ax-file-viewer-fallback__name {\n font-size: 0.875rem;\n opacity: 0.75;\n max-width: min(20rem, 80vw);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n `,\n})\nexport class AXFileViewerFileFallbackComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {\n readonly payload = input.required<AXFileViewerViewPayload>();\n readonly name = computed(() => this.payload().item.name);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["TYPE_ICON_MAP"],"mappings":"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"}
|
|
@@ -43,11 +43,11 @@ class AXKBDComponent extends NXComponent {
|
|
|
43
43
|
}
|
|
44
44
|
#eff;
|
|
45
45
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXKBDComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
46
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.9", type: AXKBDComponent, isStandalone: true, selector: "ax-kbd", inputs: { look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: AXComponent, useExisting: AXKBDComponent }], queries: [{ propertyName: "kbdItem", predicate: AXKBDItemComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-kbd-item\"></ng-content>\n", styles: ["@layer properties;ax-kbd{display:flex;gap:calc(var(--spacing, .25rem) * 4);--tw-leading: var(--leading-normal, 1.5);line-height:var(--leading-normal, 1.5);-webkit-user-select:none;user-select:none}ax-kbd ax-kbd-item{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 1);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}ax-kbd ax-kbd-item .ax-kbd-text{font-size:var(--text-
|
|
46
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.9", type: AXKBDComponent, isStandalone: true, selector: "ax-kbd", inputs: { look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: AXComponent, useExisting: AXKBDComponent }], queries: [{ propertyName: "kbdItem", predicate: AXKBDItemComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-kbd-item\"></ng-content>\n", styles: ["@layer properties;ax-kbd{display:flex;gap:calc(var(--spacing, .25rem) * 4);--tw-leading: var(--leading-normal, 1.5);line-height:var(--leading-normal, 1.5);-webkit-user-select:none;user-select:none}ax-kbd ax-kbd-item{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 1);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}ax-kbd ax-kbd-item .ax-kbd-text{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-normal, 400);font-weight:var(--font-weight-normal, 400)}ax-kbd ax-kbd-item .ax-kbd-inner-text{display:flex;height:100%;align-items:center;gap:calc(var(--spacing, .25rem) * 1)}ax-kbd ax-kbd-item .ax-kbd-separator{display:inline-flex;align-items:center;align-self:center;font-size:11px;--tw-leading: 1;line-height:1;--tw-font-weight: var(--font-weight-normal, 400);font-weight:var(--font-weight-normal, 400);opacity:75%}ax-kbd ax-kbd-item kbd{display:flex;height:calc(var(--spacing, .25rem) * 5);min-width:calc(var(--spacing, .25rem) * 5);align-items:center;justify-content:center;border-radius:6px;padding-inline:calc(var(--spacing, .25rem) * 1);--tw-font-weight: var(--ax-sys-font-family);font-weight:var(--ax-sys-font-family)}ax-kbd ax-kbd-item kbd.ax-fill{border-style:var(--tw-border-style);border-width:1px;border-color:transparent;background-color:rgba(var(--ax-comp-kbd-item-bg-color,var(--ax-sys-color-surface)));color:rgba(var(--ax-sys-color-on-lightest-surface),.74)}ax-kbd ax-kbd-item kbd.ax-solid{border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-comp-kbd-item-border-color,var(--ax-sys-color-dark-surface)));background-color:rgba(var(--ax-comp-kbd-item-bg-color,var(--ax-sys-color-lightest-surface)));color:rgba(var(--ax-sys-color-on-lightest-surface),.74);--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}ax-kbd ax-kbd-item kbd.ax-blank{border-style:var(--tw-border-style);border-width:1px;border-color:transparent;background-color:transparent;color:rgba(var(--ax-sys-color-on-lightest-surface),.74)}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial;--tw-font-weight: initial;--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
47
47
|
}
|
|
48
48
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXKBDComponent, decorators: [{
|
|
49
49
|
type: Component,
|
|
50
|
-
args: [{ selector: 'ax-kbd', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: AXComponent, useExisting: AXKBDComponent }], template: "<ng-content select=\"ax-kbd-item\"></ng-content>\n", styles: ["@layer properties;ax-kbd{display:flex;gap:calc(var(--spacing, .25rem) * 4);--tw-leading: var(--leading-normal, 1.5);line-height:var(--leading-normal, 1.5);-webkit-user-select:none;user-select:none}ax-kbd ax-kbd-item{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 1);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}ax-kbd ax-kbd-item .ax-kbd-text{font-size:var(--text-
|
|
50
|
+
args: [{ selector: 'ax-kbd', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: AXComponent, useExisting: AXKBDComponent }], template: "<ng-content select=\"ax-kbd-item\"></ng-content>\n", styles: ["@layer properties;ax-kbd{display:flex;gap:calc(var(--spacing, .25rem) * 4);--tw-leading: var(--leading-normal, 1.5);line-height:var(--leading-normal, 1.5);-webkit-user-select:none;user-select:none}ax-kbd ax-kbd-item{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 1);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}ax-kbd ax-kbd-item .ax-kbd-text{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-normal, 400);font-weight:var(--font-weight-normal, 400)}ax-kbd ax-kbd-item .ax-kbd-inner-text{display:flex;height:100%;align-items:center;gap:calc(var(--spacing, .25rem) * 1)}ax-kbd ax-kbd-item .ax-kbd-separator{display:inline-flex;align-items:center;align-self:center;font-size:11px;--tw-leading: 1;line-height:1;--tw-font-weight: var(--font-weight-normal, 400);font-weight:var(--font-weight-normal, 400);opacity:75%}ax-kbd ax-kbd-item kbd{display:flex;height:calc(var(--spacing, .25rem) * 5);min-width:calc(var(--spacing, .25rem) * 5);align-items:center;justify-content:center;border-radius:6px;padding-inline:calc(var(--spacing, .25rem) * 1);--tw-font-weight: var(--ax-sys-font-family);font-weight:var(--ax-sys-font-family)}ax-kbd ax-kbd-item kbd.ax-fill{border-style:var(--tw-border-style);border-width:1px;border-color:transparent;background-color:rgba(var(--ax-comp-kbd-item-bg-color,var(--ax-sys-color-surface)));color:rgba(var(--ax-sys-color-on-lightest-surface),.74)}ax-kbd ax-kbd-item kbd.ax-solid{border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-comp-kbd-item-border-color,var(--ax-sys-color-dark-surface)));background-color:rgba(var(--ax-comp-kbd-item-bg-color,var(--ax-sys-color-lightest-surface)));color:rgba(var(--ax-sys-color-on-lightest-surface),.74);--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}ax-kbd ax-kbd-item kbd.ax-blank{border-style:var(--tw-border-style);border-width:1px;border-color:transparent;background-color:transparent;color:rgba(var(--ax-sys-color-on-lightest-surface),.74)}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial;--tw-font-weight: initial;--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"] }]
|
|
51
51
|
}], propDecorators: { kbdItem: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => AXKBDItemComponent), { ...{ descendants: true }, isSignal: true }] }], look: [{ type: i0.Input, args: [{ isSignal: true, alias: "look", required: false }] }] } });
|
|
52
52
|
|
|
53
53
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-components-kbd.mjs","sources":["../../../../packages/components/kbd/src/lib/kbd-item/kbd-item.component.ts","../../../../packages/components/kbd/src/lib/kbd-item/kbd-item.component.html","../../../../packages/components/kbd/src/lib/kbd.component.ts","../../../../packages/components/kbd/src/lib/kbd.component.html","../../../../packages/components/kbd/src/acorex-components-kbd.ts"],"sourcesContent":["import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { ChangeDetectionStrategy, Component, computed, input, model, signal, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'ax-kbd-item',\n templateUrl: './kbd-item.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXKBDItemComponent }],\n})\nexport class AXKBDItemComponent extends NXComponent {\n keys = input<string[] | string>();\n\n modifierKeys = signal(['ctrl', 'shift', 'alt', 'meta', 'esc', 'del', 'delete', 'win']);\n\n join = input<'split' | 'joined'>('joined');\n\n look = model<'fill' | 'solid' | 'blank'>('solid');\n\n lookClass = computed(() => `ax-${this.look()} ax-default`);\n\n /**\n * Capitalizes the first letter of the provided text.\n *\n * @param text Input text to transform\n * @returns The text with its first character uppercased\n */\n protected capitalizeFirstLetter(text: string) {\n return text.charAt(0).toUpperCase() + text.slice(1);\n }\n}\n","@let localKeys = keys();\n\n@if (typeof localKeys === 'string') {\n <kbd [class]=\"lookClass()\">\n @if (modifierKeys().includes(localKeys.toLocaleLowerCase())) {\n <span class=\"ax-kbd-text\"> {{ capitalizeFirstLetter(localKeys) }}</span>\n } @else {\n <span class=\"ax-kbd-text\"> {{ localKeys.toLocaleUpperCase() }}</span>\n }\n </kbd>\n} @else {\n @if (join() === 'split') {\n @for (key of localKeys; track $index) {\n <kbd [class]=\"lookClass()\">\n @if (modifierKeys().includes(key.toLocaleLowerCase())) {\n <span class=\"ax-kbd-text\"> {{ capitalizeFirstLetter(key) }}</span>\n } @else {\n <span class=\"ax-kbd-text\"> {{ key.toLocaleUpperCase() }}</span>\n }\n </kbd>\n @if (!$last) {\n <span class=\"ax-kbd-separator\">+</span>\n }\n }\n } @else {\n <kbd [class]=\"lookClass()\">\n <div class=\"ax-kbd-inner-text\">\n @for (key of localKeys; track $index) {\n @if (modifierKeys().includes(key.toLocaleLowerCase())) {\n <span class=\"ax-kbd-text\"> {{ capitalizeFirstLetter(key) }}</span>\n } @else {\n <span class=\"ax-kbd-text\"> {{ key.toLocaleUpperCase() }}</span>\n }\n @if (!$last) {\n <span class=\"ax-kbd-separator\">+</span>\n }\n }\n </div>\n </kbd>\n }\n}\n","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { ChangeDetectionStrategy, Component, contentChildren, effect, input, ViewEncapsulation } from '@angular/core';\nimport { AXKBDItemComponent } from './kbd-item/kbd-item.component';\n\n@Component({\n selector: 'ax-kbd',\n templateUrl: './kbd.component.html',\n styleUrls: ['./kbd.component.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXKBDComponent }],\n})\nexport class AXKBDComponent extends NXComponent {\n private kbdItem = contentChildren(AXKBDItemComponent, { descendants: true });\n\n look = input<'fill' | 'solid' | 'blank'>(null);\n\n #eff = effect(() => {\n if (!this.look()) return;\n this.kbdItem().forEach((kbd) => {\n kbd.look.set(this.look());\n });\n });\n}\n","<ng-content select=\"ax-kbd-item\"></ng-content>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"acorex-components-kbd.mjs","sources":["../../../../packages/components/kbd/src/lib/kbd-item/kbd-item.component.ts","../../../../packages/components/kbd/src/lib/kbd-item/kbd-item.component.html","../../../../packages/components/kbd/src/lib/kbd.component.ts","../../../../packages/components/kbd/src/lib/kbd.component.html","../../../../packages/components/kbd/src/acorex-components-kbd.ts"],"sourcesContent":["import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { ChangeDetectionStrategy, Component, computed, input, model, signal, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'ax-kbd-item',\n templateUrl: './kbd-item.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXKBDItemComponent }],\n})\nexport class AXKBDItemComponent extends NXComponent {\n keys = input<string[] | string>();\n\n modifierKeys = signal(['ctrl', 'shift', 'alt', 'meta', 'esc', 'del', 'delete', 'win']);\n\n join = input<'split' | 'joined'>('joined');\n\n look = model<'fill' | 'solid' | 'blank'>('solid');\n\n lookClass = computed(() => `ax-${this.look()} ax-default`);\n\n /**\n * Capitalizes the first letter of the provided text.\n *\n * @param text Input text to transform\n * @returns The text with its first character uppercased\n */\n protected capitalizeFirstLetter(text: string) {\n return text.charAt(0).toUpperCase() + text.slice(1);\n }\n}\n","@let localKeys = keys();\n\n@if (typeof localKeys === 'string') {\n <kbd [class]=\"lookClass()\">\n @if (modifierKeys().includes(localKeys.toLocaleLowerCase())) {\n <span class=\"ax-kbd-text\"> {{ capitalizeFirstLetter(localKeys) }}</span>\n } @else {\n <span class=\"ax-kbd-text\"> {{ localKeys.toLocaleUpperCase() }}</span>\n }\n </kbd>\n} @else {\n @if (join() === 'split') {\n @for (key of localKeys; track $index) {\n <kbd [class]=\"lookClass()\">\n @if (modifierKeys().includes(key.toLocaleLowerCase())) {\n <span class=\"ax-kbd-text\"> {{ capitalizeFirstLetter(key) }}</span>\n } @else {\n <span class=\"ax-kbd-text\"> {{ key.toLocaleUpperCase() }}</span>\n }\n </kbd>\n @if (!$last) {\n <span class=\"ax-kbd-separator\">+</span>\n }\n }\n } @else {\n <kbd [class]=\"lookClass()\">\n <div class=\"ax-kbd-inner-text\">\n @for (key of localKeys; track $index) {\n @if (modifierKeys().includes(key.toLocaleLowerCase())) {\n <span class=\"ax-kbd-text\"> {{ capitalizeFirstLetter(key) }}</span>\n } @else {\n <span class=\"ax-kbd-text\"> {{ key.toLocaleUpperCase() }}</span>\n }\n @if (!$last) {\n <span class=\"ax-kbd-separator\">+</span>\n }\n }\n </div>\n </kbd>\n }\n}\n","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { ChangeDetectionStrategy, Component, contentChildren, effect, input, ViewEncapsulation } from '@angular/core';\nimport { AXKBDItemComponent } from './kbd-item/kbd-item.component';\n\n@Component({\n selector: 'ax-kbd',\n templateUrl: './kbd.component.html',\n styleUrls: ['./kbd.component.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXKBDComponent }],\n})\nexport class AXKBDComponent extends NXComponent {\n private kbdItem = contentChildren(AXKBDItemComponent, { descendants: true });\n\n look = input<'fill' | 'solid' | 'blank'>(null);\n\n #eff = effect(() => {\n if (!this.look()) return;\n this.kbdItem().forEach((kbd) => {\n kbd.look.set(this.look());\n });\n });\n}\n","<ng-content select=\"ax-kbd-item\"></ng-content>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acorex/components",
|
|
3
|
-
"version": "21.0.3-next.
|
|
3
|
+
"version": "21.0.3-next.43",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@acorex/core": "21.0.3-next.
|
|
6
|
-
"@acorex/cdk": "21.0.3-next.
|
|
5
|
+
"@acorex/core": "21.0.3-next.43",
|
|
6
|
+
"@acorex/cdk": "21.0.3-next.43",
|
|
7
7
|
"polytype": ">=0.17.0",
|
|
8
8
|
"angular-imask": ">=7.6.1",
|
|
9
|
+
"imask": ">=7.6.1",
|
|
9
10
|
"gridstack": ">=12.0.0",
|
|
10
11
|
"rrule": ">=2.8.1",
|
|
11
12
|
"cron-parser": ">=4.9.0",
|
|
12
|
-
"leaflet": "
|
|
13
|
-
"leaflet-draw": "
|
|
14
|
-
"leaflet.locatecontrol": "
|
|
13
|
+
"leaflet": "1.9.4",
|
|
14
|
+
"leaflet-draw": "1.0.4",
|
|
15
|
+
"leaflet.locatecontrol": "0.81.1",
|
|
15
16
|
"highlight.js": ">=11.11.1",
|
|
16
17
|
"quill": ">=2.0.3",
|
|
17
18
|
"quill-delta-to-html": ">=0.12.1",
|
|
@@ -201,6 +202,10 @@
|
|
|
201
202
|
"types": "./types/acorex-components-fab.d.ts",
|
|
202
203
|
"default": "./fesm2022/acorex-components-fab.mjs"
|
|
203
204
|
},
|
|
205
|
+
"./file-viewer": {
|
|
206
|
+
"types": "./types/acorex-components-file-viewer.d.ts",
|
|
207
|
+
"default": "./fesm2022/acorex-components-file-viewer.mjs"
|
|
208
|
+
},
|
|
204
209
|
"./flow-chart": {
|
|
205
210
|
"types": "./types/acorex-components-flow-chart.d.ts",
|
|
206
211
|
"default": "./fesm2022/acorex-components-flow-chart.mjs"
|
|
@@ -8,10 +8,8 @@ declare class AXBadgeComponent extends MXColorLookComponent {
|
|
|
8
8
|
* @defaultValue ''
|
|
9
9
|
*/
|
|
10
10
|
text: i0.InputSignal<string>;
|
|
11
|
-
/**
|
|
12
|
-
|
|
13
|
-
*/
|
|
14
|
-
private get __hostClass();
|
|
11
|
+
/** @ignore */
|
|
12
|
+
get hostClass(): string;
|
|
15
13
|
static ɵfac: i0.ɵɵFactoryDeclaration<AXBadgeComponent, never>;
|
|
16
14
|
static ɵcmp: i0.ɵɵComponentDeclaration<AXBadgeComponent, "ax-badge", never, { "color": { "alias": "color"; "required": false; }; "look": { "alias": "look"; "required": false; }; "text": { "alias": "text"; "required": false; "isSignal": true; }; }, {}, never, ["ax-prefix", "ax-suffix"], true, never>;
|
|
17
15
|
}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { Provider, OnDestroy } from '@angular/core';
|
|
3
|
+
import * as _acorex_core_file from '@acorex/core/file';
|
|
4
|
+
import { AXFileTypeExtensionHint, AXFileType, AXFileTypeViewComponent } from '@acorex/core/file';
|
|
5
|
+
import { AXStyleColorType } from '@acorex/cdk/common';
|
|
6
|
+
import { SafeResourceUrl } from '@angular/platform-browser';
|
|
7
|
+
|
|
8
|
+
/** Single item displayed in a file-viewer carousel. */
|
|
9
|
+
interface AXFileViewerItem {
|
|
10
|
+
id: string;
|
|
11
|
+
/** Catalog name (`image`, `video`, `audio`, `document`, `file`). Inferred from mimeType/extension when omitted. */
|
|
12
|
+
fileType?: string;
|
|
13
|
+
name?: string;
|
|
14
|
+
size?: number;
|
|
15
|
+
url: string | (() => Promise<string>);
|
|
16
|
+
thumbnailUrl?: string | (() => Promise<string>);
|
|
17
|
+
mimeType?: string;
|
|
18
|
+
extension?: string;
|
|
19
|
+
tooltip?: string;
|
|
20
|
+
}
|
|
21
|
+
/** Payload passed to each file-type viewer component inside the carousel. */
|
|
22
|
+
interface AXFileViewerViewPayload {
|
|
23
|
+
item: AXFileViewerItem;
|
|
24
|
+
index: number;
|
|
25
|
+
active: boolean;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Carousel state shared between container, slides and thumbnails. Provided per-container. */
|
|
29
|
+
declare class AXFileViewerService {
|
|
30
|
+
readonly items: _angular_core.WritableSignal<AXFileViewerItem[]>;
|
|
31
|
+
readonly selectedIndex: _angular_core.WritableSignal<number>;
|
|
32
|
+
private readonly urlCache;
|
|
33
|
+
/** Resolve a potentially lazy URL — caches the result. */
|
|
34
|
+
resolveUrl(item: AXFileViewerItem, key: 'url' | 'thumbnailUrl'): Promise<string | undefined>;
|
|
35
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileViewerService, never>;
|
|
36
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXFileViewerService>;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Registers file-viewer components on standard file-type catalog entries. */
|
|
40
|
+
declare function provideFileViewer(): Provider[];
|
|
41
|
+
|
|
42
|
+
/** Infers a file-type catalog name from the item. */
|
|
43
|
+
declare function resolveFileViewerFileType(item: AXFileViewerItem): string;
|
|
44
|
+
/** Builds an extension hint from item metadata. */
|
|
45
|
+
declare function buildFileViewerExtensionHint(item: AXFileViewerItem): AXFileTypeExtensionHint | undefined;
|
|
46
|
+
|
|
47
|
+
declare function createFileViewerFileTypes(): AXFileType[];
|
|
48
|
+
|
|
49
|
+
declare class AXFileViewerContainerComponent implements OnDestroy {
|
|
50
|
+
#private;
|
|
51
|
+
readonly items: _angular_core.InputSignal<AXFileViewerItem[]>;
|
|
52
|
+
readonly thumbnail: _angular_core.InputSignal<boolean>;
|
|
53
|
+
readonly pagination: _angular_core.InputSignal<boolean>;
|
|
54
|
+
readonly download: _angular_core.InputSignal<boolean>;
|
|
55
|
+
readonly fullscreen: _angular_core.InputSignal<boolean>;
|
|
56
|
+
/** External loading flag — show overlay while parent data is being fetched. */
|
|
57
|
+
readonly loading: _angular_core.InputSignal<boolean>;
|
|
58
|
+
readonly service: AXFileViewerService;
|
|
59
|
+
private readonly host;
|
|
60
|
+
private readonly zIndexService;
|
|
61
|
+
private readonly mainCarouselRef;
|
|
62
|
+
private readonly thumbCarouselRef;
|
|
63
|
+
private readonly fullScreenButton;
|
|
64
|
+
private zToken;
|
|
65
|
+
private initToken;
|
|
66
|
+
/** True while carousels are being (re)initialized. */
|
|
67
|
+
readonly initializing: _angular_core.WritableSignal<boolean>;
|
|
68
|
+
readonly isBusy: _angular_core.Signal<boolean>;
|
|
69
|
+
readonly isFirstSlide: _angular_core.Signal<boolean>;
|
|
70
|
+
readonly isLastSlide: _angular_core.Signal<boolean>;
|
|
71
|
+
readonly currentItem: _angular_core.Signal<AXFileViewerItem>;
|
|
72
|
+
readonly currentFileType: _angular_core.Signal<string>;
|
|
73
|
+
readonly currentTypeLabel: _angular_core.Signal<string>;
|
|
74
|
+
readonly currentTypeColor: _angular_core.Signal<AXStyleColorType>;
|
|
75
|
+
readonly slideCounter: _angular_core.Signal<string>;
|
|
76
|
+
readonly resolveFileType: typeof resolveFileViewerFileType;
|
|
77
|
+
resolveTypeLabel(item: AXFileViewerItem): string;
|
|
78
|
+
formatSize(size?: number): string;
|
|
79
|
+
private readonly mainCarouselOptions;
|
|
80
|
+
private readonly thumbnailCarouselOptions;
|
|
81
|
+
private acquireFullscreenZIndex;
|
|
82
|
+
private releaseFullscreenZIndex;
|
|
83
|
+
private initCarousels;
|
|
84
|
+
private readonly onSlideChange;
|
|
85
|
+
next(): void;
|
|
86
|
+
prev(): void;
|
|
87
|
+
goToIndex(index: number, speed?: number): void;
|
|
88
|
+
downloadCurrent(): Promise<void>;
|
|
89
|
+
ngOnDestroy(): void;
|
|
90
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileViewerContainerComponent, never>;
|
|
91
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileViewerContainerComponent, "ax-file-viewer-container", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "thumbnail": { "alias": "thumbnail"; "required": false; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": false; "isSignal": true; }; "download": { "alias": "download"; "required": false; "isSignal": true; }; "fullscreen": { "alias": "fullscreen"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
declare class AXFileViewerSlideComponent {
|
|
95
|
+
readonly item: _angular_core.InputSignal<AXFileViewerItem>;
|
|
96
|
+
readonly index: _angular_core.InputSignal<number>;
|
|
97
|
+
private readonly service;
|
|
98
|
+
readonly fileTypeName: _angular_core.Signal<string>;
|
|
99
|
+
readonly extensionHint: _angular_core.Signal<_acorex_core_file.AXFileTypeExtensionHint>;
|
|
100
|
+
readonly viewPayload: _angular_core.Signal<AXFileViewerViewPayload>;
|
|
101
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileViewerSlideComponent, never>;
|
|
102
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileViewerSlideComponent, "ax-file-viewer-slide", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "index": { "alias": "index"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
declare class AXFileViewerThumbPreviewComponent {
|
|
106
|
+
#private;
|
|
107
|
+
readonly item: _angular_core.InputSignal<AXFileViewerItem>;
|
|
108
|
+
private readonly service;
|
|
109
|
+
readonly src: _angular_core.WritableSignal<string>;
|
|
110
|
+
readonly icon: _angular_core.Signal<string>;
|
|
111
|
+
private resolvePreview;
|
|
112
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileViewerThumbPreviewComponent, never>;
|
|
113
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileViewerThumbPreviewComponent, "ax-file-viewer-thumb-preview", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
interface ThumbnailEntry {
|
|
117
|
+
id: string;
|
|
118
|
+
index: number;
|
|
119
|
+
type: string;
|
|
120
|
+
icon: string;
|
|
121
|
+
}
|
|
122
|
+
declare class AXFileViewerThumbnailsComponent {
|
|
123
|
+
readonly service: AXFileViewerService;
|
|
124
|
+
readonly thumbnails: _angular_core.Signal<ThumbnailEntry[]>;
|
|
125
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileViewerThumbnailsComponent, never>;
|
|
126
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileViewerThumbnailsComponent, "ax-file-viewer-thumbnails", never, {}, {}, never, never, true, never>;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
declare class AXFileViewerImageComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {
|
|
130
|
+
#private;
|
|
131
|
+
readonly payload: _angular_core.InputSignal<AXFileViewerViewPayload>;
|
|
132
|
+
private readonly service;
|
|
133
|
+
readonly src: _angular_core.WritableSignal<string>;
|
|
134
|
+
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
135
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileViewerImageComponent, never>;
|
|
136
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileViewerImageComponent, "ax-file-viewer-image", never, { "payload": { "alias": "payload"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
declare class AXFileViewerVideoComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {
|
|
140
|
+
#private;
|
|
141
|
+
readonly payload: _angular_core.InputSignal<AXFileViewerViewPayload>;
|
|
142
|
+
private readonly service;
|
|
143
|
+
readonly src: _angular_core.WritableSignal<string>;
|
|
144
|
+
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
145
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileViewerVideoComponent, never>;
|
|
146
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileViewerVideoComponent, "ax-file-viewer-video", never, { "payload": { "alias": "payload"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
declare class AXFileViewerAudioComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {
|
|
150
|
+
#private;
|
|
151
|
+
readonly payload: _angular_core.InputSignal<AXFileViewerViewPayload>;
|
|
152
|
+
private readonly service;
|
|
153
|
+
readonly src: _angular_core.WritableSignal<string>;
|
|
154
|
+
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
155
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileViewerAudioComponent, never>;
|
|
156
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileViewerAudioComponent, "ax-file-viewer-audio", never, { "payload": { "alias": "payload"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
declare class AXFileViewerPdfComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {
|
|
160
|
+
#private;
|
|
161
|
+
readonly payload: _angular_core.InputSignal<AXFileViewerViewPayload>;
|
|
162
|
+
private readonly service;
|
|
163
|
+
private readonly sanitizer;
|
|
164
|
+
readonly safeSrc: _angular_core.WritableSignal<SafeResourceUrl>;
|
|
165
|
+
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
166
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileViewerPdfComponent, never>;
|
|
167
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileViewerPdfComponent, "ax-file-viewer-pdf", never, { "payload": { "alias": "payload"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
declare class AXFileViewerFileFallbackComponent implements AXFileTypeViewComponent<AXFileViewerViewPayload> {
|
|
171
|
+
readonly payload: _angular_core.InputSignal<AXFileViewerViewPayload>;
|
|
172
|
+
readonly name: _angular_core.Signal<string>;
|
|
173
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileViewerFileFallbackComponent, never>;
|
|
174
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileViewerFileFallbackComponent, "ax-file-viewer-fallback", never, { "payload": { "alias": "payload"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export { AXFileViewerAudioComponent, AXFileViewerContainerComponent, AXFileViewerFileFallbackComponent, AXFileViewerImageComponent, AXFileViewerPdfComponent, AXFileViewerService, AXFileViewerSlideComponent, AXFileViewerThumbPreviewComponent, AXFileViewerThumbnailsComponent, AXFileViewerVideoComponent, buildFileViewerExtensionHint, createFileViewerFileTypes, provideFileViewer, resolveFileViewerFileType };
|
|
178
|
+
export type { AXFileViewerItem, AXFileViewerViewPayload };
|