@shival99/z-ui 1.7.2 → 1.7.3
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/shival99-z-ui-components-z-autocomplete.mjs +2 -2
- package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-checkbox.mjs +1 -1
- package/fesm2022/shival99-z-ui-components-z-checkbox.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-gallery.mjs +304 -24
- package/fesm2022/shival99-z-ui-components-z-gallery.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-icon.mjs +3 -1
- package/fesm2022/shival99-z-ui-components-z-icon.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-pagination.mjs +12 -3
- package/fesm2022/shival99-z-ui-components-z-pagination.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-table.mjs +8 -8
- package/fesm2022/shival99-z-ui-components-z-table.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-i18n.mjs +6 -0
- package/fesm2022/shival99-z-ui-i18n.mjs.map +1 -1
- package/package.json +1 -1
- package/types/shival99-z-ui-components-z-autocomplete.d.ts +4 -4
- package/types/shival99-z-ui-components-z-breadcrumb.d.ts +2 -2
- package/types/shival99-z-ui-components-z-button.d.ts +1 -1
- package/types/shival99-z-ui-components-z-dropdown-menu.d.ts +1 -1
- package/types/shival99-z-ui-components-z-empty.d.ts +2 -2
- package/types/shival99-z-ui-components-z-filter.d.ts +1 -1
- package/types/shival99-z-ui-components-z-gallery.d.ts +50 -5
- package/types/shival99-z-ui-components-z-icon.d.ts +3 -1
- package/types/shival99-z-ui-components-z-select.d.ts +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shival99-z-ui-components-z-gallery.mjs","sources":["../../../../libs/core-ui/components/z-gallery/z-gallery.types.ts","../../../../libs/core-ui/components/z-gallery/z-gallery.utils.ts","../../../../libs/core-ui/components/z-gallery/z-gallery-item.component.ts","../../../../libs/core-ui/components/z-gallery/z-gallery-preview.component.ts","../../../../libs/core-ui/components/z-gallery/z-gallery.variants.ts","../../../../libs/core-ui/components/z-gallery/z-gallery.component.ts","../../../../libs/core-ui/components/z-gallery/z-gallery-file-icon.component.ts","../../../../libs/core-ui/components/z-gallery/shival99-z-ui-components-z-gallery.ts"],"sourcesContent":["export type ZGalleryMode = 'grid' | 'list';\nexport type ZGallerySize = 'sm' | 'default' | 'lg';\nexport type ZGalleryToggleSize = 'xs' | 'sm' | 'default' | 'lg';\n\nexport interface ZGalleryFile {\n id: string;\n name: string;\n size: number;\n type: string;\n url?: string;\n downloadUrl?: string;\n thumbnailUrl?: string;\n createdAt?: Date;\n updatedAt?: Date;\n}\n\nexport type ZFileCategory =\n | 'image'\n | 'pdf'\n | 'word'\n | 'excel'\n | 'powerpoint'\n | 'video'\n | 'audio'\n | 'archive'\n | 'code'\n | 'text'\n | 'unknown';\n\nexport interface ZFileCategoryStyle {\n bg: string;\n text: string;\n label: string;\n icon: string;\n}\n\nexport const FILE_CATEGORY_STYLES: Record<ZFileCategory, ZFileCategoryStyle> = {\n image: {\n bg: 'bg-purple-100 dark:bg-purple-900/30',\n text: 'text-purple-600 dark:text-purple-400',\n label: 'IMG',\n icon: 'lucideImage',\n },\n pdf: {\n bg: 'bg-red-100 dark:bg-red-900/30',\n text: 'text-red-600 dark:text-red-400',\n label: 'PDF',\n icon: 'lucideFileText',\n },\n word: {\n bg: 'bg-blue-100 dark:bg-blue-900/30',\n text: 'text-blue-600 dark:text-blue-400',\n label: 'DOC',\n icon: 'lucideFileText',\n },\n excel: {\n bg: 'bg-green-100 dark:bg-green-900/30',\n text: 'text-green-600 dark:text-green-400',\n label: 'XLS',\n icon: 'lucideFileSpreadsheet',\n },\n powerpoint: {\n bg: 'bg-orange-100 dark:bg-orange-900/30',\n text: 'text-orange-600 dark:text-orange-400',\n label: 'PPT',\n icon: 'lucideFileText',\n },\n video: {\n bg: 'bg-pink-100 dark:bg-pink-900/30',\n text: 'text-pink-600 dark:text-pink-400',\n label: 'VID',\n icon: 'lucideVideo',\n },\n audio: {\n bg: 'bg-yellow-100 dark:bg-yellow-900/30',\n text: 'text-yellow-700 dark:text-yellow-400',\n label: 'AUD',\n icon: 'lucideMusic',\n },\n archive: {\n bg: 'bg-amber-100 dark:bg-amber-900/30',\n text: 'text-amber-600 dark:text-amber-400',\n label: 'ZIP',\n icon: 'lucideFileArchive',\n },\n code: {\n bg: 'bg-slate-100 dark:bg-slate-800',\n text: 'text-slate-600 dark:text-slate-400',\n label: 'CODE',\n icon: 'lucideCode',\n },\n text: {\n bg: 'bg-gray-100 dark:bg-gray-800',\n text: 'text-gray-600 dark:text-gray-400',\n label: 'TXT',\n icon: 'lucideFileText',\n },\n unknown: {\n bg: 'bg-gray-100 dark:bg-gray-800',\n text: 'text-gray-500 dark:text-gray-400',\n label: 'FILE',\n icon: 'lucideFile',\n },\n};\n\nexport interface ZGalleryControl {\n setMode: (mode: ZGalleryMode) => void;\n getMode: () => ZGalleryMode;\n getFiles: () => ZGalleryFile[];\n openPreview: (file: ZGalleryFile) => void;\n closePreview: () => void;\n}\n","import type { ZFileCategory, ZGalleryFile } from './z-gallery.types';\n\nconst IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'bmp', 'ico'];\nconst VIDEO_EXTENSIONS = ['mp4', 'avi', 'mov', 'wmv', 'flv', 'webm', 'mkv'];\nconst AUDIO_EXTENSIONS = ['mp3', 'wav', 'ogg', 'flac', 'aac', 'm4a'];\nconst ARCHIVE_EXTENSIONS = ['zip', 'rar', 'tar', 'gz', '7z', 'bz2'];\nconst CODE_EXTENSIONS = [\n 'js',\n 'ts',\n 'jsx',\n 'tsx',\n 'html',\n 'css',\n 'scss',\n 'json',\n 'xml',\n 'py',\n 'java',\n 'c',\n 'cpp',\n 'go',\n 'rs',\n 'php',\n 'rb',\n 'swift',\n 'kt',\n];\nconst TEXT_EXTENSIONS = ['txt', 'md', 'log'];\nconst WORD_EXTENSIONS = ['doc', 'docx', 'odt', 'rtf'];\nconst EXCEL_EXTENSIONS = ['xls', 'xlsx', 'csv', 'ods'];\nconst POWERPOINT_EXTENSIONS = ['ppt', 'pptx', 'odp'];\n\nconst FILE_SIZE_UNITS = ['B', 'KB', 'MB', 'GB'];\nconst FILE_SIZE_BASE = 1024;\n\nexport const getFileCategory = (file: ZGalleryFile): ZFileCategory => {\n const type = file.type?.toLowerCase() || '';\n const name = file.name?.toLowerCase() || '';\n const ext = name.split('.').pop() || '';\n\n if (type.startsWith('image/') || IMAGE_EXTENSIONS.includes(ext)) {\n return 'image';\n }\n\n if (type === 'application/pdf' || ext === 'pdf') {\n return 'pdf';\n }\n\n if (type.includes('word') || type.includes('document') || WORD_EXTENSIONS.includes(ext)) {\n return 'word';\n }\n\n if (type.includes('excel') || type.includes('spreadsheet') || EXCEL_EXTENSIONS.includes(ext)) {\n return 'excel';\n }\n\n if (type.includes('powerpoint') || type.includes('presentation') || POWERPOINT_EXTENSIONS.includes(ext)) {\n return 'powerpoint';\n }\n\n if (type.startsWith('video/') || VIDEO_EXTENSIONS.includes(ext)) {\n return 'video';\n }\n\n if (type.startsWith('audio/') || AUDIO_EXTENSIONS.includes(ext)) {\n return 'audio';\n }\n\n if (\n type.includes('zip') ||\n type.includes('rar') ||\n type.includes('tar') ||\n type.includes('compressed') ||\n ARCHIVE_EXTENSIONS.includes(ext)\n ) {\n return 'archive';\n }\n\n if (CODE_EXTENSIONS.includes(ext)) {\n return 'code';\n }\n\n if (type.startsWith('text/') || TEXT_EXTENSIONS.includes(ext)) {\n return 'text';\n }\n\n return 'unknown';\n};\n\nexport const formatFileSize = (bytes: number): string => {\n if (bytes === 0) {\n return '0 B';\n }\n\n const i = Math.floor(Math.log(bytes) / Math.log(FILE_SIZE_BASE));\n const size = bytes / Math.pow(FILE_SIZE_BASE, i);\n return `${size.toFixed(i > 0 ? 1 : 0)} ${FILE_SIZE_UNITS[i]}`;\n};\n\nexport const isPreviewable = (file: ZGalleryFile): boolean => {\n const category = getFileCategory(file);\n return category === 'image' || category === 'pdf' || category === 'video';\n};\n\nexport const isImage = (file: ZGalleryFile): boolean => getFileCategory(file) === 'image';\n","import { ChangeDetectionStrategy, Component, computed, input, output, signal, ViewEncapsulation } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { ZIconComponent, type ZIcon } from '@shival99/z-ui/components/z-icon';\nimport { ZSkeletonComponent } from '@shival99/z-ui/components/z-skeleton';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport {\n FILE_CATEGORY_STYLES,\n type ZFileCategoryStyle,\n type ZGalleryFile,\n type ZGalleryMode,\n type ZGallerySize,\n} from './z-gallery.types';\nimport { formatFileSize, getFileCategory, isPreviewable } from './z-gallery.utils';\n\n@Component({\n selector: 'z-gallery-item',\n imports: [ZButtonComponent, ZIconComponent, ZTooltipDirective, ZSkeletonComponent, TranslatePipe],\n standalone: true,\n template: `\n @if (zMode() === 'grid') {\n <div\n class=\"group border-border bg-card hover:border-primary/30 relative cursor-pointer overflow-hidden rounded-xl border shadow-sm transition-all duration-200 hover:shadow-md\"\n (click)=\"onPreview()\"\n >\n <div class=\"relative aspect-square overflow-hidden\">\n @if (isImage()) {\n @if (isLoading()) {\n <z-skeleton class=\"absolute inset-0\" />\n }\n <img\n [src]=\"file().thumbnailUrl || file().url\"\n [alt]=\"file().name\"\n class=\"size-full object-cover transition-all duration-300\"\n [class.opacity-0]=\"isLoading()\"\n [class.scale-100]=\"!isLoading()\"\n [class.group-hover:scale-105]=\"!isLoading()\"\n loading=\"lazy\"\n (load)=\"onImageLoad()\"\n (error)=\"onImageError()\"\n />\n } @else {\n <div class=\"flex size-full flex-col items-center justify-center gap-2\" [class]=\"categoryStyle().bg\">\n <i z-icon [zType]=\"categoryStyle().icon\" zSize=\"32\" [class]=\"categoryStyle().text\"></i>\n <span class=\"text-xs font-semibold\" [class]=\"categoryStyle().text\">\n {{ categoryStyle().label }}\n </span>\n </div>\n }\n\n <div\n class=\"absolute inset-0 flex items-center justify-center gap-2 bg-black/40 opacity-0 backdrop-blur-[2px] transition-all duration-200 group-hover:opacity-100\"\n >\n @if (zShowPreview() && canPreview()) {\n <button\n z-button\n zType=\"secondary\"\n zSize=\"sm\"\n zShape=\"circle\"\n class=\"shadow-lg\"\n (click)=\"onPreviewClick($event)\"\n z-tooltip\n [zContent]=\"'i18n_z_ui_gallery_preview' | translate\"\n >\n <i z-icon zType=\"lucideEye\" zSize=\"16\"></i>\n </button>\n }\n @if (zShowDownload() && (file().downloadUrl || file().url)) {\n <button\n z-button\n zType=\"secondary\"\n zSize=\"sm\"\n zShape=\"circle\"\n class=\"shadow-lg\"\n (click)=\"onDownload($event)\"\n z-tooltip\n [zContent]=\"'i18n_z_ui_gallery_download' | translate\"\n >\n <i z-icon zType=\"lucideDownload\" zSize=\"16\"></i>\n </button>\n }\n @if (zShowRemove()) {\n <button\n z-button\n zType=\"secondary\"\n zSize=\"sm\"\n zShape=\"circle\"\n class=\"shadow-lg\"\n (click)=\"onRemove($event)\"\n z-tooltip\n [zContent]=\"'i18n_z_ui_gallery_remove' | translate\"\n >\n <i z-icon zType=\"lucideTrash2\" zSize=\"16\"></i>\n </button>\n }\n </div>\n </div>\n\n <div class=\"p-2.5\">\n <p class=\"text-foreground truncate text-sm font-medium\" z-tooltip [zContent]=\"file().name\">\n {{ file().name }}\n </p>\n <p class=\"text-muted-foreground mt-0.5 text-xs\">\n {{ formattedSize() }}\n </p>\n </div>\n </div>\n } @else {\n <div\n class=\"group border-border bg-card hover:border-primary/30 flex cursor-pointer items-center gap-3 rounded-lg border px-3 py-2.5 shadow-sm transition-all duration-150 hover:shadow-md\"\n (click)=\"onPreview()\"\n >\n <div class=\"flex size-10 shrink-0 items-center justify-center rounded-lg\" [class]=\"categoryStyle().bg\">\n @if (isImage() && (file().thumbnailUrl || file().url)) {\n <img\n [src]=\"file().thumbnailUrl || file().url\"\n [alt]=\"file().name\"\n class=\"size-full rounded-lg object-cover\"\n loading=\"lazy\"\n />\n } @else {\n <i z-icon [zType]=\"categoryStyle().icon\" zSize=\"18\" [class]=\"categoryStyle().text\"></i>\n }\n </div>\n\n <div class=\"min-w-0 flex-1\">\n <p class=\"text-foreground truncate text-sm font-medium\" z-tooltip [zContent]=\"file().name\">\n {{ file().name }}\n </p>\n <p class=\"text-muted-foreground text-xs\">{{ formattedSize() }} · {{ categoryStyle().label }}</p>\n </div>\n\n <div class=\"flex shrink-0 items-center gap-0.5 opacity-0 transition-opacity group-hover:opacity-100\">\n @if (zShowPreview() && canPreview()) {\n <button\n z-button\n zType=\"ghost\"\n zSize=\"xs\"\n zShape=\"circle\"\n (click)=\"onPreviewClick($event)\"\n z-tooltip\n [zContent]=\"'i18n_z_ui_gallery_preview' | translate\"\n >\n <i z-icon zType=\"lucideEye\" zSize=\"16\"></i>\n </button>\n }\n @if (zShowDownload() && (file().downloadUrl || file().url)) {\n <button\n z-button\n zType=\"ghost\"\n zSize=\"xs\"\n zShape=\"circle\"\n (click)=\"onDownload($event)\"\n z-tooltip\n [zContent]=\"'i18n_z_ui_gallery_download' | translate\"\n >\n <i z-icon zType=\"lucideDownload\" zSize=\"16\"></i>\n </button>\n }\n @if (zShowRemove()) {\n <button\n z-button\n zType=\"ghost\"\n zSize=\"xs\"\n zShape=\"circle\"\n (click)=\"onRemove($event)\"\n z-tooltip\n [zContent]=\"'i18n_z_ui_gallery_remove' | translate\"\n >\n <i z-icon zType=\"lucideTrash2\" zSize=\"16\"></i>\n </button>\n }\n </div>\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'z-gallery-item block',\n },\n})\nexport class ZGalleryItemComponent {\n public readonly file = input.required<ZGalleryFile>();\n public readonly zMode = input<ZGalleryMode>('grid');\n public readonly zSize = input<ZGallerySize>('default');\n public readonly zShowDownload = input(true);\n public readonly zShowPreview = input(true);\n public readonly zShowRemove = input(false);\n\n public readonly zOnDownload = output<ZGalleryFile>();\n public readonly zOnPreview = output<ZGalleryFile>();\n public readonly zOnRemove = output<ZGalleryFile>();\n\n protected readonly isLoading = signal(true);\n\n protected readonly formattedSize = computed(() => formatFileSize(this.file().size));\n\n protected readonly category = computed(() => getFileCategory(this.file()));\n\n protected readonly isImage = computed(() => this.category() === 'image');\n\n protected readonly categoryStyle = computed<ZFileCategoryStyle & { icon: ZIcon }>(() => {\n const style = FILE_CATEGORY_STYLES[this.category()];\n return {\n ...style,\n icon: style.icon as ZIcon,\n };\n });\n\n protected readonly canPreview = computed(() => isPreviewable(this.file()));\n\n protected onImageLoad(): void {\n this.isLoading.set(false);\n }\n\n protected onImageError(): void {\n this.isLoading.set(false);\n }\n\n protected onDownload(event: Event): void {\n event.stopPropagation();\n this.zOnDownload.emit(this.file());\n }\n\n protected onPreviewClick(event: Event): void {\n event.stopPropagation();\n this.zOnPreview.emit(this.file());\n }\n\n protected onPreview(): void {\n if (this.canPreview()) {\n this.zOnPreview.emit(this.file());\n }\n }\n\n protected onRemove(event: Event): void {\n event.stopPropagation();\n this.zOnRemove.emit(this.file());\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { ZIconComponent, type ZIcon } from '@shival99/z-ui/components/z-icon';\nimport { ZSkeletonComponent } from '@shival99/z-ui/components/z-skeleton';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZSafeResourceUrlPipe } from '@shival99/z-ui/pipes';\nimport type { ZGalleryFile } from './z-gallery.types';\nimport { formatFileSize, getFileCategory, isImage, isPreviewable } from './z-gallery.utils';\n\n@Component({\n selector: 'z-gallery-preview',\n imports: [\n ZButtonComponent,\n ZIconComponent,\n ZSkeletonComponent,\n ZTooltipDirective,\n ZSafeResourceUrlPipe,\n TranslatePipe,\n ],\n standalone: true,\n template: `\n <div\n class=\"animate-in fade-in fixed inset-0 z-50 flex items-center justify-center bg-black/80 backdrop-blur-sm duration-200\"\n (click)=\"onBackdropClick($event)\"\n >\n <button\n z-button\n zType=\"ghost\"\n zShape=\"circle\"\n class=\"absolute top-4 right-4 z-10 text-white hover:bg-white/20\"\n (click)=\"close()\"\n >\n <i z-icon zType=\"lucideX\" zSize=\"24\"></i>\n </button>\n\n @if (hasPrev()) {\n <button\n z-button\n zType=\"ghost\"\n zShape=\"circle\"\n class=\"absolute left-4 z-10 text-white hover:bg-white/20\"\n (click)=\"navigate(-1)\"\n >\n <i z-icon zType=\"lucideChevronLeft\" zSize=\"32\"></i>\n </button>\n }\n\n @if (hasNext()) {\n <button\n z-button\n zType=\"ghost\"\n zShape=\"circle\"\n class=\"absolute right-4 z-10 text-white hover:bg-white/20\"\n (click)=\"navigate(1)\"\n >\n <i z-icon zType=\"lucideChevronRight\" zSize=\"32\"></i>\n </button>\n }\n\n <div class=\"flex h-full w-full flex-col items-center\" (click)=\"$event.stopPropagation()\">\n <div\n class=\"dark:border-border absolute top-4 left-1/2 z-10 flex -translate-x-1/2 items-center gap-2 rounded-[6px] border border-transparent bg-black/60 px-4 py-2 text-sm text-white backdrop-blur-sm dark:border\"\n >\n <div>\n <span class=\"max-w-[200px] truncate font-medium\">{{ file().name }}</span>\n <span class=\"text-white/70\">{{ formattedSize() }}</span>\n </div>\n\n @if (files().length > 1) {\n <span class=\"text-white/70\">{{ currentIndex() + 1 }} / {{ files().length }}</span>\n }\n\n <div class=\"ml-1 flex items-center gap-0.5\">\n @if (isImageFile()) {\n <button\n z-button\n zType=\"ghost\"\n zSize=\"xs\"\n zShape=\"circle\"\n class=\"text-white hover:bg-white/20\"\n z-tooltip\n [zContent]=\"'i18n_z_ui_gallery_rotate_left' | translate\"\n (click)=\"rotateLeft()\"\n >\n <i z-icon zType=\"lucideRefreshCcw\" zSize=\"14\"></i>\n </button>\n <button\n z-button\n zType=\"ghost\"\n zSize=\"xs\"\n zShape=\"circle\"\n class=\"text-white hover:bg-white/20\"\n z-tooltip\n [zContent]=\"'i18n_z_ui_gallery_rotate_right' | translate\"\n (click)=\"rotateRight()\"\n >\n <i z-icon zType=\"lucideRefreshCw\" zSize=\"14\"></i>\n </button>\n }\n\n <button\n z-button\n zType=\"ghost\"\n zSize=\"xs\"\n zShape=\"circle\"\n class=\"text-white hover:bg-white/20\"\n z-tooltip\n [zContent]=\"'i18n_z_ui_gallery_download' | translate\"\n (click)=\"download()\"\n >\n <i z-icon zType=\"lucideDownload\" zSize=\"14\"></i>\n </button>\n\n @if (zShowRemove()) {\n <button\n z-button\n zType=\"ghost\"\n zSize=\"xs\"\n zShape=\"circle\"\n class=\"text-white hover:bg-white/20\"\n z-tooltip\n [zContent]=\"'i18n_z_ui_gallery_delete' | translate\"\n (click)=\"remove()\"\n >\n <i z-icon zType=\"lucideTrash2\" zSize=\"14\"></i>\n </button>\n }\n </div>\n </div>\n\n <div class=\"relative flex flex-1 items-center justify-center pt-16\">\n @if (isImageFile()) {\n <div class=\"relative flex h-[60vh] w-[70vw] items-center justify-center\">\n @if (isLoading()) {\n <z-skeleton class=\"absolute inset-0 rounded-lg\" />\n }\n <img\n [src]=\"file().url || file().thumbnailUrl\"\n [alt]=\"file().name\"\n class=\"max-h-full max-w-full rounded-lg object-contain shadow-2xl transition-opacity duration-300\"\n [class.opacity-0]=\"isLoading()\"\n [class.opacity-100]=\"!isLoading()\"\n [class.cursor-zoom-in]=\"!zoomed()\"\n [class.cursor-zoom-out]=\"zoomed()\"\n [style.transform]=\"imageTransform()\"\n (load)=\"onImageLoad()\"\n (error)=\"onMediaError()\"\n (click)=\"toggleZoom()\"\n />\n </div>\n } @else if (isPdf()) {\n <div class=\"relative h-[75vh] w-[85vw]\">\n @if (isLoading()) {\n <z-skeleton class=\"absolute inset-0 rounded-lg\" />\n }\n <iframe\n [src]=\"file().url | zSafeResourceUrl\"\n class=\"absolute inset-0 size-full rounded-lg bg-white shadow-2xl transition-opacity duration-300\"\n [class.opacity-0]=\"isLoading()\"\n [class.opacity-100]=\"!isLoading()\"\n frameborder=\"0\"\n (load)=\"onPdfLoad()\"\n ></iframe>\n </div>\n } @else if (isVideo()) {\n <div class=\"relative flex h-[60vh] w-[70vw] items-center justify-center\">\n @if (isLoading()) {\n <z-skeleton class=\"absolute inset-0 rounded-lg\" />\n }\n <video\n [src]=\"file().url\"\n controls\n autoplay\n class=\"max-h-full max-w-full rounded-lg shadow-2xl transition-opacity duration-300\"\n [class.opacity-0]=\"isLoading()\"\n [class.opacity-100]=\"!isLoading()\"\n (loadeddata)=\"onVideoLoad()\"\n (error)=\"onMediaError()\"\n >\n Your browser does not support the video tag.\n </video>\n </div>\n } @else {\n <div class=\"bg-card flex flex-col items-center justify-center rounded-lg p-12 shadow-2xl\">\n <div class=\"bg-muted mb-4 flex size-24 items-center justify-center rounded-xl\">\n <i z-icon [zType]=\"fileIcon()\" zSize=\"40\" class=\"text-muted-foreground\"></i>\n </div>\n <span class=\"text-foreground mb-2 text-lg font-medium\">{{ file().name }}</span>\n <span class=\"text-muted-foreground mb-4 text-sm\">{{ formattedSize() }}</span>\n <span class=\"text-muted-foreground rounded-md bg-amber-100 px-3 py-1.5 text-xs dark:bg-amber-900/30\">\n <i\n z-icon\n zType=\"lucideInfo\"\n zSize=\"14\"\n class=\"mr-1 inline-block align-middle text-amber-600 dark:text-amber-400\"\n ></i>\n <span class=\"align-middle text-amber-700 dark:text-amber-300\">\n {{ 'i18n_z_ui_gallery_preview_not_supported' | translate }}\n </span>\n </span>\n </div>\n }\n </div>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'z-gallery-preview',\n '(document:keydown)': 'onKeyDown($event)',\n },\n})\nexport class ZGalleryPreviewComponent {\n public readonly file = input.required<ZGalleryFile>();\n public readonly files = input<ZGalleryFile[]>([]);\n public readonly zShowRemove = input(false);\n\n public readonly zOnClose = output<void>();\n public readonly zOnDownload = output<ZGalleryFile>();\n public readonly zOnNavigate = output<ZGalleryFile>();\n public readonly zOnRemove = output<ZGalleryFile>();\n\n protected readonly zoomed = signal(false);\n protected readonly isLoading = signal(true);\n protected readonly rotation = signal(0);\n\n private readonly _mediaLoaded = signal(false);\n private _loadingStartTime = 0;\n private readonly _minLoadingTime = 300;\n\n constructor() {\n effect(() => {\n const currentFile = this.file();\n if (currentFile) {\n this.isLoading.set(true);\n this._mediaLoaded.set(false);\n this._loadingStartTime = Date.now();\n this.zoomed.set(false);\n this.rotation.set(0);\n }\n });\n }\n\n private _completeLoading(): void {\n const elapsed = Date.now() - this._loadingStartTime;\n const remaining = this._minLoadingTime - elapsed;\n\n if (remaining > 0) {\n setTimeout(() => this.isLoading.set(false), remaining);\n } else {\n this.isLoading.set(false);\n }\n }\n\n protected readonly currentIndex = computed(() => {\n const allFiles = this.files();\n const current = this.file();\n return allFiles.findIndex(f => f.id === current.id);\n });\n\n protected readonly hasPrev = computed(() => this.currentIndex() > 0);\n protected readonly hasNext = computed(() => this.currentIndex() < this.files().length - 1);\n\n protected readonly isImageFile = computed(() => isImage(this.file()));\n protected readonly isPdf = computed(() => getFileCategory(this.file()) === 'pdf');\n protected readonly isVideo = computed(() => getFileCategory(this.file()) === 'video');\n protected readonly canPreview = computed(() => isPreviewable(this.file()));\n\n protected readonly formattedSize = computed(() => formatFileSize(this.file().size));\n\n protected readonly imageTransform = computed(() => {\n const rot = this.rotation();\n const zoom = this.zoomed() ? 'scale(1.5)' : 'scale(1)';\n return `rotate(${rot}deg) ${zoom}`;\n });\n\n protected readonly fileIcon = computed<ZIcon>(() => {\n const category = getFileCategory(this.file());\n const iconMap: Record<string, ZIcon> = {\n pdf: 'lucideFileText',\n word: 'lucideFileText',\n excel: 'lucideFileSpreadsheet',\n video: 'lucideVideo',\n audio: 'lucideMusic',\n archive: 'lucideFileArchive',\n code: 'lucideCode',\n text: 'lucideFileText',\n unknown: 'lucideFile',\n };\n return iconMap[category] || 'lucideFile';\n });\n\n protected onKeyDown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Escape':\n this.close();\n break;\n case 'ArrowLeft':\n if (this.hasPrev()) {\n this.navigate(-1);\n }\n break;\n case 'ArrowRight':\n if (this.hasNext()) {\n this.navigate(1);\n }\n break;\n case 'r':\n case 'R':\n if (this.isImageFile()) {\n this.rotateRight();\n }\n break;\n }\n }\n\n protected close(): void {\n this.zOnClose.emit();\n }\n\n protected navigate(direction: -1 | 1): void {\n const allFiles = this.files();\n const newIndex = this.currentIndex() + direction;\n if (newIndex >= 0 && newIndex < allFiles.length) {\n this.zoomed.set(false);\n this.rotation.set(0);\n this.isLoading.set(true);\n this._mediaLoaded.set(false);\n this._loadingStartTime = Date.now();\n this.zOnNavigate.emit(allFiles[newIndex]);\n }\n }\n\n protected toggleZoom(): void {\n if (this.isImageFile()) {\n this.zoomed.update(z => !z);\n }\n }\n\n protected rotateLeft(): void {\n this.rotation.update(r => (r - 90 + 360) % 360);\n }\n\n protected rotateRight(): void {\n this.rotation.update(r => (r + 90) % 360);\n }\n\n protected onImageLoad(): void {\n this._completeLoading();\n }\n\n protected onVideoLoad(): void {\n this._completeLoading();\n }\n\n protected onPdfLoad(): void {\n this._completeLoading();\n }\n\n protected onMediaError(): void {\n this._completeLoading();\n }\n\n protected download(): void {\n this.zOnDownload.emit(this.file());\n }\n\n protected remove(): void {\n this.zOnRemove.emit(this.file());\n }\n\n protected onBackdropClick(event: Event): void {\n if ((event.target as HTMLElement).classList.contains('fixed')) {\n this.close();\n }\n }\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const zGalleryVariants = cva('z-gallery', {\n variants: {\n zSize: {\n sm: 'z-gallery--sm',\n default: 'z-gallery--default',\n lg: 'z-gallery--lg',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n});\n\nexport type ZGalleryVariants = VariantProps<typeof zGalleryVariants>;\n\n// Grid item variants\nexport const zGalleryItemVariants = cva(\n 'group relative overflow-hidden rounded-lg border border-border bg-card transition-all duration-200 cursor-pointer',\n {\n variants: {\n zMode: {\n grid: 'flex flex-col hover:scale-[1.02] hover:shadow-md hover:border-primary/50',\n list: 'flex flex-row items-center gap-3 p-3 hover:bg-accent hover:border-primary/50',\n },\n zSize: {\n sm: '',\n default: '',\n lg: '',\n },\n },\n compoundVariants: [\n // Grid sizes\n { zMode: 'grid', zSize: 'sm', class: '' },\n { zMode: 'grid', zSize: 'default', class: '' },\n { zMode: 'grid', zSize: 'lg', class: '' },\n // List sizes\n { zMode: 'list', zSize: 'sm', class: 'p-2' },\n { zMode: 'list', zSize: 'default', class: 'p-3' },\n { zMode: 'list', zSize: 'lg', class: 'p-4' },\n ],\n defaultVariants: {\n zMode: 'grid',\n zSize: 'default',\n },\n }\n);\n\nexport type ZGalleryItemVariants = VariantProps<typeof zGalleryItemVariants>;\n\n// File icon badge variants\nexport const zGalleryFileIconVariants = cva(\n 'flex items-center justify-center rounded-md font-bold uppercase select-none',\n {\n variants: {\n zSize: {\n sm: 'w-full h-16 text-xs',\n default: 'w-full h-24 text-sm',\n lg: 'w-full h-32 text-base',\n },\n zMode: {\n grid: '',\n list: '',\n },\n },\n compoundVariants: [\n { zMode: 'list', zSize: 'sm', class: 'size-8 text-[10px]' },\n { zMode: 'list', zSize: 'default', class: 'size-10 text-xs' },\n { zMode: 'list', zSize: 'lg', class: 'size-12 text-sm' },\n ],\n defaultVariants: {\n zSize: 'default',\n zMode: 'grid',\n },\n }\n);\n\nexport type ZGalleryFileIconVariants = VariantProps<typeof zGalleryFileIconVariants>;\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { ZButtonGroupComponent, ZButtonGroupItemDirective } from '@shival99/z-ui/components/z-button-group';\nimport { ZEmptyComponent } from '@shival99/z-ui/components/z-empty';\nimport { ZIconComponent, type ZIcon } from '@shival99/z-ui/components/z-icon';\nimport { ZInputComponent } from '@shival99/z-ui/components/z-input';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { ZGalleryItemComponent } from './z-gallery-item.component';\nimport { ZGalleryPreviewComponent } from './z-gallery-preview.component';\nimport type { ZGalleryControl, ZGalleryFile, ZGalleryMode, ZGallerySize, ZGalleryToggleSize } from './z-gallery.types';\nimport { zGalleryVariants } from './z-gallery.variants';\n\n@Component({\n selector: 'z-gallery',\n imports: [\n FormsModule,\n TranslatePipe,\n ZGalleryItemComponent,\n ZGalleryPreviewComponent,\n ZButtonGroupComponent,\n ZButtonGroupItemDirective,\n ZButtonComponent,\n ZIconComponent,\n ZEmptyComponent,\n ZInputComponent,\n ],\n standalone: true,\n template: `\n <div [class]=\"containerClasses()\">\n @if (showHeader()) {\n <div class=\"mb-4 flex flex-wrap items-center justify-between gap-3\">\n <div class=\"flex items-center gap-3\">\n @if (zTitle()) {\n <h3 class=\"text-sm font-medium\">{{ zTitle() }}</h3>\n }\n\n @if (zShowSearch()) {\n <z-input\n zSearch\n [zSize]=\"searchInputSize()\"\n [zPlaceholder]=\"zSearchPlaceholder() || ('i18n_z_ui_gallery_search_placeholder' | translate)\"\n [ngModel]=\"searchQuery()\"\n (ngModelChange)=\"onSearchChange($event)\"\n class=\"w-64\"\n />\n }\n </div>\n\n @if (zShowModeToggle() && zFiles().length > 0) {\n <z-button-group [(zActive)]=\"modeIndex\">\n <button z-button zType=\"outline\" [zSize]=\"zToggleSize()\" z-button-group-item>\n <i z-icon zType=\"lucideLayoutGrid\" [zSize]=\"toggleIconSize()\"></i>\n </button>\n <button z-button zType=\"outline\" [zSize]=\"zToggleSize()\" z-button-group-item>\n <i z-icon zType=\"lucideList\" [zSize]=\"toggleIconSize()\"></i>\n </button>\n </z-button-group>\n }\n </div>\n }\n\n @if (filteredFiles().length > 0) {\n @if (currentMode() === 'grid') {\n <div class=\"grid gap-4\" [style.grid-template-columns]=\"gridColumns()\">\n @for (file of filteredFiles(); track file.id) {\n <z-gallery-item\n [file]=\"file\"\n zMode=\"grid\"\n [zSize]=\"zSize()\"\n [zShowDownload]=\"zShowDownload()\"\n [zShowPreview]=\"zShowPreview()\"\n [zShowRemove]=\"zShowRemove()\"\n (zOnDownload)=\"onDownload($event)\"\n (zOnPreview)=\"onPreview($event)\"\n (zOnRemove)=\"onRemove($event)\"\n />\n }\n </div>\n } @else {\n <div class=\"flex flex-col gap-2\">\n @for (file of filteredFiles(); track file.id) {\n <z-gallery-item\n [file]=\"file\"\n zMode=\"list\"\n [zSize]=\"zSize()\"\n [zShowDownload]=\"zShowDownload()\"\n [zShowPreview]=\"zShowPreview()\"\n [zShowRemove]=\"zShowRemove()\"\n (zOnDownload)=\"onDownload($event)\"\n (zOnPreview)=\"onPreview($event)\"\n (zOnRemove)=\"onRemove($event)\"\n />\n }\n </div>\n }\n } @else if (zFiles().length > 0 && searchQuery()) {\n <z-empty zIcon=\"lucideSearchX\" [zMessage]=\"'i18n_z_ui_gallery_no_search_results' | translate\" zSize=\"sm\" />\n } @else {\n <z-empty\n [zIcon]=\"zEmptyIcon()\"\n [zMessage]=\"zEmptyText() || ('i18n_z_ui_gallery_no_files' | translate)\"\n zSize=\"sm\"\n />\n }\n\n @if (previewFile()) {\n <z-gallery-preview\n [file]=\"previewFile()!\"\n [files]=\"filteredFiles()\"\n [zShowRemove]=\"zShowRemove()\"\n (zOnClose)=\"closePreview()\"\n (zOnDownload)=\"onDownload($event)\"\n (zOnNavigate)=\"onNavigatePreview($event)\"\n (zOnRemove)=\"onRemoveFromPreview($event)\"\n />\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'z-gallery block',\n },\n exportAs: 'zGallery',\n})\nexport class ZGalleryComponent implements AfterViewInit {\n public readonly zFiles = input<ZGalleryFile[]>([]);\n public readonly zMode = model<ZGalleryMode>('grid');\n public readonly zSize = input<ZGallerySize>('default');\n public readonly zColumns = input<number>(4);\n public readonly zShowDownload = input(true);\n public readonly zShowPreview = input(true);\n public readonly zShowRemove = input(false);\n public readonly zShowModeToggle = input(true);\n public readonly zShowSearch = input(false);\n public readonly zServerSearch = input(false);\n public readonly zSearchPlaceholder = input<string>('Search files...');\n public readonly zToggleSize = input<ZGalleryToggleSize>('xs');\n public readonly zTitle = input<string>('');\n public readonly zEmptyText = input<string>('No files');\n public readonly zEmptyIcon = input<ZIcon>('lucideImage');\n public readonly zClass = input<ClassValue>('');\n\n public readonly zOnDownload = output<ZGalleryFile>();\n public readonly zOnPreview = output<ZGalleryFile>();\n public readonly zOnRemove = output<ZGalleryFile>();\n public readonly zModeChange = output<ZGalleryMode>();\n public readonly zSearchChange = output<string>();\n public readonly zControl = output<ZGalleryControl>();\n\n protected readonly modeIndex = signal<number | null>(0);\n protected readonly previewFile = signal<ZGalleryFile | null>(null);\n protected readonly searchQuery = signal<string>('');\n\n protected readonly currentMode = computed<ZGalleryMode>(() => {\n const index = this.modeIndex();\n return index === 1 ? 'list' : 'grid';\n });\n\n protected readonly gridColumns = computed(() => {\n const cols = this.zColumns();\n return `repeat(${cols}, minmax(0, 1fr))`;\n });\n\n protected readonly containerClasses = computed(() =>\n zMergeClasses(zGalleryVariants({ zSize: this.zSize() }), this.zClass())\n );\n\n protected readonly showHeader = computed(\n () => this.zTitle() || this.zShowSearch() || (this.zShowModeToggle() && this.zFiles().length > 0)\n );\n\n protected readonly toggleIconSize = computed(() => {\n const size = this.zToggleSize();\n switch (size) {\n case 'xs':\n return '14';\n case 'sm':\n return '16';\n case 'lg':\n return '20';\n default:\n return '18';\n }\n });\n\n protected readonly searchInputSize = computed<'sm' | 'default' | 'lg'>(() => {\n const size = this.zToggleSize();\n if (size === 'xs') {\n return 'sm';\n }\n return size;\n });\n\n protected readonly filteredFiles = computed(() => {\n const files = this.zFiles();\n const query = this.searchQuery().toLowerCase().trim();\n\n if (!query || this.zServerSearch()) {\n return files;\n }\n\n return files.filter(file => file.name.toLowerCase().includes(query));\n });\n\n ngAfterViewInit(): void {\n this.zControl.emit({\n setMode: mode => {\n this.modeIndex.set(mode === 'list' ? 1 : 0);\n this.zMode.set(mode);\n this.zModeChange.emit(mode);\n },\n getMode: () => this.currentMode(),\n getFiles: () => this.zFiles(),\n openPreview: file => this.previewFile.set(file),\n closePreview: () => this.previewFile.set(null),\n });\n }\n\n protected onSearchChange(query: string): void {\n this.searchQuery.set(query);\n this.zSearchChange.emit(query);\n }\n\n protected onDownload(file: ZGalleryFile): void {\n this.zOnDownload.emit(file);\n const downloadLink = file.downloadUrl || file.url;\n if (downloadLink) {\n const link = document.createElement('a');\n link.href = downloadLink;\n link.download = file.name;\n link.target = '_blank';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n }\n\n protected onPreview(file: ZGalleryFile): void {\n this.previewFile.set(file);\n this.zOnPreview.emit(file);\n }\n\n protected onRemove(file: ZGalleryFile): void {\n this.zOnRemove.emit(file);\n }\n\n protected closePreview(): void {\n this.previewFile.set(null);\n }\n\n protected onNavigatePreview(file: ZGalleryFile): void {\n this.previewFile.set(file);\n }\n\n protected onRemoveFromPreview(file: ZGalleryFile): void {\n this.zOnRemove.emit(file);\n const allFiles = this.filteredFiles();\n const currentIndex = allFiles.findIndex(f => f.id === file.id);\n\n if (allFiles.length <= 1) {\n this.closePreview();\n }\n\n if (currentIndex < allFiles.length - 1) {\n this.previewFile.set(allFiles[currentIndex + 1]);\n return;\n }\n\n this.previewFile.set(allFiles[currentIndex - 1]);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, signal, ViewEncapsulation } from '@angular/core';\nimport { ZSkeletonComponent } from '@shival99/z-ui/components/z-skeleton';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport {\n FILE_CATEGORY_STYLES,\n type ZFileCategory,\n type ZGalleryFile,\n type ZGalleryMode,\n type ZGallerySize,\n} from './z-gallery.types';\nimport { getFileCategory } from './z-gallery.utils';\nimport { zGalleryFileIconVariants } from './z-gallery.variants';\n\n@Component({\n selector: 'z-gallery-file-icon',\n imports: [ZSkeletonComponent],\n standalone: true,\n template: `\n <div [class]=\"containerClasses()\" class=\"group/icon overflow-hidden\">\n @if (showThumbnail()) {\n @if (isLoading()) {\n <z-skeleton class=\"absolute inset-0 size-full\" />\n }\n <img\n [src]=\"file().thumbnailUrl || file().url\"\n [alt]=\"file().name\"\n class=\"size-full object-cover transition-transform duration-300 group-hover/icon:scale-105\"\n loading=\"lazy\"\n [class.opacity-0]=\"isLoading()\"\n [class.opacity-100]=\"!isLoading()\"\n (load)=\"onImageLoad()\"\n (error)=\"onImageError($event)\"\n />\n } @else {\n <div class=\"flex flex-col items-center justify-center gap-1\">\n <span class=\"font-bold tracking-wide\">{{ style().label }}</span>\n </div>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'z-gallery-file-icon block',\n },\n})\nexport class ZGalleryFileIconComponent {\n public readonly file = input.required<ZGalleryFile>();\n public readonly zSize = input<ZGallerySize>('default');\n public readonly zMode = input<ZGalleryMode>('grid');\n\n protected readonly imageError = signal(false);\n protected readonly isLoading = signal(true);\n protected readonly category = computed<ZFileCategory>(() => getFileCategory(this.file()));\n protected readonly style = computed(() => FILE_CATEGORY_STYLES[this.category()]);\n\n protected readonly showThumbnail = computed(() => {\n const file = this.file();\n const cat = this.category();\n return cat === 'image' && (file.thumbnailUrl || file.url) && !this.imageError();\n });\n\n protected readonly containerClasses = computed(() => {\n const style = this.style();\n const showThumb = this.showThumbnail();\n\n return zMergeClasses(\n zGalleryFileIconVariants({\n zSize: this.zSize(),\n zMode: this.zMode(),\n }),\n showThumb ? 'bg-muted relative' : [style.bg, style.text]\n );\n });\n\n protected onImageLoad(): void {\n this.isLoading.set(false);\n }\n\n protected onImageError(event: Event): void {\n this.imageError.set(true);\n this.isLoading.set(false);\n const img = event.target as HTMLImageElement;\n img.style.display = 'none';\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shival99-z-ui-components-z-gallery.mjs","sources":["../../../../libs/core-ui/components/z-gallery/z-gallery.types.ts","../../../../libs/core-ui/components/z-gallery/z-gallery.utils.ts","../../../../libs/core-ui/components/z-gallery/z-gallery-item.component.ts","../../../../libs/core-ui/components/z-gallery/z-gallery-preview.component.ts","../../../../libs/core-ui/components/z-gallery/z-gallery.variants.ts","../../../../libs/core-ui/components/z-gallery/z-gallery.component.ts","../../../../libs/core-ui/components/z-gallery/z-gallery-file-icon.component.ts","../../../../libs/core-ui/components/z-gallery/shival99-z-ui-components-z-gallery.ts"],"sourcesContent":["export type ZGalleryMode = 'grid' | 'list';\nexport type ZGallerySize = 'sm' | 'default' | 'lg';\nexport type ZGalleryToggleSize = 'xs' | 'sm' | 'default' | 'lg';\n\nexport interface ZGalleryFile {\n id: string;\n name: string;\n size: number;\n type: string;\n url?: string;\n downloadUrl?: string;\n thumbnailUrl?: string;\n createdAt?: Date;\n updatedAt?: Date;\n}\n\nexport type ZFileCategory =\n | 'image'\n | 'pdf'\n | 'word'\n | 'excel'\n | 'powerpoint'\n | 'video'\n | 'audio'\n | 'archive'\n | 'code'\n | 'text'\n | 'unknown';\n\nexport interface ZFileCategoryStyle {\n bg: string;\n text: string;\n label: string;\n icon: string;\n}\n\nexport const FILE_CATEGORY_STYLES: Record<ZFileCategory, ZFileCategoryStyle> = {\n image: {\n bg: 'bg-purple-100 dark:bg-purple-900/30',\n text: 'text-purple-600 dark:text-purple-400',\n label: 'IMG',\n icon: 'lucideImage',\n },\n pdf: {\n bg: 'bg-red-100 dark:bg-red-900/30',\n text: 'text-red-600 dark:text-red-400',\n label: 'PDF',\n icon: 'lucideFileText',\n },\n word: {\n bg: 'bg-blue-100 dark:bg-blue-900/30',\n text: 'text-blue-600 dark:text-blue-400',\n label: 'DOC',\n icon: 'lucideFileText',\n },\n excel: {\n bg: 'bg-green-100 dark:bg-green-900/30',\n text: 'text-green-600 dark:text-green-400',\n label: 'XLS',\n icon: 'lucideFileSpreadsheet',\n },\n powerpoint: {\n bg: 'bg-orange-100 dark:bg-orange-900/30',\n text: 'text-orange-600 dark:text-orange-400',\n label: 'PPT',\n icon: 'lucideFileText',\n },\n video: {\n bg: 'bg-pink-100 dark:bg-pink-900/30',\n text: 'text-pink-600 dark:text-pink-400',\n label: 'VID',\n icon: 'lucideVideo',\n },\n audio: {\n bg: 'bg-yellow-100 dark:bg-yellow-900/30',\n text: 'text-yellow-700 dark:text-yellow-400',\n label: 'AUD',\n icon: 'lucideMusic',\n },\n archive: {\n bg: 'bg-amber-100 dark:bg-amber-900/30',\n text: 'text-amber-600 dark:text-amber-400',\n label: 'ZIP',\n icon: 'lucideFileArchive',\n },\n code: {\n bg: 'bg-slate-100 dark:bg-slate-800',\n text: 'text-slate-600 dark:text-slate-400',\n label: 'CODE',\n icon: 'lucideCode',\n },\n text: {\n bg: 'bg-gray-100 dark:bg-gray-800',\n text: 'text-gray-600 dark:text-gray-400',\n label: 'TXT',\n icon: 'lucideFileText',\n },\n unknown: {\n bg: 'bg-gray-100 dark:bg-gray-800',\n text: 'text-gray-500 dark:text-gray-400',\n label: 'FILE',\n icon: 'lucideFile',\n },\n};\n\nexport interface ZGalleryControl {\n setMode: (mode: ZGalleryMode) => void;\n getMode: () => ZGalleryMode;\n getFiles: () => ZGalleryFile[];\n openPreview: (file: ZGalleryFile) => void;\n closePreview: () => void;\n // Selection methods\n selectAll: () => void;\n deselectAll: () => void;\n toggleSelection: (file: ZGalleryFile) => void;\n getSelectedFiles: () => ZGalleryFile[];\n isSelected: (file: ZGalleryFile) => boolean;\n}\n\n/**\n * Action types emitted by gallery events\n */\nexport type ZGalleryActionType =\n | 'select'\n | 'deselect'\n | 'select-all'\n | 'deselect-all'\n | 'delete'\n | 'download'\n | 'preview';\n\n/**\n * Event payload for zOnAction output\n */\nexport interface ZGalleryActionEvent {\n type: ZGalleryActionType;\n file?: ZGalleryFile;\n files?: ZGalleryFile[];\n}\n\n/**\n * Selection change event\n */\nexport interface ZGallerySelectionChange {\n selectedFiles: ZGalleryFile[];\n addedFiles?: ZGalleryFile[];\n removedFiles?: ZGalleryFile[];\n}\n","import type { ZFileCategory, ZGalleryFile } from './z-gallery.types';\n\nconst IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'bmp', 'ico'];\nconst VIDEO_EXTENSIONS = ['mp4', 'avi', 'mov', 'wmv', 'flv', 'webm', 'mkv'];\nconst AUDIO_EXTENSIONS = ['mp3', 'wav', 'ogg', 'flac', 'aac', 'm4a'];\nconst ARCHIVE_EXTENSIONS = ['zip', 'rar', 'tar', 'gz', '7z', 'bz2'];\nconst CODE_EXTENSIONS = [\n 'js',\n 'ts',\n 'jsx',\n 'tsx',\n 'html',\n 'css',\n 'scss',\n 'json',\n 'xml',\n 'py',\n 'java',\n 'c',\n 'cpp',\n 'go',\n 'rs',\n 'php',\n 'rb',\n 'swift',\n 'kt',\n];\nconst TEXT_EXTENSIONS = ['txt', 'md', 'log'];\nconst WORD_EXTENSIONS = ['doc', 'docx', 'odt', 'rtf'];\nconst EXCEL_EXTENSIONS = ['xls', 'xlsx', 'csv', 'ods'];\nconst POWERPOINT_EXTENSIONS = ['ppt', 'pptx', 'odp'];\n\nconst FILE_SIZE_UNITS = ['B', 'KB', 'MB', 'GB'];\nconst FILE_SIZE_BASE = 1024;\n\nexport const getFileCategory = (file: ZGalleryFile): ZFileCategory => {\n const type = file.type?.toLowerCase() || '';\n const name = file.name?.toLowerCase() || '';\n const ext = name.split('.').pop() || '';\n\n if (type.startsWith('image/') || IMAGE_EXTENSIONS.includes(ext)) {\n return 'image';\n }\n\n if (type === 'application/pdf' || ext === 'pdf') {\n return 'pdf';\n }\n\n if (type.includes('word') || type.includes('document') || WORD_EXTENSIONS.includes(ext)) {\n return 'word';\n }\n\n if (type.includes('excel') || type.includes('spreadsheet') || EXCEL_EXTENSIONS.includes(ext)) {\n return 'excel';\n }\n\n if (type.includes('powerpoint') || type.includes('presentation') || POWERPOINT_EXTENSIONS.includes(ext)) {\n return 'powerpoint';\n }\n\n if (type.startsWith('video/') || VIDEO_EXTENSIONS.includes(ext)) {\n return 'video';\n }\n\n if (type.startsWith('audio/') || AUDIO_EXTENSIONS.includes(ext)) {\n return 'audio';\n }\n\n if (\n type.includes('zip') ||\n type.includes('rar') ||\n type.includes('tar') ||\n type.includes('compressed') ||\n ARCHIVE_EXTENSIONS.includes(ext)\n ) {\n return 'archive';\n }\n\n if (CODE_EXTENSIONS.includes(ext)) {\n return 'code';\n }\n\n if (type.startsWith('text/') || TEXT_EXTENSIONS.includes(ext)) {\n return 'text';\n }\n\n return 'unknown';\n};\n\nexport const formatFileSize = (bytes: number): string => {\n if (bytes === 0) {\n return '0 B';\n }\n\n const i = Math.floor(Math.log(bytes) / Math.log(FILE_SIZE_BASE));\n const size = bytes / Math.pow(FILE_SIZE_BASE, i);\n return `${size.toFixed(i > 0 ? 1 : 0)} ${FILE_SIZE_UNITS[i]}`;\n};\n\nexport const isPreviewable = (file: ZGalleryFile): boolean => {\n const category = getFileCategory(file);\n return category === 'image' || category === 'pdf' || category === 'video';\n};\n\nexport const isImage = (file: ZGalleryFile): boolean => getFileCategory(file) === 'image';\n","import { ChangeDetectionStrategy, Component, computed, input, output, signal, ViewEncapsulation } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { ZIconComponent, type ZIcon } from '@shival99/z-ui/components/z-icon';\nimport { ZSkeletonComponent } from '@shival99/z-ui/components/z-skeleton';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport {\n FILE_CATEGORY_STYLES,\n type ZFileCategoryStyle,\n type ZGalleryFile,\n type ZGalleryMode,\n type ZGallerySize,\n} from './z-gallery.types';\nimport { formatFileSize, getFileCategory, isPreviewable } from './z-gallery.utils';\n\n@Component({\n selector: 'z-gallery-item',\n imports: [ZButtonComponent, ZIconComponent, ZTooltipDirective, ZSkeletonComponent, TranslatePipe],\n standalone: true,\n template: `\n @if (zMode() === 'grid') {\n <div\n class=\"group relative cursor-pointer rounded-xl border transition-all duration-200 hover:shadow-md\"\n [class.border-border]=\"!zSelected()\"\n [class.bg-card]=\"!zSelected()\"\n [class.shadow-sm]=\"!zSelected()\"\n [class.hover:border-primary/30]=\"!zSelected()\"\n [class.border-primary/40]=\"zSelected()\"\n [class.bg-primary/5]=\"zSelected()\"\n [class.shadow-primary/15]=\"zSelected()\"\n [class.shadow-md]=\"zSelected()\"\n (click)=\"onItemClick()\"\n >\n @if (zSelectable()) {\n <div\n class=\"bg-primary shadow-card absolute -top-2 -right-2 z-10 flex size-6 items-center justify-center rounded-full transition-all duration-150\"\n [class.scale-100]=\"zSelected()\"\n [class.opacity-100]=\"zSelected()\"\n [class.scale-0]=\"!zSelected()\"\n [class.opacity-0]=\"!zSelected()\"\n >\n <i z-icon zType=\"lucideCheck\" zSize=\"14\" class=\"text-primary-foreground\"></i>\n </div>\n }\n\n <div class=\"relative aspect-square overflow-hidden rounded-t-xl\">\n @if (isImage()) {\n @if (isLoading()) {\n <z-skeleton class=\"absolute inset-0\" />\n }\n <img\n [src]=\"file().thumbnailUrl || file().url\"\n [alt]=\"file().name\"\n class=\"size-full object-cover transition-all duration-300\"\n [class.opacity-0]=\"isLoading()\"\n [class.scale-100]=\"!isLoading()\"\n [class.group-hover:scale-105]=\"!isLoading()\"\n loading=\"lazy\"\n (load)=\"onImageLoad()\"\n (error)=\"onImageError()\"\n />\n } @else {\n <div class=\"flex size-full flex-col items-center justify-center gap-2\" [class]=\"categoryStyle().bg\">\n <i z-icon [zType]=\"categoryStyle().icon\" zSize=\"32\" [class]=\"categoryStyle().text\"></i>\n <span class=\"text-xs font-semibold\" [class]=\"categoryStyle().text\">\n {{ categoryStyle().label }}\n </span>\n </div>\n }\n\n <div\n class=\"absolute inset-0 flex items-center justify-center gap-2 bg-black/40 opacity-0 backdrop-blur-[2px] transition-all duration-200 group-hover:opacity-100\"\n >\n @if (zShowPreview() && canPreview()) {\n <button\n z-button\n zType=\"secondary\"\n zSize=\"sm\"\n zShape=\"circle\"\n class=\"shadow-lg\"\n (click)=\"onPreviewClick($event)\"\n z-tooltip\n [zContent]=\"'i18n_z_ui_gallery_preview' | translate\"\n >\n <i z-icon zType=\"lucideEye\" zSize=\"16\"></i>\n </button>\n }\n @if (zShowDownload() && (file().downloadUrl || file().url)) {\n <button\n z-button\n zType=\"secondary\"\n zSize=\"sm\"\n zShape=\"circle\"\n class=\"shadow-lg\"\n (click)=\"onDownload($event)\"\n z-tooltip\n [zContent]=\"'i18n_z_ui_gallery_download' | translate\"\n >\n <i z-icon zType=\"lucideDownload\" zSize=\"16\"></i>\n </button>\n }\n @if (zShowRemove()) {\n <button\n z-button\n zType=\"secondary\"\n zSize=\"sm\"\n zShape=\"circle\"\n class=\"shadow-lg\"\n (click)=\"onRemove($event)\"\n z-tooltip\n [zContent]=\"'i18n_z_ui_gallery_remove' | translate\"\n >\n <i z-icon zType=\"lucideTrash2\" zSize=\"16\"></i>\n </button>\n }\n </div>\n </div>\n\n <div class=\"p-2.5\">\n <p class=\"text-foreground truncate text-sm font-medium\" z-tooltip [zContent]=\"file().name\">\n {{ file().name }}\n </p>\n <p class=\"text-muted-foreground mt-0.5 text-xs\">\n {{ formattedSize() }}\n </p>\n </div>\n </div>\n } @else {\n <div\n class=\"group flex cursor-pointer items-center gap-3 rounded-lg border px-3 py-2.5 shadow-sm transition-all duration-150 hover:shadow-md\"\n [class.border-border]=\"!zSelected()\"\n [class.bg-card]=\"!zSelected()\"\n [class.hover:border-primary/30]=\"!zSelected()\"\n [class.border-primary/40]=\"zSelected()\"\n [class.bg-primary/5]=\"zSelected()\"\n (click)=\"onItemClick()\"\n >\n @if (zSelectable()) {\n <div\n class=\"bg-primary -ml-1 flex size-5 shrink-0 items-center justify-center rounded-full transition-all duration-150\"\n [class.scale-100]=\"zSelected()\"\n [class.opacity-100]=\"zSelected()\"\n [class.scale-0]=\"!zSelected()\"\n [class.opacity-0]=\"!zSelected()\"\n >\n <i z-icon zType=\"lucideCheck\" zSize=\"12\" class=\"text-primary-foreground\"></i>\n </div>\n }\n\n <div class=\"flex size-10 shrink-0 items-center justify-center rounded-lg\" [class]=\"categoryStyle().bg\">\n @if (isImage() && (file().thumbnailUrl || file().url)) {\n <img\n [src]=\"file().thumbnailUrl || file().url\"\n [alt]=\"file().name\"\n class=\"size-full rounded-lg object-cover\"\n loading=\"lazy\"\n />\n } @else {\n <i z-icon [zType]=\"categoryStyle().icon\" zSize=\"18\" [class]=\"categoryStyle().text\"></i>\n }\n </div>\n\n <div class=\"min-w-0 flex-1\">\n <p class=\"text-foreground truncate text-sm font-medium\" z-tooltip [zContent]=\"file().name\">\n {{ file().name }}\n </p>\n <p class=\"text-muted-foreground text-xs\">{{ formattedSize() }} · {{ categoryStyle().label }}</p>\n </div>\n\n <div class=\"flex shrink-0 items-center gap-0.5 opacity-0 transition-opacity group-hover:opacity-100\">\n @if (zShowPreview() && canPreview()) {\n <button\n z-button\n zType=\"ghost\"\n zSize=\"xs\"\n zShape=\"circle\"\n (click)=\"onPreviewClick($event)\"\n z-tooltip\n [zContent]=\"'i18n_z_ui_gallery_preview' | translate\"\n >\n <i z-icon zType=\"lucideEye\" zSize=\"16\"></i>\n </button>\n }\n @if (zShowDownload() && (file().downloadUrl || file().url)) {\n <button\n z-button\n zType=\"ghost\"\n zSize=\"xs\"\n zShape=\"circle\"\n (click)=\"onDownload($event)\"\n z-tooltip\n [zContent]=\"'i18n_z_ui_gallery_download' | translate\"\n >\n <i z-icon zType=\"lucideDownload\" zSize=\"16\"></i>\n </button>\n }\n @if (zShowRemove()) {\n <button\n z-button\n zType=\"ghost\"\n zSize=\"xs\"\n zShape=\"circle\"\n (click)=\"onRemove($event)\"\n z-tooltip\n [zContent]=\"'i18n_z_ui_gallery_remove' | translate\"\n >\n <i z-icon zType=\"lucideTrash2\" zSize=\"16\"></i>\n </button>\n }\n </div>\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'z-gallery-item block',\n },\n})\nexport class ZGalleryItemComponent {\n public readonly file = input.required<ZGalleryFile>();\n public readonly zMode = input<ZGalleryMode>('grid');\n public readonly zSize = input<ZGallerySize>('default');\n public readonly zShowDownload = input(true);\n public readonly zShowPreview = input(true);\n public readonly zShowRemove = input(false);\n public readonly zSelectable = input(false);\n public readonly zSelected = input(false);\n\n public readonly zOnDownload = output<ZGalleryFile>();\n public readonly zOnPreview = output<ZGalleryFile>();\n public readonly zOnRemove = output<ZGalleryFile>();\n public readonly zOnSelect = output<ZGalleryFile>();\n\n protected readonly isLoading = signal(true);\n protected readonly formattedSize = computed(() => formatFileSize(this.file().size));\n protected readonly category = computed(() => getFileCategory(this.file()));\n protected readonly isImage = computed(() => this.category() === 'image');\n\n protected readonly categoryStyle = computed<ZFileCategoryStyle & { icon: ZIcon }>(() => {\n const style = FILE_CATEGORY_STYLES[this.category()];\n return {\n ...style,\n icon: style.icon as ZIcon,\n };\n });\n\n protected readonly canPreview = computed(() => isPreviewable(this.file()));\n\n protected onImageLoad(): void {\n this.isLoading.set(false);\n }\n\n protected onImageError(): void {\n this.isLoading.set(false);\n }\n\n protected onDownload(event: Event): void {\n event.stopPropagation();\n this.zOnDownload.emit(this.file());\n }\n\n protected onPreviewClick(event: Event): void {\n event.stopPropagation();\n this.zOnPreview.emit(this.file());\n }\n\n protected onPreview(): void {\n if (this.canPreview()) {\n this.zOnPreview.emit(this.file());\n }\n }\n\n protected onItemClick(): void {\n if (this.zSelectable()) {\n this.zOnSelect.emit(this.file());\n return;\n }\n\n this.onPreview();\n }\n\n protected onRemove(event: Event): void {\n event.stopPropagation();\n this.zOnRemove.emit(this.file());\n }\n\n protected onSelectClick(event: Event): void {\n event.stopPropagation();\n this.zOnSelect.emit(this.file());\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { ZIconComponent, type ZIcon } from '@shival99/z-ui/components/z-icon';\nimport { ZSkeletonComponent } from '@shival99/z-ui/components/z-skeleton';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZSafeResourceUrlPipe } from '@shival99/z-ui/pipes';\nimport type { ZGalleryFile } from './z-gallery.types';\nimport { formatFileSize, getFileCategory, isImage, isPreviewable } from './z-gallery.utils';\n\n@Component({\n selector: 'z-gallery-preview',\n imports: [\n ZButtonComponent,\n ZIconComponent,\n ZSkeletonComponent,\n ZTooltipDirective,\n ZSafeResourceUrlPipe,\n TranslatePipe,\n ],\n standalone: true,\n template: `\n <div\n class=\"animate-in fade-in fixed inset-0 z-50 flex items-center justify-center bg-black/80 backdrop-blur-sm duration-200\"\n (click)=\"onBackdropClick($event)\"\n >\n <button\n z-button\n zType=\"ghost\"\n zShape=\"circle\"\n class=\"absolute top-4 right-4 z-10 text-white hover:bg-white/20\"\n (click)=\"close()\"\n >\n <i z-icon zType=\"lucideX\" zSize=\"24\"></i>\n </button>\n\n @if (hasPrev()) {\n <button\n z-button\n zType=\"ghost\"\n zShape=\"circle\"\n class=\"absolute left-4 z-10 text-white hover:bg-white/20\"\n (click)=\"navigate(-1)\"\n >\n <i z-icon zType=\"lucideChevronLeft\" zSize=\"32\"></i>\n </button>\n }\n\n @if (hasNext()) {\n <button\n z-button\n zType=\"ghost\"\n zShape=\"circle\"\n class=\"absolute right-4 z-10 text-white hover:bg-white/20\"\n (click)=\"navigate(1)\"\n >\n <i z-icon zType=\"lucideChevronRight\" zSize=\"32\"></i>\n </button>\n }\n\n <div class=\"flex h-full w-full flex-col items-center\" (click)=\"$event.stopPropagation()\">\n <div\n class=\"dark:!border-border absolute top-4 left-1/2 z-10 flex -translate-x-1/2 items-center gap-2 rounded-[6px] border !border-transparent bg-black/60 px-4 py-2 text-sm text-white backdrop-blur-sm dark:border\"\n >\n <div>\n <span class=\"max-w-[200px] truncate font-medium\">{{ file().name }}</span>\n <span class=\"text-white/70\">{{ formattedSize() }}</span>\n </div>\n\n @if (files().length > 1) {\n <span class=\"text-white/70\">{{ currentIndex() + 1 }} / {{ files().length }}</span>\n }\n\n <div class=\"ml-1 flex items-center gap-0.5\">\n @if (isImageFile()) {\n <button\n z-button\n zType=\"ghost\"\n zSize=\"xs\"\n zShape=\"circle\"\n class=\"text-white hover:bg-white/20\"\n z-tooltip\n [zContent]=\"'i18n_z_ui_gallery_rotate_left' | translate\"\n (click)=\"rotateLeft()\"\n >\n <i z-icon zType=\"lucideUndo\" zSize=\"14\"></i>\n </button>\n <button\n z-button\n zType=\"ghost\"\n zSize=\"xs\"\n zShape=\"circle\"\n class=\"text-white hover:bg-white/20\"\n z-tooltip\n [zContent]=\"'i18n_z_ui_gallery_rotate_right' | translate\"\n (click)=\"rotateRight()\"\n >\n <i z-icon zType=\"lucideRedo\" zSize=\"14\"></i>\n </button>\n }\n\n <button\n z-button\n zType=\"ghost\"\n zSize=\"xs\"\n zShape=\"circle\"\n class=\"text-white hover:bg-white/20\"\n z-tooltip\n [zContent]=\"'i18n_z_ui_gallery_download' | translate\"\n (click)=\"download()\"\n >\n <i z-icon zType=\"lucideDownload\" zSize=\"14\"></i>\n </button>\n\n @if (zShowRemove()) {\n <button\n z-button\n zType=\"ghost\"\n zSize=\"xs\"\n zShape=\"circle\"\n class=\"text-white hover:bg-white/20\"\n z-tooltip\n [zContent]=\"'i18n_z_ui_gallery_delete' | translate\"\n (click)=\"remove()\"\n >\n <i z-icon zType=\"lucideTrash2\" zSize=\"14\"></i>\n </button>\n }\n </div>\n </div>\n\n <div class=\"relative flex flex-1 items-center justify-center pt-16\">\n @if (isImageFile()) {\n <div class=\"relative flex h-[60vh] w-[70vw] items-center justify-center\">\n @if (isLoading()) {\n <z-skeleton class=\"absolute inset-0 rounded-lg\" />\n }\n <img\n [src]=\"file().url || file().thumbnailUrl\"\n [alt]=\"file().name\"\n class=\"max-h-full max-w-full rounded-lg object-contain shadow-2xl transition-opacity duration-300\"\n [class.opacity-0]=\"isLoading()\"\n [class.opacity-100]=\"!isLoading()\"\n [class.cursor-zoom-in]=\"!zoomed()\"\n [class.cursor-zoom-out]=\"zoomed()\"\n [style.transform]=\"imageTransform()\"\n (load)=\"onImageLoad()\"\n (error)=\"onMediaError()\"\n (click)=\"toggleZoom()\"\n />\n </div>\n } @else if (isPdf()) {\n <div class=\"relative h-[75vh] w-[85vw]\">\n @if (isLoading()) {\n <z-skeleton class=\"absolute inset-0 rounded-lg\" />\n }\n <iframe\n [src]=\"file().url | zSafeResourceUrl\"\n class=\"absolute inset-0 size-full rounded-lg bg-white shadow-2xl transition-opacity duration-300\"\n [class.opacity-0]=\"isLoading()\"\n [class.opacity-100]=\"!isLoading()\"\n frameborder=\"0\"\n (load)=\"onPdfLoad()\"\n ></iframe>\n </div>\n } @else if (isVideo()) {\n <div class=\"relative flex h-[60vh] w-[70vw] items-center justify-center\">\n @if (isLoading()) {\n <z-skeleton class=\"absolute inset-0 rounded-lg\" />\n }\n <video\n [src]=\"file().url\"\n controls\n autoplay\n class=\"max-h-full max-w-full rounded-lg shadow-2xl transition-opacity duration-300\"\n [class.opacity-0]=\"isLoading()\"\n [class.opacity-100]=\"!isLoading()\"\n (loadeddata)=\"onVideoLoad()\"\n (error)=\"onMediaError()\"\n >\n Your browser does not support the video tag.\n </video>\n </div>\n } @else {\n <div class=\"bg-card flex flex-col items-center justify-center rounded-lg p-12 shadow-2xl\">\n <div class=\"bg-muted mb-4 flex size-24 items-center justify-center rounded-xl\">\n <i z-icon [zType]=\"fileIcon()\" zSize=\"40\" class=\"text-muted-foreground\"></i>\n </div>\n <span class=\"text-foreground mb-2 text-lg font-medium\">{{ file().name }}</span>\n <span class=\"text-muted-foreground mb-4 text-sm\">{{ formattedSize() }}</span>\n <span class=\"text-muted-foreground rounded-md bg-amber-100 px-3 py-1.5 text-xs dark:bg-amber-900/30\">\n <i\n z-icon\n zType=\"lucideInfo\"\n zSize=\"14\"\n class=\"mr-1 inline-block align-middle text-amber-600 dark:text-amber-400\"\n ></i>\n <span class=\"align-middle text-amber-700 dark:text-amber-300\">\n {{ 'i18n_z_ui_gallery_preview_not_supported' | translate }}\n </span>\n </span>\n </div>\n }\n </div>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'z-gallery-preview',\n '(document:keydown)': 'onKeyDown($event)',\n },\n})\nexport class ZGalleryPreviewComponent {\n public readonly file = input.required<ZGalleryFile>();\n public readonly files = input<ZGalleryFile[]>([]);\n public readonly zShowRemove = input(false);\n\n public readonly zOnClose = output<void>();\n public readonly zOnDownload = output<ZGalleryFile>();\n public readonly zOnNavigate = output<ZGalleryFile>();\n public readonly zOnRemove = output<ZGalleryFile>();\n\n protected readonly zoomed = signal(false);\n protected readonly isLoading = signal(true);\n protected readonly rotation = signal(0);\n\n private readonly _mediaLoaded = signal(false);\n private _loadingStartTime = 0;\n private readonly _minLoadingTime = 300;\n\n constructor() {\n effect(() => {\n const currentFile = this.file();\n if (currentFile) {\n this.isLoading.set(true);\n this._mediaLoaded.set(false);\n this._loadingStartTime = Date.now();\n this.zoomed.set(false);\n this.rotation.set(0);\n }\n });\n }\n\n private _completeLoading(): void {\n const elapsed = Date.now() - this._loadingStartTime;\n const remaining = this._minLoadingTime - elapsed;\n\n if (remaining > 0) {\n setTimeout(() => this.isLoading.set(false), remaining);\n return;\n }\n\n this.isLoading.set(false);\n }\n\n protected readonly currentIndex = computed(() => {\n const allFiles = this.files();\n const current = this.file();\n return allFiles.findIndex(f => f.id === current.id);\n });\n\n protected readonly hasPrev = computed(() => this.currentIndex() > 0);\n protected readonly hasNext = computed(() => this.currentIndex() < this.files().length - 1);\n\n protected readonly isImageFile = computed(() => isImage(this.file()));\n protected readonly isPdf = computed(() => getFileCategory(this.file()) === 'pdf');\n protected readonly isVideo = computed(() => getFileCategory(this.file()) === 'video');\n protected readonly canPreview = computed(() => isPreviewable(this.file()));\n\n protected readonly formattedSize = computed(() => formatFileSize(this.file().size));\n\n protected readonly imageTransform = computed(() => {\n const rot = this.rotation();\n const zoom = this.zoomed() ? 'scale(1.5)' : 'scale(1)';\n return `rotate(${rot}deg) ${zoom}`;\n });\n\n protected readonly fileIcon = computed<ZIcon>(() => {\n const category = getFileCategory(this.file());\n const iconMap: Record<string, ZIcon> = {\n pdf: 'lucideFileText',\n word: 'lucideFileText',\n excel: 'lucideFileSpreadsheet',\n video: 'lucideVideo',\n audio: 'lucideMusic',\n archive: 'lucideFileArchive',\n code: 'lucideCode',\n text: 'lucideFileText',\n unknown: 'lucideFile',\n };\n return iconMap[category] || 'lucideFile';\n });\n\n protected onKeyDown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Escape':\n this.close();\n break;\n case 'ArrowLeft':\n if (this.hasPrev()) {\n this.navigate(-1);\n }\n break;\n case 'ArrowRight':\n if (this.hasNext()) {\n this.navigate(1);\n }\n break;\n case 'r':\n case 'R':\n if (this.isImageFile()) {\n this.rotateRight();\n }\n break;\n }\n }\n\n protected close(): void {\n this.zOnClose.emit();\n }\n\n protected navigate(direction: -1 | 1): void {\n const allFiles = this.files();\n const newIndex = this.currentIndex() + direction;\n if (newIndex >= 0 && newIndex < allFiles.length) {\n this.zoomed.set(false);\n this.rotation.set(0);\n this.isLoading.set(true);\n this._mediaLoaded.set(false);\n this._loadingStartTime = Date.now();\n this.zOnNavigate.emit(allFiles[newIndex]);\n }\n }\n\n protected toggleZoom(): void {\n if (this.isImageFile()) {\n this.zoomed.update(z => !z);\n }\n }\n\n protected rotateLeft(): void {\n this.rotation.update(r => (r - 90 + 360) % 360);\n }\n\n protected rotateRight(): void {\n this.rotation.update(r => (r + 90) % 360);\n }\n\n protected onImageLoad(): void {\n this._completeLoading();\n }\n\n protected onVideoLoad(): void {\n this._completeLoading();\n }\n\n protected onPdfLoad(): void {\n this._completeLoading();\n }\n\n protected onMediaError(): void {\n this._completeLoading();\n }\n\n protected download(): void {\n this.zOnDownload.emit(this.file());\n }\n\n protected remove(): void {\n this.zOnRemove.emit(this.file());\n }\n\n protected onBackdropClick(event: Event): void {\n if ((event.target as HTMLElement).classList.contains('fixed')) {\n this.close();\n }\n }\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const zGalleryVariants = cva('z-gallery', {\n variants: {\n zSize: {\n sm: 'z-gallery--sm',\n default: 'z-gallery--default',\n lg: 'z-gallery--lg',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n});\n\nexport type ZGalleryVariants = VariantProps<typeof zGalleryVariants>;\n\n// Grid item variants\nexport const zGalleryItemVariants = cva(\n 'group relative overflow-hidden rounded-lg border border-border bg-card transition-all duration-200 cursor-pointer',\n {\n variants: {\n zMode: {\n grid: 'flex flex-col hover:scale-[1.02] hover:shadow-md hover:border-primary/50',\n list: 'flex flex-row items-center gap-3 p-3 hover:bg-accent hover:border-primary/50',\n },\n zSize: {\n sm: '',\n default: '',\n lg: '',\n },\n },\n compoundVariants: [\n // Grid sizes\n { zMode: 'grid', zSize: 'sm', class: '' },\n { zMode: 'grid', zSize: 'default', class: '' },\n { zMode: 'grid', zSize: 'lg', class: '' },\n // List sizes\n { zMode: 'list', zSize: 'sm', class: 'p-2' },\n { zMode: 'list', zSize: 'default', class: 'p-3' },\n { zMode: 'list', zSize: 'lg', class: 'p-4' },\n ],\n defaultVariants: {\n zMode: 'grid',\n zSize: 'default',\n },\n }\n);\n\nexport type ZGalleryItemVariants = VariantProps<typeof zGalleryItemVariants>;\n\n// File icon badge variants\nexport const zGalleryFileIconVariants = cva(\n 'flex items-center justify-center rounded-md font-bold uppercase select-none',\n {\n variants: {\n zSize: {\n sm: 'w-full h-16 text-xs',\n default: 'w-full h-24 text-sm',\n lg: 'w-full h-32 text-base',\n },\n zMode: {\n grid: '',\n list: '',\n },\n },\n compoundVariants: [\n { zMode: 'list', zSize: 'sm', class: 'size-8 text-[10px]' },\n { zMode: 'list', zSize: 'default', class: 'size-10 text-xs' },\n { zMode: 'list', zSize: 'lg', class: 'size-12 text-sm' },\n ],\n defaultVariants: {\n zSize: 'default',\n zMode: 'grid',\n },\n }\n);\n\nexport type ZGalleryFileIconVariants = VariantProps<typeof zGalleryFileIconVariants>;\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { ZButtonGroupComponent, ZButtonGroupItemDirective } from '@shival99/z-ui/components/z-button-group';\nimport { ZCheckboxComponent } from '@shival99/z-ui/components/z-checkbox';\nimport { ZEmptyComponent } from '@shival99/z-ui/components/z-empty';\nimport { ZIconComponent, type ZIcon } from '@shival99/z-ui/components/z-icon';\nimport { ZInputComponent } from '@shival99/z-ui/components/z-input';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { ZGalleryItemComponent } from './z-gallery-item.component';\nimport { ZGalleryPreviewComponent } from './z-gallery-preview.component';\nimport type {\n ZGalleryActionEvent,\n ZGalleryControl,\n ZGalleryFile,\n ZGalleryMode,\n ZGallerySelectionChange,\n ZGallerySize,\n ZGalleryToggleSize,\n} from './z-gallery.types';\nimport { zGalleryVariants } from './z-gallery.variants';\n\n@Component({\n selector: 'z-gallery',\n imports: [\n FormsModule,\n TranslatePipe,\n ZGalleryItemComponent,\n ZGalleryPreviewComponent,\n ZButtonGroupComponent,\n ZButtonGroupItemDirective,\n ZButtonComponent,\n ZCheckboxComponent,\n ZIconComponent,\n ZEmptyComponent,\n ZInputComponent,\n ],\n standalone: true,\n template: `\n <div [class]=\"containerClasses()\">\n @if (showHeader()) {\n <div class=\"mb-4 flex flex-wrap items-center justify-between gap-3\">\n <div class=\"flex items-center gap-3\">\n @if (zTitle()) {\n <h3 class=\"text-sm font-medium\">{{ zTitle() }}</h3>\n }\n\n @if (zShowSearch()) {\n <z-input\n zSearch\n [zSize]=\"searchInputSize()\"\n [zPlaceholder]=\"zSearchPlaceholder() || ('i18n_z_ui_gallery_search_placeholder' | translate)\"\n [ngModel]=\"searchQuery()\"\n (ngModelChange)=\"onSearchChange($event)\"\n class=\"w-64\"\n />\n }\n </div>\n\n @if (zShowModeToggle() && zFiles().length > 0) {\n <z-button-group [(zActive)]=\"modeIndex\">\n <button z-button zType=\"outline\" [zSize]=\"zToggleSize()\" z-button-group-item>\n <i z-icon zType=\"lucideLayoutGrid\" [zSize]=\"toggleIconSize()\"></i>\n </button>\n <button z-button zType=\"outline\" [zSize]=\"zToggleSize()\" z-button-group-item>\n <i z-icon zType=\"lucideList\" [zSize]=\"toggleIconSize()\"></i>\n </button>\n </z-button-group>\n }\n </div>\n }\n\n @if (zSelectable() && filteredFiles().length > 0) {\n <div\n class=\"bg-muted/30 shadow-card dark:!border-border mb-4 flex h-11 items-center justify-between gap-3 rounded-[6px] border border-transparent px-3\"\n >\n <div class=\"flex items-center gap-3\">\n <z-checkbox\n [zChecked]=\"isAllSelected()\"\n [zIndeterminate]=\"isIndeterminate()\"\n (zChange)=\"toggleSelectAll()\"\n zSize=\"sm\"\n />\n <span class=\"text-muted-foreground text-sm\">\n @if (selectedCount() > 0) {\n {{ selectedCount() }} {{ 'i18n_z_ui_gallery_selected' | translate }}\n } @else {\n {{ 'i18n_z_ui_gallery_select_all' | translate }}\n }\n </span>\n </div>\n\n @if (selectedCount() > 0) {\n <div class=\"flex items-center gap-1\">\n @if (zShowDownload()) {\n <button\n z-button\n zType=\"ghost\"\n zSize=\"xs\"\n (click)=\"onBulkDownload()\"\n class=\"text-muted-foreground hover:text-foreground\"\n >\n <i z-icon zType=\"lucideDownload\" zSize=\"14\"></i>\n <span class=\"ml-1\">{{ 'i18n_z_ui_gallery_download' | translate }}</span>\n </button>\n }\n @if (zShowRemove()) {\n <button\n z-button\n zType=\"ghost\"\n zSize=\"xs\"\n (click)=\"onBulkDelete()\"\n class=\"text-destructive hover:text-destructive\"\n >\n <i z-icon zType=\"lucideTrash2\" zSize=\"14\"></i>\n <span class=\"ml-1\">{{ 'i18n_z_ui_gallery_delete' | translate }}</span>\n </button>\n }\n <button z-button zType=\"ghost\" zSize=\"xs\" (click)=\"deselectAll()\">\n <i z-icon zType=\"lucideX\" zSize=\"14\"></i>\n </button>\n </div>\n }\n </div>\n }\n\n @if (filteredFiles().length > 0) {\n @if (currentMode() === 'grid') {\n <div class=\"grid gap-4\" [style.grid-template-columns]=\"gridColumns()\">\n @for (file of filteredFiles(); track file.id) {\n <z-gallery-item\n [file]=\"file\"\n zMode=\"grid\"\n [zSize]=\"zSize()\"\n [zShowDownload]=\"zShowDownload()\"\n [zShowPreview]=\"zShowPreview()\"\n [zShowRemove]=\"zShowRemove()\"\n [zSelectable]=\"zSelectable()\"\n [zSelected]=\"isFileSelected(file)\"\n (zOnDownload)=\"onDownload($event)\"\n (zOnPreview)=\"onPreview($event)\"\n (zOnRemove)=\"onRemove($event)\"\n (zOnSelect)=\"toggleSelection($event)\"\n />\n }\n </div>\n } @else {\n <div class=\"flex flex-col gap-2\">\n @for (file of filteredFiles(); track file.id) {\n <z-gallery-item\n [file]=\"file\"\n zMode=\"list\"\n [zSize]=\"zSize()\"\n [zShowDownload]=\"zShowDownload()\"\n [zShowPreview]=\"zShowPreview()\"\n [zShowRemove]=\"zShowRemove()\"\n [zSelectable]=\"zSelectable()\"\n [zSelected]=\"isFileSelected(file)\"\n (zOnDownload)=\"onDownload($event)\"\n (zOnPreview)=\"onPreview($event)\"\n (zOnRemove)=\"onRemove($event)\"\n (zOnSelect)=\"toggleSelection($event)\"\n />\n }\n </div>\n }\n } @else if (zFiles().length > 0 && searchQuery()) {\n <z-empty zIcon=\"lucideSearchX\" [zMessage]=\"'i18n_z_ui_gallery_no_search_results' | translate\" zSize=\"sm\" />\n } @else {\n <z-empty\n [zIcon]=\"zEmptyIcon()\"\n [zMessage]=\"zEmptyText() || ('i18n_z_ui_gallery_no_files' | translate)\"\n zSize=\"sm\"\n />\n }\n\n @if (previewFile()) {\n <z-gallery-preview\n [file]=\"previewFile()!\"\n [files]=\"filteredFiles()\"\n [zShowRemove]=\"zShowRemove()\"\n (zOnClose)=\"closePreview()\"\n (zOnDownload)=\"onDownload($event)\"\n (zOnNavigate)=\"onNavigatePreview($event)\"\n (zOnRemove)=\"onRemoveFromPreview($event)\"\n />\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'z-gallery block',\n },\n exportAs: 'zGallery',\n})\nexport class ZGalleryComponent implements AfterViewInit {\n public readonly zFiles = input<ZGalleryFile[]>([]);\n public readonly zMode = model<ZGalleryMode>('grid');\n public readonly zSize = input<ZGallerySize>('default');\n public readonly zColumns = input<number>(4);\n public readonly zShowDownload = input(true);\n public readonly zShowPreview = input(true);\n public readonly zShowRemove = input(false);\n public readonly zShowModeToggle = input(true);\n public readonly zShowSearch = input(false);\n public readonly zServerSearch = input(false);\n public readonly zSearchPlaceholder = input<string>('Search files...');\n public readonly zToggleSize = input<ZGalleryToggleSize>('xs');\n public readonly zTitle = input<string>('');\n public readonly zEmptyText = input<string>('No files');\n public readonly zEmptyIcon = input<ZIcon>('lucideImage');\n public readonly zClass = input<ClassValue>('');\n public readonly zSelectable = input(false);\n public readonly zSelectedFiles = model<ZGalleryFile[]>([]);\n\n public readonly zOnDownload = output<ZGalleryFile>();\n public readonly zOnPreview = output<ZGalleryFile>();\n public readonly zOnRemove = output<ZGalleryFile>();\n public readonly zModeChange = output<ZGalleryMode>();\n public readonly zSearchChange = output<string>();\n public readonly zControl = output<ZGalleryControl>();\n public readonly zSelectionChange = output<ZGallerySelectionChange>();\n public readonly zOnAction = output<ZGalleryActionEvent>();\n\n protected readonly modeIndex = signal<number | null>(0);\n protected readonly previewFile = signal<ZGalleryFile | null>(null);\n protected readonly searchQuery = signal<string>('');\n\n protected readonly currentMode = computed<ZGalleryMode>(() => {\n const index = this.modeIndex();\n return index === 1 ? 'list' : 'grid';\n });\n\n protected readonly gridColumns = computed(() => {\n const cols = this.zColumns();\n return `repeat(${cols}, minmax(0, 1fr))`;\n });\n\n protected readonly containerClasses = computed(() =>\n zMergeClasses(zGalleryVariants({ zSize: this.zSize() }), this.zClass())\n );\n\n protected readonly showHeader = computed(\n () => this.zTitle() || this.zShowSearch() || (this.zShowModeToggle() && this.zFiles().length > 0)\n );\n\n protected readonly toggleIconSize = computed(() => {\n const size = this.zToggleSize();\n switch (size) {\n case 'xs':\n return '14';\n case 'sm':\n return '16';\n case 'lg':\n return '20';\n default:\n return '18';\n }\n });\n\n protected readonly searchInputSize = computed<'sm' | 'default' | 'lg'>(() => {\n const size = this.zToggleSize();\n if (size === 'xs') {\n return 'sm';\n }\n return size;\n });\n\n protected readonly filteredFiles = computed(() => {\n const files = this.zFiles();\n const query = this.searchQuery().toLowerCase().trim();\n\n if (!query || this.zServerSearch()) {\n return files;\n }\n\n return files.filter(file => file.name.toLowerCase().includes(query));\n });\n\n protected readonly selectedIds = computed(() => new Set(this.zSelectedFiles().map(f => f.id)));\n protected readonly isAllSelected = computed(() => {\n const files = this.filteredFiles();\n const selectedIds = this.selectedIds();\n return files.length > 0 && files.every(f => selectedIds.has(f.id));\n });\n\n protected readonly isIndeterminate = computed(() => {\n const files = this.filteredFiles();\n const selectedIds = this.selectedIds();\n const selectedCount = files.filter(f => selectedIds.has(f.id)).length;\n return selectedCount > 0 && selectedCount < files.length;\n });\n\n protected readonly selectedCount = computed(() => this.zSelectedFiles().length);\n\n ngAfterViewInit(): void {\n this.zControl.emit({\n setMode: mode => {\n this.modeIndex.set(mode === 'list' ? 1 : 0);\n this.zMode.set(mode);\n this.zModeChange.emit(mode);\n },\n getMode: () => this.currentMode(),\n getFiles: () => this.zFiles(),\n openPreview: file => this.previewFile.set(file),\n closePreview: () => this.previewFile.set(null),\n selectAll: () => this.selectAll(),\n deselectAll: () => this.deselectAll(),\n toggleSelection: file => this.toggleSelection(file),\n getSelectedFiles: () => this.zSelectedFiles(),\n isSelected: file => this.isFileSelected(file),\n });\n }\n\n protected onSearchChange(query: string): void {\n this.searchQuery.set(query);\n this.zSearchChange.emit(query);\n }\n\n protected onDownload(file: ZGalleryFile): void {\n this.zOnDownload.emit(file);\n const downloadLink = file.downloadUrl || file.url;\n if (downloadLink) {\n const link = document.createElement('a');\n link.href = downloadLink;\n link.download = file.name;\n link.target = '_blank';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n }\n\n protected onPreview(file: ZGalleryFile): void {\n this.previewFile.set(file);\n this.zOnPreview.emit(file);\n }\n\n protected onRemove(file: ZGalleryFile): void {\n this.zOnRemove.emit(file);\n }\n\n protected closePreview(): void {\n this.previewFile.set(null);\n }\n\n protected onNavigatePreview(file: ZGalleryFile): void {\n this.previewFile.set(file);\n }\n\n protected onRemoveFromPreview(file: ZGalleryFile): void {\n this.zOnRemove.emit(file);\n const allFiles = this.filteredFiles();\n const currentIndex = allFiles.findIndex(f => f.id === file.id);\n\n if (allFiles.length <= 1) {\n this.closePreview();\n }\n\n if (currentIndex < allFiles.length - 1) {\n this.previewFile.set(allFiles[currentIndex + 1]);\n return;\n }\n\n this.previewFile.set(allFiles[currentIndex - 1]);\n }\n\n protected isFileSelected(file: ZGalleryFile): boolean {\n return this.selectedIds().has(file.id);\n }\n\n protected toggleSelection(file: ZGalleryFile): void {\n const currentSelected = this.zSelectedFiles();\n const isSelected = this.isFileSelected(file);\n\n const newSelected = isSelected ? currentSelected.filter(f => f.id !== file.id) : [...currentSelected, file];\n\n this.zOnAction.emit({ type: isSelected ? 'deselect' : 'select', file });\n\n this.zSelectedFiles.set(newSelected);\n this.zSelectionChange.emit({\n selectedFiles: newSelected,\n addedFiles: isSelected ? undefined : [file],\n removedFiles: isSelected ? [file] : undefined,\n });\n }\n\n protected selectAll(): void {\n const files = this.filteredFiles();\n this.zSelectedFiles.set([...files]);\n this.zOnAction.emit({ type: 'select-all', files });\n this.zSelectionChange.emit({\n selectedFiles: files,\n addedFiles: files,\n });\n }\n\n protected deselectAll(): void {\n const previousSelected = this.zSelectedFiles();\n this.zSelectedFiles.set([]);\n this.zOnAction.emit({ type: 'deselect-all', files: previousSelected });\n this.zSelectionChange.emit({\n selectedFiles: [],\n removedFiles: previousSelected,\n });\n }\n\n protected toggleSelectAll(): void {\n if (this.isAllSelected()) {\n this.deselectAll();\n return;\n }\n\n this.selectAll();\n }\n\n protected onBulkDelete(): void {\n const selectedFiles = this.zSelectedFiles();\n this.zOnAction.emit({ type: 'delete', files: selectedFiles });\n }\n\n protected onBulkDownload(): void {\n const selectedFiles = this.zSelectedFiles();\n this.zOnAction.emit({ type: 'download', files: selectedFiles });\n selectedFiles.forEach(file => this.onDownload(file));\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, signal, ViewEncapsulation } from '@angular/core';\nimport { ZSkeletonComponent } from '@shival99/z-ui/components/z-skeleton';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport {\n FILE_CATEGORY_STYLES,\n type ZFileCategory,\n type ZGalleryFile,\n type ZGalleryMode,\n type ZGallerySize,\n} from './z-gallery.types';\nimport { getFileCategory } from './z-gallery.utils';\nimport { zGalleryFileIconVariants } from './z-gallery.variants';\n\n@Component({\n selector: 'z-gallery-file-icon',\n imports: [ZSkeletonComponent],\n standalone: true,\n template: `\n <div [class]=\"containerClasses()\" class=\"group/icon overflow-hidden\">\n @if (showThumbnail()) {\n @if (isLoading()) {\n <z-skeleton class=\"absolute inset-0 size-full\" />\n }\n <img\n [src]=\"file().thumbnailUrl || file().url\"\n [alt]=\"file().name\"\n class=\"size-full object-cover transition-transform duration-300 group-hover/icon:scale-105\"\n loading=\"lazy\"\n [class.opacity-0]=\"isLoading()\"\n [class.opacity-100]=\"!isLoading()\"\n (load)=\"onImageLoad()\"\n (error)=\"onImageError($event)\"\n />\n } @else {\n <div class=\"flex flex-col items-center justify-center gap-1\">\n <span class=\"font-bold tracking-wide\">{{ style().label }}</span>\n </div>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'z-gallery-file-icon block',\n },\n})\nexport class ZGalleryFileIconComponent {\n public readonly file = input.required<ZGalleryFile>();\n public readonly zSize = input<ZGallerySize>('default');\n public readonly zMode = input<ZGalleryMode>('grid');\n\n protected readonly imageError = signal(false);\n protected readonly isLoading = signal(true);\n protected readonly category = computed<ZFileCategory>(() => getFileCategory(this.file()));\n protected readonly style = computed(() => FILE_CATEGORY_STYLES[this.category()]);\n\n protected readonly showThumbnail = computed(() => {\n const file = this.file();\n const cat = this.category();\n return cat === 'image' && (file.thumbnailUrl || file.url) && !this.imageError();\n });\n\n protected readonly containerClasses = computed(() => {\n const style = this.style();\n const showThumb = this.showThumbnail();\n\n return zMergeClasses(\n zGalleryFileIconVariants({\n zSize: this.zSize(),\n zMode: this.zMode(),\n }),\n showThumb ? 'bg-muted relative' : [style.bg, style.text]\n );\n });\n\n protected onImageLoad(): void {\n this.isLoading.set(false);\n }\n\n protected onImageError(event: Event): void {\n this.imageError.set(true);\n this.isLoading.set(false);\n const img = event.target as HTMLImageElement;\n img.style.display = 'none';\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { zMergeClasses } from '@shival99/z-ui/utils';
|
|
|
5
5
|
import { cva } from 'class-variance-authority';
|
|
6
6
|
import { saxRefreshBold, saxCloudChangeBold, saxPauseBold } from '@ng-icons/iconsax/bold';
|
|
7
7
|
import { saxEditOutline } from '@ng-icons/iconsax/outline';
|
|
8
|
-
import { lucideBanknote, lucideRotateCcw, lucideRefreshCw, lucideHistory, lucideMessageSquare, lucideCalendarDays, lucideHelpCircle, lucideFolder, lucideCircle, lucideUserSquare, lucideEllipsisVertical, lucideSquarePlay, lucidePlay, lucideAudioLines, lucideMic, lucideMessageSquareText, lucideWandSparkles, lucideSparkle, lucideDumbbell, lucideCpu, lucideBrainCog, lucideBrainCircuit, lucideBrain, lucideBotOff, lucideBotMessageSquare, lucidePlug2, lucidePlug, lucideRecycle, lucideIdCard, lucideContact, lucideClipboardCopy, lucideBadge, lucideZoomOut, lucideZoomIn, lucideWand2, lucideTicket, lucideTags, lucideTag, lucideShoppingBag, lucidePackageCheck, lucideClipboardPen, lucideReceipt, lucidePercent, lucideType, lucideBuilding, lucideBan, lucideFunnelX, lucideFilter, lucideAlertTriangle, lucideGitBranch, lucideMoreVertical, lucideSearchX, lucidePin, lucideGripVertical, lucideTable2, lucideFileArchive, lucideFileJson, lucideFileCode, lucideMusic, lucideFile, lucideDownload, lucideUploadCloud, lucideUpload, lucideToggleLeft, lucideCircleDot, lucideSquareCheck, lucideSparkles, lucideFolders, lucideUserSearch, lucidePieChart, lucideTextCursor, lucideListFilter, lucideNavigation, lucideFileEdit, lucideSliders, lucideCheckCircle, lucideFolderTree, lucideGrid3x3, lucideUsers2, lucideBarChart3, lucideRocket, lucideSquare, lucidePenTool, lucideMegaphone, lucideHash, lucideList, lucideImage, lucideGripHorizontal, lucideCircleHelp, lucideFileOutput, lucideLayoutTemplate, lucideSquarePen, lucideFolderOpen, lucideHome, lucideBarChart, lucideCloud, lucideLifeBuoy, lucideGithub, lucideLoader2, lucidePanelRightOpen, lucideComponent, lucideMessageCircleQuestion, lucideCircleAlert, lucideMessageCircle, lucideAlertOctagon, lucideLoader, lucideMoon, lucideSun, lucideListChevronsUpDown, lucideListChevronsDownUp, lucideFileCheck, lucideDatabaseBackup, lucideLink, lucideXCircle, lucideAlertCircle, lucideCheckCircle2, lucideBell, lucideChartColumnIncreasing, lucideBrushCleaning, lucideFastForward, lucideListChecks, lucideRefreshCwOff, lucideFileClock, lucideBookUp2, lucideFilePlus2, lucideFilePlus, lucideListPlus, lucideScanLine, lucideQrCode, lucideScanQrCode, lucideCode, lucideBarcode, lucideHardDriveDownload, lucideMailPlus, lucideCloudCheck, lucideWifiZero, lucideFileSymlink, lucideLockKeyholeOpen, lucideBadgeX, lucideCircleCheckBig, lucideShieldCheck, lucideBadgeCheck, lucideCheckLine, lucideCircleX, lucideArrowDownUp, lucideFilePenLine, lucideUserRoundPen, lucideCopy, lucidePaperclip, lucidePause, lucideSend, lucideBot, lucideTableOfContents, lucideFileUp, lucideNotepadText, lucideCalendarCheck, lucideCalendar1, lucideCalendarRange, lucideChartLine, lucideChartPie, lucideChartBar, lucideHouse, lucideCircleCheck, lucideUserLock, lucideArrowUp, lucideArrowDown, lucideLockKeyhole, lucideRefreshCcw, lucideWifi, lucideTruck, lucideTerminal, lucideTablet, lucideSmartphone, lucideServerCrash, lucideServer, lucideRadio, lucidePrinter, lucidePhoneCall, lucidePalette, lucideNetwork, lucideMailCheck, lucideLightbulb, lucideKey, lucideHeadphones, lucideLanguages, lucideGlobe, lucideFileSpreadsheet, lucideCreditCard, lucideCar, lucideBuilding2, lucideWrench, lucideWallet, lucideVideo, lucideUserPlus, lucideTrendingDown, lucideTimer, lucideStethoscope, lucideStar, lucideShield, lucidePhone, lucideMonitor, lucideMapPin, lucideHospital, lucideHeart, lucideGraduationCap, lucideFileText, lucideDollarSign, lucideDatabase, lucideClipboardList, lucideCalculator, lucideCalendar, lucideBookOpen, lucideClock, lucideInbox, lucidePackageOpen, lucideBellMinus, lucideCog, lucideBox, lucideMinus, lucideBadgeInfo, lucideCrown, lucideFiles, lucideX, lucideAlignJustify, lucideFunnel, lucideFileDown, lucideTrash2, lucideSlidersHorizontal, lucideBellRing, lucideChevronsRight, lucideChevronsLeft, lucideLoaderCircle, lucideWarehouse, lucideWorkflow, lucideTarget, lucideBriefcase, lucideLayers, lucideInfo, lucideMousePointer, lucideZap, lucideActivity, lucideUserCheck, lucideShoppingCart, lucidePackage, lucideTrendingUp, lucideChevronUp, lucideLogs, lucideUsersRound, lucideChartColumn, lucideLayoutDashboard, lucidePanelLeftOpen, lucidePanelLeftClose, lucideEllipsis, lucideEyeOff, lucideEye, lucideUsers, lucideSearch, lucidePlus, lucideChevronDown, lucideChevronRight, lucideChevronLeft, lucideSettings2, lucideCalendarFold, lucidePill, lucideSettings, lucideUser, lucideLogOut, lucideLock, lucideMenu, lucideArrowRight, lucideArrowLeft, lucideLayoutGrid, lucideMail, lucidePencil, lucideCheck, lucideMessageSquareWarning, lucideTriangleAlert, lucideCheckCheck, lucideMessageSquareDot, lucideFlagTriangleRight, lucideFlag, lucideSaveAll, lucideSave, lucideClipboardPlus, lucideAlarmClock, lucideBookCheck, lucideChartBarStacked, lucideStore, lucideLayers2 } from '@ng-icons/lucide';
|
|
8
|
+
import { lucideUndo, lucideRedo, lucideBanknote, lucideRotateCcw, lucideRefreshCw, lucideHistory, lucideMessageSquare, lucideCalendarDays, lucideHelpCircle, lucideFolder, lucideCircle, lucideUserSquare, lucideEllipsisVertical, lucideSquarePlay, lucidePlay, lucideAudioLines, lucideMic, lucideMessageSquareText, lucideWandSparkles, lucideSparkle, lucideDumbbell, lucideCpu, lucideBrainCog, lucideBrainCircuit, lucideBrain, lucideBotOff, lucideBotMessageSquare, lucidePlug2, lucidePlug, lucideRecycle, lucideIdCard, lucideContact, lucideClipboardCopy, lucideBadge, lucideZoomOut, lucideZoomIn, lucideWand2, lucideTicket, lucideTags, lucideTag, lucideShoppingBag, lucidePackageCheck, lucideClipboardPen, lucideReceipt, lucidePercent, lucideType, lucideBuilding, lucideBan, lucideFunnelX, lucideFilter, lucideAlertTriangle, lucideGitBranch, lucideMoreVertical, lucideSearchX, lucidePin, lucideGripVertical, lucideTable2, lucideFileArchive, lucideFileJson, lucideFileCode, lucideMusic, lucideFile, lucideDownload, lucideUploadCloud, lucideUpload, lucideToggleLeft, lucideCircleDot, lucideSquareCheck, lucideSparkles, lucideFolders, lucideUserSearch, lucidePieChart, lucideTextCursor, lucideListFilter, lucideNavigation, lucideFileEdit, lucideSliders, lucideCheckCircle, lucideFolderTree, lucideGrid3x3, lucideUsers2, lucideBarChart3, lucideRocket, lucideSquare, lucidePenTool, lucideMegaphone, lucideHash, lucideList, lucideImage, lucideGripHorizontal, lucideCircleHelp, lucideFileOutput, lucideLayoutTemplate, lucideSquarePen, lucideFolderOpen, lucideHome, lucideBarChart, lucideCloud, lucideLifeBuoy, lucideGithub, lucideLoader2, lucidePanelRightOpen, lucideComponent, lucideMessageCircleQuestion, lucideCircleAlert, lucideMessageCircle, lucideAlertOctagon, lucideLoader, lucideMoon, lucideSun, lucideListChevronsUpDown, lucideListChevronsDownUp, lucideFileCheck, lucideDatabaseBackup, lucideLink, lucideXCircle, lucideAlertCircle, lucideCheckCircle2, lucideBell, lucideChartColumnIncreasing, lucideBrushCleaning, lucideFastForward, lucideListChecks, lucideRefreshCwOff, lucideFileClock, lucideBookUp2, lucideFilePlus2, lucideFilePlus, lucideListPlus, lucideScanLine, lucideQrCode, lucideScanQrCode, lucideCode, lucideBarcode, lucideHardDriveDownload, lucideMailPlus, lucideCloudCheck, lucideWifiZero, lucideFileSymlink, lucideLockKeyholeOpen, lucideBadgeX, lucideCircleCheckBig, lucideShieldCheck, lucideBadgeCheck, lucideCheckLine, lucideCircleX, lucideArrowDownUp, lucideFilePenLine, lucideUserRoundPen, lucideCopy, lucidePaperclip, lucidePause, lucideSend, lucideBot, lucideTableOfContents, lucideFileUp, lucideNotepadText, lucideCalendarCheck, lucideCalendar1, lucideCalendarRange, lucideChartLine, lucideChartPie, lucideChartBar, lucideHouse, lucideCircleCheck, lucideUserLock, lucideArrowUp, lucideArrowDown, lucideLockKeyhole, lucideRefreshCcw, lucideWifi, lucideTruck, lucideTerminal, lucideTablet, lucideSmartphone, lucideServerCrash, lucideServer, lucideRadio, lucidePrinter, lucidePhoneCall, lucidePalette, lucideNetwork, lucideMailCheck, lucideLightbulb, lucideKey, lucideHeadphones, lucideLanguages, lucideGlobe, lucideFileSpreadsheet, lucideCreditCard, lucideCar, lucideBuilding2, lucideWrench, lucideWallet, lucideVideo, lucideUserPlus, lucideTrendingDown, lucideTimer, lucideStethoscope, lucideStar, lucideShield, lucidePhone, lucideMonitor, lucideMapPin, lucideHospital, lucideHeart, lucideGraduationCap, lucideFileText, lucideDollarSign, lucideDatabase, lucideClipboardList, lucideCalculator, lucideCalendar, lucideBookOpen, lucideClock, lucideInbox, lucidePackageOpen, lucideBellMinus, lucideCog, lucideBox, lucideMinus, lucideBadgeInfo, lucideCrown, lucideFiles, lucideX, lucideAlignJustify, lucideFunnel, lucideFileDown, lucideTrash2, lucideSlidersHorizontal, lucideBellRing, lucideChevronsRight, lucideChevronsLeft, lucideLoaderCircle, lucideWarehouse, lucideWorkflow, lucideTarget, lucideBriefcase, lucideLayers, lucideInfo, lucideMousePointer, lucideZap, lucideActivity, lucideUserCheck, lucideShoppingCart, lucidePackage, lucideTrendingUp, lucideChevronUp, lucideLogs, lucideUsersRound, lucideChartColumn, lucideLayoutDashboard, lucidePanelLeftOpen, lucidePanelLeftClose, lucideEllipsis, lucideEyeOff, lucideEye, lucideUsers, lucideSearch, lucidePlus, lucideChevronDown, lucideChevronRight, lucideChevronLeft, lucideSettings2, lucideCalendarFold, lucidePill, lucideSettings, lucideUser, lucideLogOut, lucideLock, lucideMenu, lucideArrowRight, lucideArrowLeft, lucideLayoutGrid, lucideMail, lucidePencil, lucideCheck, lucideMessageSquareWarning, lucideTriangleAlert, lucideCheckCheck, lucideMessageSquareDot, lucideFlagTriangleRight, lucideFlag, lucideSaveAll, lucideSave, lucideClipboardPlus, lucideAlarmClock, lucideBookCheck, lucideChartBarStacked, lucideStore, lucideLayers2 } from '@ng-icons/lucide';
|
|
9
9
|
import { HttpClient } from '@angular/common/http';
|
|
10
10
|
import { ZIndexDbService } from '@shival99/z-ui/services';
|
|
11
11
|
import { from, switchMap, of, map, tap, catchError } from 'rxjs';
|
|
@@ -364,6 +364,8 @@ const Z_ICONS = {
|
|
|
364
364
|
lucideRefreshCw,
|
|
365
365
|
lucideRotateCcw,
|
|
366
366
|
lucideBanknote,
|
|
367
|
+
lucideRedo,
|
|
368
|
+
lucideUndo,
|
|
367
369
|
};
|
|
368
370
|
|
|
369
371
|
const iconCacheDb = new ZIndexDbService({
|