{"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-pdf-viewer.define.ts","../../../../libs/core-ui/components/z-gallery/z-gallery-preview.component.ts","../../../../libs/core-ui/components/z-gallery/z-gallery-preview.component.html","../../../../libs/core-ui/components/z-gallery/z-gallery-preview.ref.ts","../../../../libs/core-ui/components/z-gallery/z-gallery-preview.service.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/z-gallery-preview-item.directive.ts","../../../../libs/core-ui/components/z-gallery/shival99-z-ui-components-z-gallery.ts"],"sourcesContent":["import type {\n  AutoActionConfig,\n  ControlVisibilityConfig,\n  GroupVisibilityConfig,\n  LayoutConfig,\n  ThemeConfig,\n  ViewerConfig,\n} from 'ng2-pdfjs-viewer';\n\nexport type ZGalleryMode = 'grid' | 'list';\nexport type ZGallerySize = 'sm' | 'default' | 'lg';\nexport type ZGalleryToggleSize = 'xs' | 'sm' | 'default' | 'lg';\nexport type ZGalleryPdfViewerZoom = 'auto' | 'page-fit' | 'page-width' | 'page-actual' | `${number}%`;\nexport type ZGalleryPdfViewerCursor = 'select' | 'hand' | 'zoom';\nexport type ZGalleryPdfViewerScroll = 'vertical' | 'horizontal' | 'wrapped' | 'page';\nexport type ZGalleryPdfViewerSpread = 'none' | 'odd' | 'even';\nexport type ZGalleryPdfViewerPageMode = 'none' | 'thumbs' | 'bookmarks' | 'attachments';\n\nexport interface ZGalleryPdfViewerConfig {\n  viewerFolder?: string;\n  locale?: string;\n  showSpinner?: boolean;\n  useOnlyCssZoom?: boolean;\n  diagnosticLogs?: boolean;\n  showOpenFile?: boolean;\n  showAnnotations?: boolean;\n  showDownload?: boolean;\n  showViewBookmark?: boolean;\n  showPrint?: boolean;\n  showFullScreen?: boolean;\n  showFind?: boolean;\n  downloadOnLoad?: boolean;\n  printOnLoad?: boolean;\n  rotateCW?: boolean;\n  rotateCCW?: boolean;\n  showLastPageOnLoad?: boolean;\n  showToolbarLeft?: boolean;\n  showToolbarMiddle?: boolean;\n  showToolbarRight?: boolean;\n  showSecondaryToolbarToggle?: boolean;\n  showSidebar?: boolean;\n  showSidebarLeft?: boolean;\n  showSidebarRight?: boolean;\n  toolbarDensity?: LayoutConfig['toolbarDensity'];\n  sidebarWidth?: string;\n  toolbarPosition?: LayoutConfig['toolbarPosition'];\n  sidebarPosition?: LayoutConfig['sidebarPosition'];\n  responsiveBreakpoint?: string | number;\n  zoom?: ZGalleryPdfViewerZoom;\n  rotation?: 0 | 90 | 180 | 270;\n  cursor?: ZGalleryPdfViewerCursor;\n  scroll?: ZGalleryPdfViewerScroll;\n  spread?: ZGalleryPdfViewerSpread;\n  pageMode?: ZGalleryPdfViewerPageMode;\n  page?: number;\n  iframeBorder?: string | number;\n  theme?: ThemeConfig['theme'];\n  primaryColor?: string;\n  backgroundColor?: string;\n  pageBorderColor?: string;\n  pageSpacing?: ThemeConfig['pageSpacing'];\n  toolbarColor?: string;\n  textColor?: string;\n  borderRadius?: string;\n  customCSS?: string;\n  cspNonce?: string;\n  iframeTitle?: string;\n  urlValidation?: boolean;\n  controlVisibility?: ControlVisibilityConfig;\n  groupVisibility?: GroupVisibilityConfig;\n  autoActions?: AutoActionConfig;\n  viewerConfig?: ViewerConfig;\n  themeConfig?: ThemeConfig;\n  layoutConfig?: LayoutConfig;\n}\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\nexport interface ZGalleryPreviewOptions {\n  file: ZGalleryFile;\n  files?: ZGalleryFile[];\n  zDownload?: boolean;\n  zShowRemove?: boolean;\n  zPdfViewerConfig?: ZGalleryPdfViewerConfig;\n  zTrustedResourceOrigins?: string[];\n  zOnClose?: () => void;\n  zOnDownload?: (file: ZGalleryFile) => void;\n  zOnNavigate?: (file: ZGalleryFile) => void;\n  zOnRemove?: (file: ZGalleryFile) => void;\n}\n\nexport type ZGalleryPreviewItemOptions = Omit<ZGalleryPreviewOptions, 'file' | 'files'>;\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('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.includes('word') || type.includes('wordprocessingml') || WORD_EXTENSIONS.includes(ext)) {\n    return 'word';\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 (\n    category === 'image' ||\n    category === 'pdf' ||\n    category === 'video' ||\n    category === 'word' ||\n    category === 'excel' ||\n    category === 'text' ||\n    category === 'code'\n  );\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 { zMergeClasses } from '@shival99/z-ui/utils';\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-md border shadow-sm transition-all duration-300 hover:shadow-lg\"\n        [class.border-primary]=\"zSelected()\"\n        [class.ring-1]=\"zSelected()\"\n        [class.ring-primary/35]=\"zSelected()\"\n        (click)=\"onItemClick()\"\n      >\n        @if (zSelectable()) {\n          <div\n            class=\"bg-primary shadow-card absolute top-3 right-3 z-20 flex size-6 items-center justify-center rounded-full transition-all duration-200\"\n            [class.scale-100]=\"zSelected()\"\n            [class.opacity-100]=\"zSelected()\"\n            [class.scale-90]=\"!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 overflow-hidden\" [class]=\"mediaHeightClass()\">\n          @if (isImage()) {\n            @if (isLoading()) {\n              <div class=\"absolute inset-0\">\n                <z-skeleton class=\"size-full\" />\n              </div>\n            }\n            <img\n              [src]=\"file().thumbnailUrl || file().url\"\n              [alt]=\"file().name\"\n              class=\"size-full object-cover transition-all duration-500\"\n              [class.opacity-0]=\"isLoading()\"\n              [class.scale-100]=\"!isLoading()\"\n              [class.group-hover:scale-110]=\"!isLoading()\"\n              loading=\"lazy\"\n              (load)=\"onImageLoad()\"\n              (error)=\"onImageError()\"\n            />\n          } @else {\n            <div\n              class=\"flex size-full flex-col items-center justify-center gap-2 bg-gradient-to-br\"\n              [class]=\"categoryStyle().bg\"\n            >\n              <i z-icon [zType]=\"categoryStyle().icon\" zSize=\"34\" [class]=\"categoryStyle().text\"></i>\n              <span class=\"text-xs font-semibold tracking-wide\" [class]=\"categoryStyle().text\">\n                {{ categoryStyle().label }}\n              </span>\n            </div>\n          }\n\n          <div class=\"absolute inset-x-0 top-0 z-10 flex items-start justify-between p-3\">\n            <span\n              class=\"rounded-full border border-white/35 bg-black/45 px-2.5 py-1 text-[0.6875rem] font-semibold tracking-wide text-white backdrop-blur-md\"\n            >\n              {{ fileExtension() }}\n            </span>\n            <span\n              class=\"rounded-full border border-white/25 bg-black/35 px-2 py-1 text-[0.625rem] font-medium text-white/95 backdrop-blur-md\"\n            >\n              {{ formattedSize() }}\n            </span>\n          </div>\n\n          <div\n            class=\"absolute inset-x-0 bottom-0 h-24 bg-gradient-to-t from-black/70 via-black/30 to-transparent opacity-85 transition-opacity duration-300 group-hover:opacity-100\"\n          ></div>\n\n          <div\n            class=\"absolute right-3 bottom-3 z-20 flex items-center gap-1.5 rounded-full border border-white/20 bg-black/40 p-1 opacity-0 backdrop-blur-md transition-all duration-200 group-hover:opacity-100\"\n          >\n            @if (zShowPreview() && canPreview()) {\n              <button\n                z-button\n                zType=\"secondary\"\n                zSize=\"xs\"\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=\"14\"></i>\n              </button>\n            }\n            @if (zShowDownload() && (file().downloadUrl || file().url)) {\n              <button\n                z-button\n                zType=\"secondary\"\n                zSize=\"xs\"\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=\"14\"></i>\n              </button>\n            }\n            @if (zShowRemove()) {\n              <button\n                z-button\n                zType=\"secondary\"\n                zSize=\"xs\"\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=\"14\"></i>\n              </button>\n            }\n          </div>\n        </div>\n\n        <div class=\"p-3\">\n          <p class=\"text-foreground truncate text-sm leading-normal font-semibold\" z-tooltip [zContent]=\"file().name\">\n            {{ file().name }}\n          </p>\n          @if (formattedDate()) {\n            <p class=\"text-muted-foreground mt-1 text-xs\">{{ formattedDate() }}</p>\n          }\n        </div>\n      </div>\n    } @else {\n      <div\n        class=\"group border-border bg-card hover:border-primary/35 flex cursor-pointer items-center gap-3 rounded-sm border px-3 py-2.5 shadow-sm transition-all duration-200 hover:shadow-md\"\n        [class.border-primary]=\"zSelected()\"\n        [class.ring-1]=\"zSelected()\"\n        [class.ring-primary/30]=\"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-200\"\n            [class.scale-100]=\"zSelected()\"\n            [class.opacity-100]=\"zSelected()\"\n            [class.scale-90]=\"!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\n          class=\"relative flex size-11 shrink-0 items-center justify-center overflow-hidden rounded-sm border border-black/5 bg-white/40 shadow-sm backdrop-blur-sm dark:border-white/10 dark:bg-white/5\"\n        >\n          @if (isImage() && (file().thumbnailUrl || file().url)) {\n            <img\n              [src]=\"file().thumbnailUrl || file().url\"\n              [alt]=\"file().name\"\n              class=\"size-full rounded-sm object-cover\"\n              loading=\"lazy\"\n            />\n          } @else {\n            <span class=\"absolute inset-0 opacity-30 dark:opacity-20\" [class]=\"categoryStyle().bg\"></span>\n            <i\n              z-icon\n              [zType]=\"categoryStyle().icon\"\n              zSize=\"18\"\n              class=\"relative z-10\"\n              [class]=\"categoryStyle().text\"\n            ></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 truncate text-xs\">{{ formattedSize() }} · {{ categoryStyle().label }}</p>\n        </div>\n\n        <div class=\"ml-auto flex shrink-0 items-center gap-1.5\">\n          <span [class]=\"fileTypeClasses()\">\n            {{ fileExtension() }}\n          </span>\n          @if (zShowPreview() && canPreview()) {\n            <button\n              z-button\n              zType=\"ghost\"\n              zSize=\"xs\"\n              zShape=\"circle\"\n              class=\"text-muted-foreground hover:text-foreground\"\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              class=\"text-muted-foreground hover:text-foreground\"\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              class=\"text-muted-foreground hover:text-destructive\"\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  protected readonly fileExtension = computed(() => {\n    const fileName = this.file().name;\n    const parts = fileName.split('.');\n    if (parts.length < 2) {\n      return 'FILE';\n    }\n\n    return parts[parts.length - 1].toUpperCase();\n  });\n\n  protected readonly mediaHeightClass = computed(() => {\n    const size = this.zSize();\n    switch (size) {\n      case 'sm':\n        return 'h-36';\n      case 'lg':\n        return 'h-56';\n      default:\n        return 'h-44';\n    }\n  });\n\n  protected readonly formattedDate = computed(() => {\n    const file = this.file();\n    const date = file.updatedAt || file.createdAt;\n    if (!date) {\n      return null;\n    }\n\n    return new Intl.DateTimeFormat(undefined, {\n      month: 'short',\n      day: '2-digit',\n      year: 'numeric',\n    }).format(date);\n  });\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 fileTypeClasses = computed(() =>\n    zMergeClasses(\n      'inline-flex min-w-14 items-center justify-center rounded-sm border border-black/5 px-2.5 py-1 text-[0.6875rem] font-semibold tracking-wide dark:border-white/10',\n      this.categoryStyle().bg,\n      this.categoryStyle().text\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","export const Z_GALLERY_PDF_VIEWER_CHROME_CSS = `\n#toolbarContainer,\n#toolbarContainer * {\n  box-sizing: border-box;\n}\n\n#toolbarContainer,\n.findbar,\n.secondaryToolbar {\n  --toolbar-bg-color: #050505;\n  --toolbar-box-shadow: none;\n  --toolbar-border-bottom: 1px solid #222222;\n  --main-color: #f5f5f5;\n  --toolbar-icon-bg-color: #e7e7e7;\n  --toolbar-icon-hover-bg-color: #ffffff;\n  --toolbar-icon-opacity: 0.92;\n  --button-hover-color: #1f1f1f;\n  --toggled-btn-bg-color: #2a2a2a;\n  --toggled-btn-color: #ffffff;\n  --separator-color: #303030;\n  --field-bg-color: #111111;\n  --field-color: #f5f5f5;\n  --field-border-color: #3a3a3a;\n  --dropdown-btn-bg-color: #111111;\n  --dropdown-btn-border: 1px solid #3a3a3a;\n}\n\n#toolbarContainer {\n  height: var(--toolbar-height) !important;\n  padding: var(--toolbar-vertical-padding) var(--toolbar-horizontal-padding) !important;\n  background-color: var(--toolbar-bg-color) !important;\n  box-shadow: var(--toolbar-box-shadow) !important;\n  border-bottom: var(--toolbar-border-bottom) !important;\n  font: message-box !important;\n}\n\n#toolbarContainer #toolbarViewer,\n#toolbarViewerLeft,\n#toolbarViewerMiddle,\n#toolbarViewerRight {\n  height: 100%;\n  align-items: center;\n}\n\n#toolbarContainer #toolbarViewer {\n  justify-content: space-between;\n}\n\n#toolbarViewerLeft,\n#toolbarViewerMiddle,\n#toolbarViewerRight,\n.toolbarHorizontalGroup {\n  gap: 1px;\n}\n\n#toolbarViewerLeft .loadingInput {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n}\n\n.toolbarButton,\n.toolbarButtonWithContainer {\n  height: 100% !important;\n  aspect-ratio: 1 !important;\n  flex: none !important;\n}\n\n.toolbarButton {\n  display: flex !important;\n  align-items: center !important;\n  justify-content: center !important;\n  padding: 0 !important;\n  border: none !important;\n  border-radius: 2px !important;\n  background: none !important;\n  color: var(--main-color) !important;\n  font: message-box !important;\n  outline: none !important;\n}\n\n.toolbarButton:is(:hover, :focus-visible) {\n  background-color: var(--button-hover-color) !important;\n  color: var(--main-color) !important;\n}\n\n.toolbarButton::before {\n  width: var(--icon-size) !important;\n  height: var(--icon-size) !important;\n  background-color: var(--toolbar-icon-bg-color) !important;\n  opacity: var(--toolbar-icon-opacity) !important;\n  -webkit-mask-size: cover !important;\n  mask-size: cover !important;\n  -webkit-mask-position: center !important;\n  mask-position: center !important;\n}\n\n.toolbarButton:is(:hover, :focus-visible)::before {\n  background-color: var(--toolbar-icon-hover-bg-color) !important;\n}\n\n.toolbarButton.toggled {\n  background-color: var(--toggled-btn-bg-color) !important;\n  color: var(--toggled-btn-color) !important;\n}\n\n.toolbarButton.toggled::before {\n  background-color: var(--toggled-btn-color) !important;\n}\n\n.splitToolbarButtonSeparator {\n  width: 0 !important;\n  height: 62% !important;\n  border-left: 1px solid var(--separator-color) !important;\n  border-right: none !important;\n}\n\n.toolbarField {\n  padding: 4px 7px !important;\n  margin: 3px 0 !important;\n  border-radius: 2px !important;\n  background-color: var(--field-bg-color) !important;\n  background-clip: padding-box !important;\n  border: 1px solid var(--field-border-color) !important;\n  box-shadow: none !important;\n  color: var(--field-color) !important;\n  font: message-box !important;\n  font-size: 12px !important;\n  line-height: 16px !important;\n  outline: none !important;\n}\n\n.toolbarField:focus {\n  border-color: #0a84ff !important;\n}\n\n#toolbarViewerLeft #pageNumber.toolbarField {\n  appearance: textfield !important;\n  width: 48px !important;\n  min-width: 48px !important;\n  max-width: 48px !important;\n  height: auto !important;\n  min-height: 0 !important;\n  margin: 3px 0 !important;\n  padding: 4px 7px !important;\n  border-radius: 2px !important;\n  font-size: 12px !important;\n  line-height: 16px !important;\n  text-align: end !important;\n  background-size: 0 0 !important;\n  transition-property: none !important;\n}\n\n#pageNumber::-webkit-inner-spin-button {\n  -webkit-appearance: none !important;\n  appearance: none !important;\n}\n\n#toolbarViewerLeft #numPages.toolbarLabel {\n  white-space: nowrap;\n}\n\n.toolbarLabel {\n  width: max-content !important;\n  min-width: 16px !important;\n  height: 100% !important;\n  padding-inline: 4px !important;\n  margin: 2px !important;\n  border-radius: 2px !important;\n  color: var(--main-color) !important;\n  font-size: 12px !important;\n  line-height: 14px !important;\n  text-align: left !important;\n  user-select: none !important;\n  cursor: default !important;\n  display: inline flex !important;\n  flex-direction: column !important;\n  align-items: center !important;\n  justify-content: center !important;\n}\n\n.dropdownToolbarButton {\n  width: fit-content !important;\n  min-width: 140px !important;\n  padding: 0 !important;\n  border: var(--dropdown-btn-border) !important;\n  border-radius: 2px !important;\n  background-color: var(--dropdown-btn-bg-color) !important;\n  color: var(--main-color) !important;\n  font-size: 12px !important;\n  line-height: 14px !important;\n}\n\n.dropdownToolbarButton:hover {\n  background-color: var(--button-hover-color) !important;\n}\n\n.dropdownToolbarButton > select {\n  height: 28px !important;\n  margin: 0 !important;\n  padding-block: 1px 2px !important;\n  padding-inline: 6px 38px !important;\n  border: none !important;\n  background-color: var(--dropdown-btn-bg-color) !important;\n  color: var(--main-color) !important;\n  font: message-box !important;\n  font-size: 12px !important;\n}\n\n.dropdownToolbarButton > select > option {\n  background-color: #111111 !important;\n  color: #f5f5f5 !important;\n}\n\n#viewerContainer,\n#viewer,\n.pdfViewer,\n.pdfViewer .page,\n.pdfViewer .page canvas {\n  border-color: oklch(0.49 0 0) !important;\n  outline-color: oklch(0.49 0 0) !important;\n}\n\n.pdfViewer .page {\n  background-color: oklch(0.49 0 0) !important;\n  border: 0 !important;\n  box-shadow: none !important;\n}\n\n@media (max-width: 768px) {\n  #toolbarContainer {\n    --toolbar-horizontal-padding: 4px;\n  }\n\n  #editorModeButtons,\n  #editorSignatureButton,\n  #editorHighlightButton,\n  #editorFreeTextButton,\n  #editorInkButton,\n  #editorStampButton {\n    display: none !important;\n  }\n\n  #toolbarViewerRight {\n    gap: 0;\n  }\n\n  .dropdownToolbarButton {\n    min-width: 112px !important;\n  }\n\n  #toolbarViewerLeft #pageNumber.toolbarField {\n    width: 40px !important;\n    min-width: 40px !important;\n    max-width: 40px !important;\n  }\n}\n\n@media (max-width: 480px) {\n  #printButton,\n  #secondaryToolbarToggleButton {\n    display: none !important;\n  }\n\n  .dropdownToolbarButton {\n    min-width: 96px !important;\n  }\n}\n`;\n","import { DOCUMENT } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  inject,\n  input,\n  output,\n  signal,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\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 { PdfJsViewerComponent, PdfJsViewerModule } from 'ng2-pdfjs-viewer';\nimport { Z_GALLERY_PDF_VIEWER_CHROME_CSS } from './z-gallery-pdf-viewer.define';\nimport type { ZGalleryFile, ZGalleryPdfViewerConfig } from './z-gallery.types';\nimport { formatFileSize, getFileCategory, isImage, isPreviewable } from './z-gallery.utils';\n\n@Component({\n  selector: 'z-gallery-preview',\n  imports: [ZButtonComponent, ZIconComponent, ZSkeletonComponent, ZTooltipDirective, TranslatePipe, PdfJsViewerModule],\n  standalone: true,\n  templateUrl: './z-gallery-preview.component.html',\n  styleUrl: './z-gallery-preview.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'z-gallery-preview z-[9999]',\n    '(document:keydown)': 'onKeyDown($event)',\n  },\n})\nexport class ZGalleryPreviewComponent {\n  private readonly _document = inject(DOCUMENT);\n  private readonly _sanitizer = inject(DomSanitizer);\n\n  public readonly file = input.required<ZGalleryFile>();\n  public readonly files = input<ZGalleryFile[]>([]);\n  public readonly zShowRemove = input(false);\n  public readonly zPdfViewerConfig = input<ZGalleryPdfViewerConfig>({});\n  public readonly zTrustedResourceOrigins = input<string[]>([]);\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  protected readonly isConverting = signal(false);\n  protected readonly conversionError = signal<string | null>(null);\n  protected readonly previewError = signal(false);\n  protected readonly docHtmlContent = signal<SafeHtml | null>(null);\n  protected readonly textContent = signal<string>('');\n  protected readonly pdfViewer = viewChild<PdfJsViewerComponent>('pdfViewer');\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        return;\n      }\n\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      this.isConverting.set(false);\n      this.conversionError.set(null);\n      this.previewError.set(false);\n      this.docHtmlContent.set(null);\n      this.textContent.set('');\n\n      const category = getFileCategory(currentFile);\n      if (category === 'word' || category === 'excel' || category === 'text' || category === 'code') {\n        void this._loadFileContent(currentFile, category);\n      }\n    });\n  }\n\n  private async _loadFileContent(file: ZGalleryFile, category: string): Promise<void> {\n    const url = file.url || file.downloadUrl;\n    if (!url) {\n      this.conversionError.set('No URL available for preview');\n      this._completeLoading();\n      return;\n    }\n\n    this.isConverting.set(true);\n\n    try {\n      if (category === 'word') {\n        await this._loadDocx(url);\n      } else if (category === 'excel') {\n        await this._loadExcel(url);\n      } else {\n        await this._loadText(url);\n      }\n    } catch (error) {\n      const message = error instanceof Error ? error.message : 'Failed to load file content';\n      this.conversionError.set(message);\n    } finally {\n      this.isConverting.set(false);\n      this._completeLoading();\n    }\n  }\n\n  private async _loadDocx(url: string): Promise<void> {\n    const response = await fetch(url);\n    this._assertSuccessfulResponse(response);\n    const arrayBuffer = await response.arrayBuffer();\n    const mammothModule = await import('mammoth');\n    const mammoth = mammothModule.default ?? mammothModule;\n    const result = await mammoth.convertToHtml({ arrayBuffer });\n    this.docHtmlContent.set(this._sanitizer.bypassSecurityTrustHtml(result.value));\n  }\n\n  private async _loadExcel(url: string): Promise<void> {\n    const response = await fetch(url);\n    this._assertSuccessfulResponse(response);\n    const arrayBuffer = await response.arrayBuffer();\n    const xlsxModule = await import('xlsx');\n    const XLSX = xlsxModule.default ?? xlsxModule;\n    const workbook = XLSX.read(arrayBuffer);\n    const firstSheet = workbook.Sheets[workbook.SheetNames[0]];\n    const html = XLSX.utils.sheet_to_html(firstSheet);\n    this.docHtmlContent.set(this._sanitizer.bypassSecurityTrustHtml(html));\n  }\n\n  private async _loadText(url: string): Promise<void> {\n    const response = await fetch(url);\n    this._assertSuccessfulResponse(response);\n    const text = await response.text();\n    this.textContent.set(text);\n  }\n\n  private _assertSuccessfulResponse(response: Response): void {\n    if (!response.ok) {\n      throw new Error(`Failed to fetch file: ${response.status}`);\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 pdfUrl = computed<string | null>(() => {\n    const url = this.file().url || this.file().downloadUrl;\n    if (!url) {\n      return null;\n    }\n\n    if (!this._isAllowedResourceUrl(url)) {\n      return null;\n    }\n\n    return url;\n  });\n\n  protected readonly pdfViewerId = computed(() => {\n    const normalizedId = this.file().id.replace(/[^a-zA-Z0-9_-]/g, '-');\n    return `z-gallery-preview-${normalizedId}`;\n  });\n\n  protected readonly pdfViewerConfig = computed<ZGalleryPdfViewerConfig>(() => {\n    const config = this.zPdfViewerConfig();\n    const { controlVisibility } = config;\n    const { groupVisibility } = config;\n    const { autoActions } = config;\n    const { viewerConfig } = config;\n    const { themeConfig } = config;\n    const { layoutConfig } = config;\n\n    return {\n      ...config,\n      viewerFolder: config.viewerFolder ?? '/assets/pdfjs',\n      locale: viewerConfig?.locale ?? config.locale ?? '',\n      showSpinner: viewerConfig?.showSpinner ?? config.showSpinner ?? false,\n      useOnlyCssZoom: viewerConfig?.useOnlyCssZoom ?? config.useOnlyCssZoom ?? false,\n      diagnosticLogs: viewerConfig?.diagnosticLogs ?? config.diagnosticLogs ?? false,\n      showOpenFile: controlVisibility?.openFile ?? config.showOpenFile ?? false,\n      showAnnotations: controlVisibility?.annotations ?? config.showAnnotations ?? true,\n      showDownload: controlVisibility?.download ?? config.showDownload ?? true,\n      showViewBookmark: controlVisibility?.viewBookmark ?? config.showViewBookmark ?? true,\n      showPrint: controlVisibility?.print ?? config.showPrint ?? true,\n      showFullScreen: controlVisibility?.fullScreen ?? config.showFullScreen ?? true,\n      showFind: controlVisibility?.find ?? config.showFind ?? true,\n      downloadOnLoad: autoActions?.downloadOnLoad ?? config.downloadOnLoad ?? false,\n      printOnLoad: autoActions?.printOnLoad ?? config.printOnLoad ?? false,\n      rotateCW: autoActions?.rotateCW ?? config.rotateCW ?? false,\n      rotateCCW: autoActions?.rotateCCW ?? config.rotateCCW ?? false,\n      showLastPageOnLoad: autoActions?.showLastPageOnLoad ?? config.showLastPageOnLoad ?? false,\n      showToolbarLeft: groupVisibility?.toolbarLeft ?? config.showToolbarLeft ?? true,\n      showToolbarMiddle: groupVisibility?.toolbarMiddle ?? config.showToolbarMiddle ?? true,\n      showToolbarRight: groupVisibility?.toolbarRight ?? config.showToolbarRight ?? true,\n      showSecondaryToolbarToggle: groupVisibility?.secondaryToolbarToggle ?? config.showSecondaryToolbarToggle ?? true,\n      showSidebar: groupVisibility?.sidebar ?? config.showSidebar ?? true,\n      showSidebarLeft: groupVisibility?.sidebarLeft ?? config.showSidebarLeft ?? true,\n      showSidebarRight: groupVisibility?.sidebarRight ?? config.showSidebarRight ?? true,\n      toolbarDensity: layoutConfig?.toolbarDensity ?? config.toolbarDensity ?? 'default',\n      sidebarWidth: layoutConfig?.sidebarWidth ?? config.sidebarWidth,\n      toolbarPosition: layoutConfig?.toolbarPosition ?? config.toolbarPosition ?? 'top',\n      sidebarPosition: layoutConfig?.sidebarPosition ?? config.sidebarPosition ?? 'left',\n      responsiveBreakpoint: layoutConfig?.responsiveBreakpoint ?? config.responsiveBreakpoint,\n      zoom: config.zoom ?? 'page-fit',\n      rotation: config.rotation ?? 0,\n      cursor: config.cursor ?? 'select',\n      scroll: config.scroll ?? 'vertical',\n      spread: config.spread ?? 'none',\n      pageMode: config.pageMode ?? 'none',\n      page: config.page ?? 1,\n      iframeBorder: config.iframeBorder ?? 0,\n      theme: themeConfig?.theme ?? config.theme ?? 'auto',\n      primaryColor: themeConfig?.primaryColor ?? config.primaryColor,\n      backgroundColor: themeConfig?.backgroundColor ?? config.backgroundColor,\n      pageBorderColor: themeConfig?.pageBorderColor ?? config.pageBorderColor,\n      pageSpacing: themeConfig?.pageSpacing ?? config.pageSpacing,\n      toolbarColor: themeConfig?.toolbarColor ?? config.toolbarColor,\n      textColor: themeConfig?.textColor ?? config.textColor,\n      borderRadius: themeConfig?.borderRadius ?? config.borderRadius,\n      customCSS: this._mergePdfViewerCss(themeConfig?.customCSS ?? config.customCSS),\n      cspNonce: themeConfig?.cspNonce ?? config.cspNonce,\n      iframeTitle: themeConfig?.iframeTitle ?? config.iframeTitle,\n      urlValidation: config.urlValidation ?? true,\n      controlVisibility: controlVisibility ?? {},\n      groupVisibility: groupVisibility ?? {},\n      autoActions: autoActions ?? {},\n      viewerConfig: viewerConfig ?? {},\n      themeConfig: themeConfig ?? {},\n      layoutConfig: layoutConfig ?? {},\n    };\n  });\n\n  private _mergePdfViewerCss(customCSS: string | undefined): string {\n    if (!customCSS) {\n      return Z_GALLERY_PDF_VIEWER_CHROME_CSS;\n    }\n\n    return `${Z_GALLERY_PDF_VIEWER_CHROME_CSS}\\n${customCSS}`;\n  }\n\n  protected readonly isVideo = computed(() => getFileCategory(this.file()) === 'video');\n  protected readonly isWordFile = computed(() => getFileCategory(this.file()) === 'word');\n  protected readonly isExcelFile = computed(() => getFileCategory(this.file()) === 'excel');\n  protected readonly isTextFile = computed(() => {\n    const category = getFileCategory(this.file());\n    return category === 'text' || category === 'code';\n  });\n\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  private _isAllowedResourceUrl(url: string): boolean {\n    const currentOrigin = globalThis.location?.origin;\n    const baseUrl = currentOrigin ?? 'http://localhost';\n\n    try {\n      const parsedUrl = new URL(url, baseUrl);\n      if (parsedUrl.protocol === 'blob:') {\n        return parsedUrl.origin === baseUrl;\n      }\n\n      return parsedUrl.origin === baseUrl || this._trustedOrigins().has(parsedUrl.origin);\n    } catch {\n      return false;\n    }\n  }\n\n  private readonly _trustedOrigins = computed(\n    () =>\n      new Set(\n        this.zTrustedResourceOrigins()\n          .map(origin => this._normalizeOrigin(origin))\n          .filter((origin): origin is string => Boolean(origin))\n      )\n  );\n\n  private _normalizeOrigin(origin: string): string | null {\n    try {\n      return new URL(origin).origin;\n    } catch {\n      return null;\n    }\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.previewError.set(false);\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._queueMobilePdfFit();\n    this._completeLoading();\n  }\n\n  protected onMediaError(): void {\n    this.previewError.set(true);\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  private _queueMobilePdfFit(): void {\n    if (this.zPdfViewerConfig().zoom) {\n      return;\n    }\n\n    const { defaultView } = this._document;\n    if (!defaultView?.matchMedia('(max-width: 768px)').matches) {\n      return;\n    }\n\n    const syncZoom = (): void => {\n      void this.pdfViewer()?.setZoom('page-fit');\n    };\n\n    defaultView.requestAnimationFrame(() => {\n      syncZoom();\n      defaultView.setTimeout(syncZoom, 120);\n    });\n  }\n}\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  <button\n    z-button\n    zType=\"ghost\"\n    zShape=\"circle\"\n    class=\"absolute top-3 right-3 z-20 text-white hover:bg-white/20 lg:top-4 lg:right-4\"\n    (click)=\"close()\">\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      <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      <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-3 right-14 left-3 z-10 flex min-w-0 items-center justify-between gap-2 rounded-[0.375rem] border !border-transparent bg-black/70 px-2.5 py-1.5 text-xs text-white shadow-lg backdrop-blur-sm lg:top-4 lg:right-auto lg:left-1/2 lg:max-w-[calc(100vw-10rem)] lg:-translate-x-1/2 lg:justify-start lg:bg-black/60 lg:px-4 lg:py-2 lg:text-sm dark:border\">\n      <div class=\"flex min-w-0 items-baseline gap-1.5\">\n        <span class=\"min-w-0 truncate font-medium lg:max-w-[12.5rem]\">{{ file().name }}</span>\n        <span class=\"hidden shrink-0 text-white/70 lg:inline\">({{ formattedSize() }})</span>\n      </div>\n\n      @if (files().length > 1) {\n        <span class=\"hidden shrink-0 text-white/70 md:inline\">{{ currentIndex() + 1 }} / {{ files().length }}</span>\n      }\n\n      <div class=\"ml-1 flex shrink-0 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            <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            <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          <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            <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            <div class=\"text-muted-foreground absolute inset-0 flex items-center justify-center text-sm font-medium\">\n              {{ 'i18n_z_ui_gallery_loading_preview' | translate }}\n            </div>\n          }\n          @if (previewError()) {\n            <div class=\"bg-card flex size-full flex-col items-center justify-center rounded-lg p-8 shadow-2xl\">\n              <div class=\"bg-muted mb-4 flex size-16 items-center justify-center rounded-xl\">\n                <i z-icon zType=\"lucideTriangleAlert\" zSize=\"28\" class=\"text-destructive\"></i>\n              </div>\n              <span class=\"text-foreground text-sm font-medium\">\n                {{ 'i18n_z_ui_gallery_preview_load_error' | translate }}\n              </span>\n            </div>\n          } @else {\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() && pdfUrl()) {\n        <div\n          class=\"z-gallery-pdf-frame relative h-[75vh] w-[85vw] max-w-[96vw] overflow-hidden rounded-sm border shadow-xs\">\n          @if (isLoading()) {\n            <z-skeleton class=\"absolute inset-0 rounded-sm\" />\n            <div\n              class=\"text-muted-foreground absolute inset-0 z-10 flex items-center justify-center text-sm font-medium\">\n              {{ 'i18n_z_ui_gallery_loading_preview' | translate }}\n            </div>\n          }\n          @if (previewError()) {\n            <div class=\"bg-card flex size-full flex-col items-center justify-center p-8\">\n              <div class=\"bg-muted mb-4 flex size-16 items-center justify-center rounded-xl\">\n                <i z-icon zType=\"lucideTriangleAlert\" zSize=\"28\" class=\"text-destructive\"></i>\n              </div>\n              <span class=\"text-foreground text-sm font-medium\">\n                {{ 'i18n_z_ui_gallery_preview_load_error' | translate }}\n              </span>\n            </div>\n          } @else {\n            <div\n              class=\"relative size-full bg-white transition-opacity duration-300\"\n              [class.opacity-0]=\"isLoading()\"\n              [class.opacity-100]=\"!isLoading()\">\n              @let pdfConfig = pdfViewerConfig();\n              <ng2-pdfjs-viewer\n                #pdfViewer\n                class=\"block size-full\"\n                [viewerFolder]=\"pdfConfig.viewerFolder!\"\n                [viewerId]=\"pdfViewerId()\"\n                [pdfSrc]=\"pdfUrl()!\"\n                [downloadFileName]=\"file().name\"\n                [locale]=\"pdfConfig.locale!\"\n                [showSpinner]=\"pdfConfig.showSpinner!\"\n                [useOnlyCssZoom]=\"pdfConfig.useOnlyCssZoom!\"\n                [diagnosticLogs]=\"pdfConfig.diagnosticLogs!\"\n                [showOpenFile]=\"pdfConfig.showOpenFile!\"\n                [showAnnotations]=\"pdfConfig.showAnnotations!\"\n                [showDownload]=\"pdfConfig.showDownload!\"\n                [showViewBookmark]=\"pdfConfig.showViewBookmark!\"\n                [showPrint]=\"pdfConfig.showPrint!\"\n                [showFullScreen]=\"pdfConfig.showFullScreen!\"\n                [showFind]=\"pdfConfig.showFind!\"\n                [downloadOnLoad]=\"pdfConfig.downloadOnLoad!\"\n                [printOnLoad]=\"pdfConfig.printOnLoad!\"\n                [rotateCW]=\"pdfConfig.rotateCW!\"\n                [rotateCCW]=\"pdfConfig.rotateCCW!\"\n                [showLastPageOnLoad]=\"pdfConfig.showLastPageOnLoad!\"\n                [showToolbarLeft]=\"pdfConfig.showToolbarLeft!\"\n                [showToolbarMiddle]=\"pdfConfig.showToolbarMiddle!\"\n                [showToolbarRight]=\"pdfConfig.showToolbarRight!\"\n                [showSecondaryToolbarToggle]=\"pdfConfig.showSecondaryToolbarToggle!\"\n                [showSidebar]=\"pdfConfig.showSidebar!\"\n                [showSidebarLeft]=\"pdfConfig.showSidebarLeft!\"\n                [showSidebarRight]=\"pdfConfig.showSidebarRight!\"\n                [toolbarDensity]=\"pdfConfig.toolbarDensity!\"\n                [sidebarWidth]=\"pdfConfig.sidebarWidth\"\n                [toolbarPosition]=\"pdfConfig.toolbarPosition!\"\n                [sidebarPosition]=\"pdfConfig.sidebarPosition!\"\n                [responsiveBreakpoint]=\"pdfConfig.responsiveBreakpoint\"\n                [zoom]=\"pdfConfig.zoom!\"\n                [rotation]=\"pdfConfig.rotation!\"\n                [cursor]=\"pdfConfig.cursor!\"\n                [scroll]=\"pdfConfig.scroll!\"\n                [spread]=\"pdfConfig.spread!\"\n                [pageMode]=\"pdfConfig.pageMode!\"\n                [page]=\"pdfConfig.page!\"\n                [iframeBorder]=\"pdfConfig.iframeBorder!\"\n                [theme]=\"pdfConfig.theme!\"\n                [primaryColor]=\"pdfConfig.primaryColor\"\n                [backgroundColor]=\"pdfConfig.backgroundColor\"\n                [pageBorderColor]=\"pdfConfig.pageBorderColor\"\n                [pageSpacing]=\"pdfConfig.pageSpacing\"\n                [toolbarColor]=\"pdfConfig.toolbarColor\"\n                [textColor]=\"pdfConfig.textColor\"\n                [borderRadius]=\"pdfConfig.borderRadius\"\n                [customCSS]=\"pdfConfig.customCSS\"\n                [cspNonce]=\"pdfConfig.cspNonce\"\n                [iframeTitle]=\"pdfConfig.iframeTitle || ('i18n_z_ui_gallery_pdf_preview' | translate)\"\n                [urlValidation]=\"pdfConfig.urlValidation!\"\n                [controlVisibility]=\"pdfConfig.controlVisibility!\"\n                [groupVisibility]=\"pdfConfig.groupVisibility!\"\n                [autoActions]=\"pdfConfig.autoActions!\"\n                [viewerConfig]=\"pdfConfig.viewerConfig!\"\n                [themeConfig]=\"pdfConfig.themeConfig!\"\n                [layoutConfig]=\"pdfConfig.layoutConfig!\"\n                (onDocumentLoad)=\"onPdfLoad()\"\n                (onDocumentError)=\"onMediaError()\" />\n            </div>\n          }\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            <div class=\"text-muted-foreground absolute inset-0 flex items-center justify-center text-sm font-medium\">\n              {{ 'i18n_z_ui_gallery_loading_preview' | translate }}\n            </div>\n          }\n          @if (previewError()) {\n            <div class=\"bg-card flex size-full flex-col items-center justify-center rounded-lg p-8 shadow-2xl\">\n              <div class=\"bg-muted mb-4 flex size-16 items-center justify-center rounded-xl\">\n                <i z-icon zType=\"lucideTriangleAlert\" zSize=\"28\" class=\"text-destructive\"></i>\n              </div>\n              <span class=\"text-foreground text-sm font-medium\">\n                {{ 'i18n_z_ui_gallery_preview_load_error' | translate }}\n              </span>\n            </div>\n          } @else {\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              {{ 'i18n_z_ui_gallery_video_not_supported' | translate }}\n            </video>\n          }\n        </div>\n      } @else if (isWordFile()) {\n        <div class=\"relative h-[75vh] w-[85vw]\">\n          @if (isLoading() || isConverting()) {\n            <z-skeleton class=\"absolute inset-0 rounded-lg\" />\n            <div class=\"text-muted-foreground absolute inset-0 flex items-center justify-center text-sm font-medium\">\n              {{ 'i18n_z_ui_gallery_loading_preview' | translate }}\n            </div>\n          }\n          @if (conversionError()) {\n            <div class=\"bg-card flex size-full 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 rounded-md bg-red-100 px-3 py-1.5 text-xs dark:bg-red-900/30\">\n                <span class=\"text-red-700 dark:text-red-300\">{{ conversionError() }}</span>\n              </span>\n            </div>\n          } @else if (docHtmlContent()) {\n            <div\n              class=\"absolute inset-0 overflow-auto rounded-lg bg-white p-8 text-gray-950 shadow-2xl\"\n              [innerHTML]=\"docHtmlContent()\"></div>\n          }\n        </div>\n      } @else if (isExcelFile()) {\n        <div class=\"relative h-[75vh] w-[85vw]\">\n          @if (isLoading() || isConverting()) {\n            <z-skeleton class=\"absolute inset-0 rounded-lg\" />\n            <div class=\"text-muted-foreground absolute inset-0 flex items-center justify-center text-sm font-medium\">\n              {{ 'i18n_z_ui_gallery_loading_preview' | translate }}\n            </div>\n          }\n          @if (conversionError()) {\n            <div class=\"bg-card flex size-full 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 rounded-md bg-red-100 px-3 py-1.5 text-xs dark:bg-red-900/30\">\n                <span class=\"text-red-700 dark:text-red-300\">{{ conversionError() }}</span>\n              </span>\n            </div>\n          } @else if (docHtmlContent()) {\n            <div\n              class=\"absolute inset-0 overflow-auto rounded-lg bg-white p-4 text-gray-950 shadow-2xl\"\n              [innerHTML]=\"docHtmlContent()\"></div>\n          }\n        </div>\n      } @else if (isTextFile()) {\n        <div class=\"relative h-[75vh] w-[85vw]\">\n          @if (isLoading() || isConverting()) {\n            <z-skeleton class=\"absolute inset-0 rounded-lg\" />\n            <div class=\"text-muted-foreground absolute inset-0 flex items-center justify-center text-sm font-medium\">\n              {{ 'i18n_z_ui_gallery_loading_preview' | translate }}\n            </div>\n          }\n          @if (conversionError()) {\n            <div class=\"bg-card flex size-full 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 rounded-md bg-red-100 px-3 py-1.5 text-xs dark:bg-red-900/30\">\n                <span class=\"text-red-700 dark:text-red-300\">{{ conversionError() }}</span>\n              </span>\n            </div>\n          } @else if (textContent()) {\n            <div class=\"absolute inset-0 overflow-auto rounded-lg bg-gray-950 p-6 shadow-2xl\">\n              <pre class=\"font-mono text-sm leading-relaxed whitespace-pre-wrap text-gray-100\">{{ textContent() }}</pre>\n            </div>\n          }\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\"></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","import type { OverlayRef } from '@angular/cdk/overlay';\nimport { EventEmitter } from '@angular/core';\nimport type { ZGalleryPreviewComponent } from './z-gallery-preview.component';\n\nexport class ZGalleryPreviewRef {\n  private _closed = false;\n\n  public componentInstance: ZGalleryPreviewComponent | null = null;\n  public readonly zAfterClose = new EventEmitter<void>();\n\n  public constructor(private readonly _overlayRef: OverlayRef | null) {}\n\n  public close(): void {\n    if (this._closed) {\n      return;\n    }\n\n    this._closed = true;\n    this.zAfterClose.emit();\n    this.zAfterClose.complete();\n    this._overlayRef?.dispose();\n  }\n}\n","import { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, Injector, PLATFORM_ID } from '@angular/core';\nimport { ZOverlayZIndexService } from '@shival99/z-ui/services';\nimport { ZGalleryPreviewComponent } from './z-gallery-preview.component';\nimport { ZGalleryPreviewRef } from './z-gallery-preview.ref';\nimport type { ZGalleryFile, ZGalleryPreviewOptions } from './z-gallery.types';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ZGalleryPreviewService {\n  private readonly _document = inject(DOCUMENT);\n  private readonly _injector = inject(Injector);\n  private readonly _overlay = inject(Overlay);\n  private readonly _platformId = inject(PLATFORM_ID);\n  private readonly _zIndexService = inject(ZOverlayZIndexService);\n\n  public open(file: ZGalleryFile, options?: Omit<ZGalleryPreviewOptions, 'file'>): ZGalleryPreviewRef;\n  public open(options: ZGalleryPreviewOptions): ZGalleryPreviewRef;\n  public open(\n    fileOrOptions: ZGalleryFile | ZGalleryPreviewOptions,\n    options: Omit<ZGalleryPreviewOptions, 'file'> = {}\n  ): ZGalleryPreviewRef {\n    const previewOptions = this._normalizeOptions(fileOrOptions, options);\n    const overlayRef = this._createOverlay();\n    const previewRef = new ZGalleryPreviewRef(overlayRef ?? null);\n\n    if (!overlayRef) {\n      return previewRef;\n    }\n\n    const componentRef = overlayRef.attach(new ComponentPortal(ZGalleryPreviewComponent, null, this._injector));\n    previewRef.componentInstance = componentRef.instance;\n\n    componentRef.setInput('file', previewOptions.file);\n    componentRef.setInput('files', previewOptions.files);\n    componentRef.setInput('zShowRemove', previewOptions.zShowRemove ?? false);\n    componentRef.setInput('zPdfViewerConfig', previewOptions.zPdfViewerConfig ?? {});\n    componentRef.setInput('zTrustedResourceOrigins', previewOptions.zTrustedResourceOrigins ?? []);\n\n    componentRef.instance.zOnClose.subscribe(() => {\n      previewOptions.zOnClose?.();\n      previewRef.close();\n    });\n    componentRef.instance.zOnDownload.subscribe(file => this._handleDownload(file, previewOptions));\n    componentRef.instance.zOnNavigate.subscribe(file => {\n      componentRef.setInput('file', file);\n      previewOptions.zOnNavigate?.(file);\n    });\n    componentRef.instance.zOnRemove.subscribe(file => previewOptions.zOnRemove?.(file));\n\n    return previewRef;\n  }\n\n  private _createOverlay(): OverlayRef | undefined {\n    if (!isPlatformBrowser(this._platformId)) {\n      return undefined;\n    }\n\n    const overlayRef = this._overlay.create(\n      new OverlayConfig({\n        hasBackdrop: false,\n        panelClass: 'z-gallery-preview-overlay-pane',\n        positionStrategy: this._overlay.position().global(),\n        scrollStrategy: this._overlay.scrollStrategies.block(),\n      })\n    );\n\n    this._zIndexService.applyToOverlay(overlayRef);\n    this._zIndexService.deferMoveToTop(overlayRef);\n\n    return overlayRef;\n  }\n\n  private _normalizeOptions(\n    fileOrOptions: ZGalleryFile | ZGalleryPreviewOptions,\n    options: Omit<ZGalleryPreviewOptions, 'file'>\n  ): ZGalleryPreviewOptions {\n    const previewOptions = 'file' in fileOrOptions ? fileOrOptions : { ...options, file: fileOrOptions };\n    const files = previewOptions.files?.length ? previewOptions.files : [previewOptions.file];\n    const hasCurrentFile = files.some(file => file.id === previewOptions.file.id);\n\n    return {\n      ...previewOptions,\n      files: hasCurrentFile ? files : [previewOptions.file, ...files],\n    };\n  }\n\n  private _handleDownload(file: ZGalleryFile, options: ZGalleryPreviewOptions): void {\n    options.zOnDownload?.(file);\n\n    if (options.zDownload === false) {\n      return;\n    }\n\n    const downloadLink = file.downloadUrl || file.url;\n    if (!downloadLink || !isPlatformBrowser(this._platformId)) {\n      return;\n    }\n\n    const link = this._document.createElement('a');\n    link.href = downloadLink;\n    link.download = file.name;\n    link.target = '_blank';\n    this._document.body.appendChild(link);\n    link.click();\n    this._document.body.removeChild(link);\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-[0.625rem]' },\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  DestroyRef,\n  inject,\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 { ZSkeletonComponent } from '@shival99/z-ui/components/z-skeleton';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport { ZGalleryItemComponent } from './z-gallery-item.component';\nimport type { ZGalleryPreviewRef } from './z-gallery-preview.ref';\nimport { ZGalleryPreviewService } from './z-gallery-preview.service';\nimport type {\n  ZGalleryActionEvent,\n  ZGalleryControl,\n  ZGalleryFile,\n  ZGalleryMode,\n  ZGalleryPdfViewerConfig,\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    ZButtonGroupComponent,\n    ZButtonGroupItemDirective,\n    ZButtonComponent,\n    ZCheckboxComponent,\n    ZIconComponent,\n    ZEmptyComponent,\n    ZInputComponent,\n    ZSkeletonComponent,\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              @if (zLoading()) {\n                <z-skeleton zWidth=\"7rem\" zHeight=\"1.25rem\" />\n              } @else {\n                <h3 class=\"text-sm font-medium\">{{ zTitle() }}</h3>\n              }\n            }\n\n            @if (zShowSearch()) {\n              @if (zLoading()) {\n                <z-skeleton zWidth=\"16rem\" [zHeight]=\"headerControlHeight()\" zRadius=\"0.375rem\" />\n              } @else {\n                <z-input\n                  zSearch\n                  [zSize]=\"searchInputSize()\"\n                  [zPlaceholder]=\"zSearchPlaceholder() || ('i18n_z_ui_gallery_search_placeholder' | translate)\"\n                  [zDebounce]=\"zSearchDebounce()\"\n                  [ngModel]=\"searchInputQuery()\"\n                  (ngModelChange)=\"searchInputQuery.set($event)\"\n                  (zOnSearch)=\"onSearchChange($event)\"\n                  class=\"w-64\"\n                />\n              }\n            }\n          </div>\n\n          @if (zShowModeToggle() && (zFiles().length > 0 || zLoading())) {\n            @if (zLoading()) {\n              <z-skeleton zWidth=\"5rem\" [zHeight]=\"headerControlHeight()\" zRadius=\"0.375rem\" />\n            } @else {\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          }\n        </div>\n      }\n\n      @if (zLoading()) {\n        @if (currentMode() === 'grid') {\n          <div class=\"grid gap-4\" [class]=\"gridColumnsClass()\" [style.gridTemplateColumns]=\"gridTemplateColumns()\">\n            @for (item of skeletonItems(); track item) {\n              <div class=\"border-border bg-card overflow-hidden rounded-md border shadow-sm\">\n                <z-skeleton [zHeight]=\"skeletonMediaHeight()\" zRadius=\"0\" />\n                <div class=\"p-3\">\n                  <z-skeleton zWidth=\"75%\" zHeight=\"1.25rem\" />\n                </div>\n              </div>\n            }\n          </div>\n        } @else {\n          <div class=\"flex flex-col gap-2\">\n            @for (item of skeletonItems(); track item) {\n              <div class=\"border-border bg-card flex items-center gap-3 rounded-sm border px-3 py-2.5 shadow-sm\">\n                <z-skeleton class=\"shrink-0\" zWidth=\"2.75rem\" zHeight=\"2.75rem\" zRadius=\"0.125rem\" />\n                <div class=\"min-w-0 flex-1 space-y-2\">\n                  <z-skeleton zWidth=\"40%\" zHeight=\"0.875rem\" />\n                  <z-skeleton zWidth=\"25%\" zHeight=\"0.75rem\" />\n                </div>\n                <z-skeleton class=\"shrink-0\" zWidth=\"3.5rem\" zHeight=\"1.5rem\" zRadius=\"0.125rem\" />\n              </div>\n            }\n          </div>\n        }\n      } @else 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-[0.375rem] 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 (!zLoading() && filteredFiles().length > 0) {\n        @if (currentMode() === 'grid') {\n          <div class=\"grid gap-4\" [class]=\"gridColumnsClass()\" [style.gridTemplateColumns]=\"gridTemplateColumns()\">\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 (!zLoading() && zFiles().length > 0 && searchQuery()) {\n        <z-empty zIcon=\"lucideSearchX\" [zMessage]=\"'i18n_z_ui_gallery_no_search_results' | translate\" zSize=\"sm\" />\n      } @else if (!zLoading()) {\n        <z-empty\n          [zIcon]=\"zEmptyIcon()\"\n          [zMessage]=\"zEmptyText() || ('i18n_z_ui_gallery_no_files' | translate)\"\n          zSize=\"sm\"\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  private readonly _destroyRef = inject(DestroyRef);\n  private readonly _previewService = inject(ZGalleryPreviewService);\n  private _previewRef: ZGalleryPreviewRef | null = null;\n\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 zItemWidth = input<string | null>(null);\n  public readonly zLoading = input(false);\n  public readonly zSkeletonRows = input(2);\n  public readonly zSkeletonItems = input<number | null>(null);\n  public readonly zShowDownload = input(true);\n  public readonly zShowPreview = input(true);\n  public readonly zShowRemove = input(false);\n  public readonly zPdfViewerConfig = input<ZGalleryPdfViewerConfig>({});\n  public readonly zTrustedResourceOrigins = input<string[]>([]);\n  public readonly zShowModeToggle = input(true);\n  public readonly zShowSearch = input(false);\n  public readonly zServerSearch = input(false);\n  public readonly zSearchDebounce = input(300);\n  public readonly zSearchPlaceholder = input<string>('Search files...');\n  public readonly zToggleSize = input<ZGalleryToggleSize>('default');\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 searchInputQuery = signal<string>('');\n  protected readonly searchQuery = signal<string>('');\n  protected readonly skeletonItems = computed(() => {\n    const itemCount = this.zSkeletonItems();\n    if (itemCount !== null) {\n      return Array.from({ length: Math.max(1, itemCount) }, (_, index) => index);\n    }\n\n    const columns = this.currentMode() === 'list' ? 1 : Math.max(1, this.zColumns());\n    const rows = Math.max(1, this.zSkeletonRows());\n    return Array.from({ length: columns * rows }, (_, index) => index);\n  });\n\n  protected readonly currentMode = computed<ZGalleryMode>(() => {\n    const index = this.modeIndex();\n    return index === 1 ? 'list' : 'grid';\n  });\n\n  protected readonly gridColumnsClass = computed(() => {\n    if (this.zItemWidth()) {\n      return 'justify-start';\n    }\n\n    const cols = this.zColumns();\n    switch (cols) {\n      case 1:\n        return 'grid-cols-1';\n      case 2:\n        return 'grid-cols-1 sm:grid-cols-2';\n      case 3:\n        return 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3';\n      case 4:\n        return 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-4';\n      case 5:\n        return 'grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5';\n      case 6:\n        return 'grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6';\n      default:\n        return `grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-${cols}`;\n    }\n  });\n\n  protected readonly gridTemplateColumns = computed(() => {\n    const itemWidth = this.zItemWidth();\n    return itemWidth ? `repeat(auto-fill, minmax(${itemWidth}, ${itemWidth}))` : null;\n  });\n\n  protected readonly containerClasses = computed(() =>\n    zMergeClasses(zGalleryVariants({ zSize: this.zSize() }), this.zClass())\n  );\n\n  protected readonly showHeader = computed(\n    () =>\n      this.zTitle() || this.zShowSearch() || (this.zShowModeToggle() && (this.zFiles().length > 0 || this.zLoading()))\n  );\n\n  protected readonly headerControlHeight = computed(() => {\n    switch (this.zToggleSize()) {\n      case 'xs':\n        return '1.75rem';\n      case 'sm':\n        return '2rem';\n      case 'lg':\n        return '2.5rem';\n      default:\n        return '2.25rem';\n    }\n  });\n\n  protected readonly skeletonMediaHeight = computed(() => {\n    switch (this.zSize()) {\n      case 'sm':\n        return '9rem';\n      case 'lg':\n        return '14rem';\n      default:\n        return '11rem';\n    }\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._destroyRef.onDestroy(() => this.closePreview());\n\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._openPreview(file),\n      closePreview: () => this.closePreview(),\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 | number | null): void {\n    const normalizedQuery = String(query ?? '');\n    this.searchQuery.set(normalizedQuery);\n    this.zSearchChange.emit(normalizedQuery);\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._openPreview(file, true);\n  }\n\n  protected onRemove(file: ZGalleryFile): void {\n    this.zOnRemove.emit(file);\n  }\n\n  protected closePreview(): void {\n    this._previewRef?.close();\n    this._previewRef = null;\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      return;\n    }\n\n    const nextFile = currentIndex < allFiles.length - 1 ? allFiles[currentIndex + 1] : allFiles[currentIndex - 1];\n    this._openPreview(nextFile);\n  }\n\n  private _openPreview(file: ZGalleryFile, emitPreview = false): void {\n    this.closePreview();\n\n    if (emitPreview) {\n      this.zOnPreview.emit(file);\n    }\n\n    const previewRef = this._previewService.open({\n      file,\n      files: this.filteredFiles(),\n      zShowRemove: this.zShowRemove(),\n      zPdfViewerConfig: this.zPdfViewerConfig(),\n      zTrustedResourceOrigins: this.zTrustedResourceOrigins(),\n      zDownload: false,\n      zOnClose: () => {\n        this._previewRef = null;\n      },\n      zOnDownload: previewFile => this.onDownload(previewFile),\n      zOnRemove: previewFile => this.onRemoveFromPreview(previewFile),\n    });\n\n    this._previewRef = previewRef;\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","import { computed, Directive, ElementRef, inject, input, output } from '@angular/core';\nimport { zTransform } from '@shival99/z-ui/utils';\nimport { ZGalleryPreviewService } from './z-gallery-preview.service';\nimport type { ZGalleryFile, ZGalleryPreviewItemOptions } from './z-gallery.types';\nimport { isPreviewable } from './z-gallery.utils';\n\n@Directive({\n  selector: '[zGalleryPreviewItem], [z-gallery-preview-item]',\n  standalone: true,\n  host: {\n    class: 'z-gallery-preview-item',\n    '[attr.role]': 'hostRole()',\n    '[attr.tabindex]': 'hostTabIndex()',\n    '[attr.aria-disabled]': 'hostAriaDisabled()',\n    '(click)': 'openPreview()',\n    '(keydown.enter)': 'openPreview($event)',\n    '(keydown.space)': 'openPreview($event)',\n  },\n  exportAs: 'zGalleryPreviewItem',\n})\nexport class ZGalleryPreviewItemDirective {\n  public readonly zGalleryPreviewItem = input.required<ZGalleryFile>();\n  public readonly zGalleryPreviewFiles = input<ZGalleryFile[] | null>(null);\n  public readonly zGalleryPreviewOptions = input<ZGalleryPreviewItemOptions>({});\n  public readonly zDisabled = input(false, { transform: zTransform });\n\n  public readonly zOnPreview = output<ZGalleryFile>();\n\n  private readonly _elementRef = inject(ElementRef<HTMLElement>);\n  private readonly _previewService = inject(ZGalleryPreviewService);\n\n  protected readonly hostRole = computed(() => (this._isNativeInteractive() ? null : 'button'));\n  protected readonly hostTabIndex = computed(() => {\n    if (this._isNativeInteractive()) {\n      return null;\n    }\n\n    return this.zDisabled() ? -1 : 0;\n  });\n\n  protected readonly hostAriaDisabled = computed(() => (this.zDisabled() ? true : null));\n\n  protected openPreview(event?: Event): void {\n    if (this.zDisabled()) {\n      return;\n    }\n\n    if (event instanceof KeyboardEvent && this._isNativeInteractive()) {\n      return;\n    }\n\n    const file = this.zGalleryPreviewItem();\n    if (!isPreviewable(file)) {\n      return;\n    }\n\n    if (event instanceof KeyboardEvent) {\n      event.preventDefault();\n    }\n\n    this.zOnPreview.emit(file);\n    this._previewService.open({\n      ...this.zGalleryPreviewOptions(),\n      file,\n      files: this.zGalleryPreviewFiles() ?? undefined,\n    });\n  }\n\n  private _isNativeInteractive(): boolean {\n    const tagName = this._elementRef.nativeElement.tagName.toLowerCase();\n    return tagName === 'button' || tagName === 'a';\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}