@files-preview-app/preview-file 1.1.2 โ†’ 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../core/src/events.ts","../../core/src/detect.ts","../../core/src/utils.ts","../../core/src/toolbar/icons.ts","../../core/src/toolbar/toolbar-controller.ts","../../core/src/thumbnail/thumbnail-panel.ts","../../core/src/engine.ts","../../plugins/pdf/src/index.ts","../../plugins/media/src/index.ts","../../plugins/docx/src/index.ts","../../plugins/excel/src/index.ts","../../plugins/csv/src/index.ts","../../plugins/code/src/index.ts","../../plugins/archive/src/index.ts","../../plugins/markdown/src/index.ts","../../plugins/pptx/src/index.ts","../../plugins/3d/src/index.ts","../src/index.ts","../src/react.tsx"],"names":["DOMPurify","docx","ExcelJS","hljs","unzip","marked","PptxRenderer","THREE","OrbitControls","STLLoader","OBJLoader","FilePreviewViewer","memo","forwardRef","useRef","useImperativeHandle","useEffect","jsx"],"mappings":"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","file":"react.cjs","sourcesContent":["import type { EventHandler, Unsubscribe } from './types';\n\n/**\n * Lightweight typed event emitter for the file preview system.\n * Supports on/off/emit with automatic cleanup.\n */\nexport class EventEmitter {\n private listeners = new Map<string, Set<EventHandler>>();\n\n /**\n * Subscribe to an event.\n * @returns An unsubscribe function.\n */\n on(event: string, handler: EventHandler): Unsubscribe {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(handler);\n\n return () => this.off(event, handler);\n }\n\n /**\n * Unsubscribe from an event.\n */\n off(event: string, handler: EventHandler): void {\n const handlers = this.listeners.get(event);\n if (handlers) {\n handlers.delete(handler);\n if (handlers.size === 0) {\n this.listeners.delete(event);\n }\n }\n }\n\n /**\n * Emit an event with optional payload.\n */\n emit(event: string, data?: unknown): void {\n const handlers = this.listeners.get(event);\n if (handlers) {\n for (const handler of handlers) {\n try {\n handler(data);\n } catch (error) {\n console.error(`[FilePreview] Error in '${event}' handler:`, error);\n }\n }\n }\n }\n\n /**\n * Remove all listeners, optionally for a specific event.\n */\n removeAll(event?: string): void {\n if (event) {\n this.listeners.delete(event);\n } else {\n this.listeners.clear();\n }\n }\n\n /**\n * Get the count of listeners for a specific event.\n */\n listenerCount(event: string): number {\n return this.listeners.get(event)?.size ?? 0;\n }\n}\n","import type { FileSource, FileMetadata, FileInfo } from './types';\n\n/** Magic number signatures for common file formats */\nconst MAGIC_NUMBERS: Array<{ bytes: number[]; mask?: number[]; offset?: number; mime: string }> = [\n { bytes: [0x25, 0x50, 0x44, 0x46], mime: 'application/pdf' }, // %PDF\n { bytes: [0x50, 0x4B, 0x03, 0x04], mime: 'application/zip' }, // PK.. (ZIP/DOCX/XLSX/PPTX)\n { bytes: [0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A], mime: 'image/png' }, // PNG\n { bytes: [0xFF, 0xD8, 0xFF], mime: 'image/jpeg' }, // JPEG\n { bytes: [0x47, 0x49, 0x46, 0x38], mime: 'image/gif' }, // GIF87a/GIF89a\n { bytes: [0x42, 0x4D], mime: 'image/bmp' }, // BMP\n { bytes: [0x00, 0x00, 0x01, 0x00], mime: 'image/x-icon' }, // ICO\n { bytes: [0x49, 0x49, 0x2A, 0x00], mime: 'image/tiff' }, // TIFF (LE)\n { bytes: [0x4D, 0x4D, 0x00, 0x2A], mime: 'image/tiff' }, // TIFF (BE)\n { bytes: [0x1A, 0x45, 0xDF, 0xA3], mime: 'video/webm' }, // WebM/MKV\n { bytes: [0x66, 0x74, 0x79, 0x70], mime: 'video/mp4', offset: 4 }, // MP4 (ftyp)\n { bytes: [0x49, 0x44, 0x33], mime: 'audio/mpeg' }, // MP3 (ID3)\n { bytes: [0xFF, 0xFB], mime: 'audio/mpeg' }, // MP3 (sync)\n { bytes: [0xFF, 0xF3], mime: 'audio/mpeg' }, // MP3 (sync)\n { bytes: [0x4F, 0x67, 0x67, 0x53], mime: 'audio/ogg' }, // OGG\n { bytes: [0x52, 0x49, 0x46, 0x46], mime: 'audio/wav' }, // WAV/RIFF (also WebP)\n { bytes: [0x66, 0x4C, 0x61, 0x43], mime: 'audio/flac' }, // FLAC\n { bytes: [0x7B, 0x5C, 0x72, 0x74, 0x66], mime: 'text/rtf' }, // RTF\n];\n\n/** Extension to MIME type mapping */\nconst EXTENSION_MIME_MAP: Record<string, string> = {\n // Documents\n '.pdf': 'application/pdf',\n '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n '.xls': 'application/vnd.ms-excel',\n '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n '.csv': 'text/csv',\n '.tsv': 'text/tab-separated-values',\n // Images\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.gif': 'image/gif',\n '.webp': 'image/webp',\n '.bmp': 'image/bmp',\n '.svg': 'image/svg+xml',\n '.ico': 'image/x-icon',\n '.tiff': 'image/tiff',\n '.tif': 'image/tiff',\n // Media\n '.mp4': 'video/mp4',\n '.webm': 'video/webm',\n '.ogg': 'audio/ogg',\n '.ogv': 'video/ogg',\n '.mov': 'video/quicktime',\n '.mp3': 'audio/mpeg',\n '.wav': 'audio/wav',\n '.aac': 'audio/aac',\n '.flac': 'audio/flac',\n // Code/Text\n '.txt': 'text/plain',\n '.log': 'text/plain',\n '.json': 'application/json',\n '.xml': 'application/xml',\n '.html': 'text/html',\n '.htm': 'text/html',\n '.css': 'text/css',\n '.js': 'text/javascript',\n '.ts': 'text/typescript',\n '.jsx': 'text/jsx',\n '.tsx': 'text/tsx',\n '.py': 'text/x-python',\n '.java': 'text/x-java',\n '.c': 'text/x-c',\n '.cpp': 'text/x-c++',\n '.h': 'text/x-c',\n '.go': 'text/x-go',\n '.rs': 'text/x-rust',\n '.rb': 'text/x-ruby',\n '.php': 'text/x-php',\n '.sh': 'text/x-shellscript',\n '.bash': 'text/x-shellscript',\n '.sql': 'text/x-sql',\n '.yaml': 'text/yaml',\n '.yml': 'text/yaml',\n '.toml': 'text/toml',\n '.ini': 'text/ini',\n '.conf': 'text/plain',\n '.env': 'text/plain',\n '.md': 'text/markdown',\n '.scss': 'text/x-scss',\n '.less': 'text/x-less',\n '.vue': 'text/x-vue',\n '.svelte': 'text/x-svelte',\n '.dart': 'text/x-dart',\n '.kt': 'text/x-kotlin',\n '.swift': 'text/x-swift',\n '.r': 'text/x-r',\n '.scala': 'text/x-scala',\n '.lua': 'text/x-lua',\n '.perl': 'text/x-perl',\n '.pl': 'text/x-perl',\n};\n\n/**\n * Detect MIME type from file buffer magic bytes.\n */\nexport function detectMagicBytes(buffer: ArrayBuffer): string | null {\n const bytes = new Uint8Array(buffer.slice(0, 16));\n\n for (const sig of MAGIC_NUMBERS) {\n const offset = sig.offset ?? 0;\n let match = true;\n for (let i = 0; i < sig.bytes.length; i++) {\n const actual = bytes[offset + i];\n const expected = sig.bytes[i];\n const mask = sig.mask?.[i] ?? 0xFF;\n if ((actual & mask) !== expected) {\n match = false;\n break;\n }\n }\n if (match) {\n // Special case: RIFF could be WAV or WebP\n if (sig.mime === 'audio/wav' && bytes.length >= 12) {\n const format = String.fromCharCode(bytes[8], bytes[9], bytes[10], bytes[11]);\n if (format === 'WEBP') return 'image/webp';\n if (format === 'AVI ') return 'video/x-msvideo';\n return 'audio/wav';\n }\n return sig.mime;\n }\n }\n\n return null;\n}\n\n/**\n * Detect OOXML sub-type (docx vs xlsx vs pptx) by checking ZIP entry names.\n * All OOXML formats use ZIP container with PK header.\n */\nexport function detectOoxmlType(buffer: ArrayBuffer): string | null {\n const text = new TextDecoder('ascii', { fatal: false }).decode(\n new Uint8Array(buffer.slice(0, 4000))\n );\n\n if (text.includes('word/')) {\n return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n }\n if (text.includes('xl/')) {\n return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n }\n if (text.includes('ppt/')) {\n return 'application/vnd.openxmlformats-officedocument.presentationml.presentation';\n }\n\n return 'application/zip';\n}\n\n/**\n * Extract file extension from a filename or URL.\n */\nexport function extractExtension(nameOrUrl: string): string | undefined {\n try {\n // Try as URL first\n const url = new URL(nameOrUrl);\n const pathname = url.pathname;\n const dotIndex = pathname.lastIndexOf('.');\n if (dotIndex !== -1) {\n return pathname.slice(dotIndex).toLowerCase().split('?')[0];\n }\n } catch {\n // Not a URL, try as filename\n const dotIndex = nameOrUrl.lastIndexOf('.');\n if (dotIndex !== -1) {\n return nameOrUrl.slice(dotIndex).toLowerCase();\n }\n }\n return undefined;\n}\n\n/**\n * Get MIME type from file extension.\n */\nexport function mimeFromExtension(extension: string): string | undefined {\n return EXTENSION_MIME_MAP[extension.toLowerCase()];\n}\n\n/**\n * Convert any FileSource to ArrayBuffer.\n */\nexport async function sourceToArrayBuffer(\n source: FileSource,\n signal?: AbortSignal\n): Promise<{ buffer: ArrayBuffer; metadata: FileMetadata }> {\n let buffer: ArrayBuffer;\n const metadata: FileMetadata = {};\n\n if (typeof source === 'string') {\n // URL string\n metadata.name = source.split('/').pop()?.split('?')[0];\n metadata.extension = extractExtension(source);\n\n const response = await fetch(source, { signal });\n if (!response.ok) {\n throw new Error(`Failed to fetch file: ${response.status} ${response.statusText}`);\n }\n metadata.mimeType = response.headers.get('content-type') ?? undefined;\n buffer = await response.arrayBuffer();\n } else if (source instanceof File) {\n metadata.name = source.name;\n metadata.size = source.size;\n metadata.mimeType = source.type || undefined;\n metadata.extension = extractExtension(source.name);\n buffer = await source.arrayBuffer();\n } else if (source instanceof Blob) {\n metadata.size = source.size;\n metadata.mimeType = source.type || undefined;\n buffer = await source.arrayBuffer();\n } else if (source instanceof ArrayBuffer) {\n buffer = source;\n } else if (source instanceof Uint8Array) {\n buffer = source.buffer.slice(\n source.byteOffset,\n source.byteOffset + source.byteLength\n ) as ArrayBuffer;\n } else {\n throw new Error('Unsupported file source type');\n }\n\n metadata.size = metadata.size ?? buffer.byteLength;\n\n // Detect MIME from magic bytes if not already known\n const magicMime = detectMagicBytes(buffer);\n if (magicMime) {\n // Special handling for ZIP-based OOXML\n if (magicMime === 'application/zip') {\n const ooxmlMime = detectOoxmlType(buffer);\n if (ooxmlMime && ooxmlMime !== 'application/zip') {\n metadata.mimeType = ooxmlMime;\n // Set extension from OOXML type\n if (ooxmlMime.includes('wordprocessing')) metadata.extension = metadata.extension ?? '.docx';\n else if (ooxmlMime.includes('spreadsheet')) metadata.extension = metadata.extension ?? '.xlsx';\n else if (ooxmlMime.includes('presentation')) metadata.extension = metadata.extension ?? '.pptx';\n } else {\n metadata.mimeType = metadata.mimeType ?? magicMime;\n }\n } else {\n metadata.mimeType = magicMime;\n }\n }\n\n // Fallback: derive MIME from extension\n if (!metadata.mimeType && metadata.extension) {\n metadata.mimeType = mimeFromExtension(metadata.extension);\n }\n\n return { buffer, metadata };\n}\n","import DOMPurify from 'dompurify';\n\n/**\n * Sanitize HTML string using DOMPurify to prevent XSS.\n */\nexport function sanitizeHTML(html: string): string {\n return DOMPurify.sanitize(html, {\n USE_PROFILES: { html: true },\n });\n}\n\n/**\n * Sanitize SVG string using DOMPurify.\n */\nexport function sanitizeSVG(svg: string): string {\n return DOMPurify.sanitize(svg, {\n USE_PROFILES: { svg: true, svgFilters: true },\n });\n}\n\n/**\n * Download a file from an ArrayBuffer.\n */\nexport function downloadFile(buffer: ArrayBuffer, filename: string, mimeType?: string): void {\n const blob = new Blob([buffer], { type: mimeType ?? 'application/octet-stream' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n link.style.display = 'none';\n document.body.appendChild(link);\n link.click();\n // Cleanup\n setTimeout(() => {\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n }, 100);\n}\n\n/**\n * Print an HTML element by opening a print window.\n */\nexport function printElement(element: HTMLElement, title?: string): void {\n const printWindow = window.open('', '_blank');\n if (!printWindow) {\n console.warn('[FilePreview] Could not open print window. Pop-ups may be blocked.');\n return;\n }\n\n const styles = Array.from(document.querySelectorAll('style, link[rel=\"stylesheet\"]'))\n .map(el => el.outerHTML)\n .join('\\n');\n\n printWindow.document.write(`\n <!DOCTYPE html>\n <html>\n <head>\n <title>${title ?? 'Print Preview'}</title>\n ${styles}\n <style>\n @media print {\n body { margin: 0; padding: 16px; }\n }\n </style>\n </head>\n <body>\n ${element.innerHTML}\n </body>\n </html>\n `);\n printWindow.document.close();\n printWindow.focus();\n printWindow.print();\n printWindow.close();\n}\n\n/**\n * Format file size in human-readable format.\n */\nexport function formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 B';\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\n const size = bytes / Math.pow(1024, i);\n return `${size.toFixed(i > 0 ? 1 : 0)} ${units[i]}`;\n}\n\n/**\n * Debounce a function call.\n */\nexport function debounce<T extends (...args: unknown[]) => void>(\n fn: T,\n delay: number\n): (...args: Parameters<T>) => void {\n let timer: ReturnType<typeof setTimeout> | undefined;\n return (...args: Parameters<T>) => {\n clearTimeout(timer);\n timer = setTimeout(() => fn(...args), delay);\n };\n}\n\n/**\n * Clamp a number between min and max.\n */\nexport function clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Create a DOM element with optional attributes and children.\n */\nexport function createElement<K extends keyof HTMLElementTagNameMap>(\n tag: K,\n attrs?: Record<string, string>,\n ...children: (string | Node)[]\n): HTMLElementTagNameMap[K] {\n const el = document.createElement(tag);\n if (attrs) {\n for (const [key, value] of Object.entries(attrs)) {\n if (key === 'className') {\n el.className = value;\n } else {\n el.setAttribute(key, value);\n }\n }\n }\n for (const child of children) {\n if (typeof child === 'string') {\n el.appendChild(document.createTextNode(child));\n } else {\n el.appendChild(child);\n }\n }\n return el;\n}\n","export const ICON_ZOOM_IN = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line><line x1=\"11\" y1=\"8\" x2=\"11\" y2=\"14\"></line><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"></line></svg>`;\nexport const ICON_ZOOM_OUT = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"></line></svg>`;\nexport const ICON_FIT_PAGE = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"15 3 21 3 21 9\"></polyline><polyline points=\"9 21 3 21 3 15\"></polyline><line x1=\"21\" y1=\"3\" x2=\"14\" y2=\"10\"></line><line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\"></line></svg>`;\nexport const ICON_ROTATE_CW = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"23 4 23 10 17 10\"></polyline><path d=\"M20.49 15a9 9 0 1 1-2.12-9.36L23 10\"></path></svg>`;\nexport const ICON_ROTATE_CCW = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"1 4 1 10 7 10\"></polyline><path d=\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\"></path></svg>`;\nexport const ICON_DOWNLOAD = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path><polyline points=\"7 10 12 15 17 10\"></polyline><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line></svg>`;\nexport const ICON_PRINT = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 6 2 18 2 18 9\"></polyline><path d=\"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2\"></path><rect x=\"6\" y=\"14\" width=\"12\" height=\"8\"></rect></svg>`;\nexport const ICON_PAGE_PREV = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"15 18 9 12 15 6\"></polyline></svg>`;\nexport const ICON_PAGE_NEXT = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"9 18 15 12 9 6\"></polyline></svg>`;\nexport const ICON_PLAY = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"5 3 19 12 5 21 5 3\"></polygon></svg>`;\nexport const ICON_PAUSE = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"6\" y=\"4\" width=\"4\" height=\"16\"></rect><rect x=\"14\" y=\"4\" width=\"4\" height=\"16\"></rect></svg>`;\nexport const ICON_THUMBNAILS = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"></rect><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"></rect><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"></rect><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"></rect></svg>`;\nexport const ICON_CLOSE = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line></svg>`;\nexport const ICON_FULLSCREEN = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"></path></svg>`;\nexport const ICON_CHEVRON_LEFT = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"15 18 9 12 15 6\"></polyline></svg>`;\nexport const ICON_CHEVRON_RIGHT = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"9 18 15 12 9 6\"></polyline></svg>`;\n","import './toolbar.css';\nimport { createElement, sanitizeSVG } from '../utils';\nimport type { ToolbarAction, ToolbarGroup } from '../types';\nimport * as icons from './icons';\n\nexport class ToolbarController {\n private el: HTMLElement;\n private toolbarEl: HTMLElement;\n private actions: ToolbarAction[] = [];\n\n constructor(container: HTMLElement) {\n this.el = container;\n this.toolbarEl = createElement('div', { className: 'fp-toolbar' });\n this.el.appendChild(this.toolbarEl);\n }\n\n update(actions: ToolbarAction[]): void {\n this.actions = actions;\n this.render();\n }\n\n show(): void {\n this.el.style.display = 'block';\n }\n\n hide(): void {\n this.el.style.display = 'none';\n }\n\n destroy(): void {\n this.el.innerHTML = '';\n }\n\n private render(): void {\n this.toolbarEl.innerHTML = '';\n\n const groups: Record<ToolbarGroup, ToolbarAction[]> = {\n navigation: [],\n zoom: [],\n view: [],\n actions: []\n };\n\n for (const action of this.actions) {\n if (groups[action.group]) {\n groups[action.group].push(action);\n }\n }\n\n const order: ToolbarGroup[] = ['navigation', 'zoom', 'view', 'actions'];\n let isFirstGroup = true;\n\n for (const group of order) {\n const groupActions = groups[group];\n if (groupActions.length === 0) continue;\n\n if (!isFirstGroup) {\n this.toolbarEl.appendChild(createElement('div', { className: 'fp-toolbar-separator' }));\n }\n isFirstGroup = false;\n\n const groupEl = createElement('div', { className: 'fp-toolbar-group' });\n\n for (const action of groupActions) {\n if (action.type === 'separator') {\n groupEl.appendChild(createElement('div', { className: 'fp-toolbar-separator' }));\n } else if (action.type === 'page-nav') {\n const prevBtn = this.createButton(\n 'prev', icons.ICON_PAGE_PREV, 'Previous Page',\n () => action.execute('prev')\n );\n const nextBtn = this.createButton(\n 'next', icons.ICON_PAGE_NEXT, 'Next Page',\n () => action.execute('next')\n );\n const input = createElement('input', {\n className: 'fp-toolbar-input',\n type: 'number',\n value: (action.value ?? 1).toString(),\n min: '1',\n max: (action.max ?? 1).toString()\n }) as HTMLInputElement;\n \n input.addEventListener('change', () => {\n action.execute('go', parseInt(input.value, 10));\n });\n \n const label = createElement('span', { className: 'fp-toolbar-label' }, ` / ${action.max ?? 1}`);\n \n groupEl.appendChild(prevBtn);\n groupEl.appendChild(input);\n groupEl.appendChild(label);\n groupEl.appendChild(nextBtn);\n } else if (action.type === 'range') {\n const input = createElement('input', {\n type: 'range',\n min: (action.min ?? 0).toString(),\n max: (action.max ?? 100).toString(),\n step: (action.step ?? 1).toString(),\n value: (action.value ?? 50).toString()\n }) as HTMLInputElement;\n input.addEventListener('input', () => {\n action.execute(parseFloat(input.value));\n });\n groupEl.appendChild(input);\n } else {\n const btn = this.createButton(\n action.id, action.icon, action.label,\n () => action.execute()\n );\n if (action.enabled === false) btn.disabled = true;\n if (action.active) btn.classList.add('active');\n groupEl.appendChild(btn);\n }\n }\n\n this.toolbarEl.appendChild(groupEl);\n }\n }\n\n private createButton(id: string, iconHtml: string, title: string, onClick: () => void): HTMLButtonElement {\n const btn = createElement('button', {\n className: 'fp-toolbar-btn',\n title,\n type: 'button',\n 'data-action-id': id\n }) as HTMLButtonElement;\n \n if (iconHtml.startsWith('<svg')) {\n btn.innerHTML = sanitizeSVG(iconHtml);\n } else {\n btn.textContent = iconHtml; \n }\n \n btn.addEventListener('click', onClick);\n return btn;\n }\n}\n","import { createElement } from '../utils';\nimport type { Thumbnail } from '../types';\n\nexport class ThumbnailPanel {\n private el: HTMLElement;\n private panelEl: HTMLElement;\n private thumbnails: Thumbnail[] = [];\n private onSelect?: (index: number) => void;\n private activeIndex: number = 0;\n\n constructor(container: HTMLElement) {\n this.el = container;\n this.panelEl = createElement('div', { className: 'fp-thumbnail-panel hidden' });\n this.el.appendChild(this.panelEl);\n }\n\n update(thumbnails: Thumbnail[], onSelect: (index: number) => void): void {\n this.thumbnails = thumbnails;\n this.onSelect = onSelect;\n this.render();\n }\n\n setActive(index: number): void {\n this.activeIndex = index;\n const items = this.panelEl.querySelectorAll('.fp-thumbnail-item');\n items.forEach((item, i) => {\n if (i === index) {\n item.classList.add('active');\n } else {\n item.classList.remove('active');\n }\n });\n }\n\n show(): void {\n this.panelEl.classList.remove('hidden');\n }\n\n hide(): void {\n this.panelEl.classList.add('hidden');\n }\n\n toggle(): void {\n this.panelEl.classList.toggle('hidden');\n }\n\n destroy(): void {\n this.el.innerHTML = '';\n }\n\n private async render(): Promise<void> {\n this.panelEl.innerHTML = '';\n\n for (let i = 0; i < this.thumbnails.length; i++) {\n const thumb = this.thumbnails[i];\n const itemEl = createElement('div', { className: 'fp-thumbnail-item' });\n if (i === this.activeIndex) {\n itemEl.classList.add('active');\n }\n\n itemEl.addEventListener('click', () => {\n this.setActive(i);\n this.onSelect?.(i);\n });\n\n const canvas = createElement('canvas', { width: '150', height: '200' }) as HTMLCanvasElement;\n const label = createElement('span', { className: 'fp-thumbnail-label' }, thumb.label);\n\n itemEl.appendChild(canvas);\n itemEl.appendChild(label);\n this.panelEl.appendChild(itemEl);\n\n try {\n await thumb.render(canvas);\n } catch (err) {\n console.error(`[FilePreview] Error rendering thumbnail ${i}:`, err);\n }\n }\n }\n}\n","import { EventEmitter } from './events';\nimport { sourceToArrayBuffer } from './detect';\nimport { ToolbarController } from './toolbar/toolbar-controller';\nimport { ThumbnailPanel } from './thumbnail/thumbnail-panel';\nimport type {\n FileSource,\n PreviewPlugin,\n PreviewInstance,\n PreviewViewerOptions,\n FileInfo,\n EventHandler,\n Unsubscribe,\n} from './types';\n\n/**\n * Main file preview viewer engine.\n * Manages plugins, rendering lifecycle, toolbar, and thumbnails.\n */\nexport class FilePreviewViewer {\n private plugins: PreviewPlugin[] = [];\n private activeInstance: PreviewInstance | null = null;\n private abortController: AbortController | null = null;\n private eventEmitter = new EventEmitter();\n private toolbar: ToolbarController | null = null;\n private thumbnailPanel: ThumbnailPanel | null = null;\n private wrapperEl: HTMLElement | null = null;\n private contentEl: HTMLElement | null = null;\n private currentBuffer: ArrayBuffer | null = null;\n private currentMetadata: import('./types').FileMetadata | null = null;\n\n /**\n * Register a preview plugin.\n */\n registerPlugin(plugin: PreviewPlugin): this {\n this.plugins.push(plugin);\n // Sort by weight descending (higher weight = higher priority)\n this.plugins.sort((a, b) => (b.weight ?? 0) - (a.weight ?? 0));\n return this;\n }\n\n /**\n * Register multiple plugins at once.\n */\n registerPlugins(plugins: PreviewPlugin[]): this {\n for (const plugin of plugins) {\n this.registerPlugin(plugin);\n }\n return this;\n }\n\n /**\n * Preview a file in the given container element.\n */\n async preview(\n container: HTMLElement,\n source: FileSource,\n options: PreviewViewerOptions = {}\n ): Promise<PreviewInstance> {\n // 1. Abort any in-flight operation\n this.abort();\n this.abortController = new AbortController();\n const { signal } = this.abortController;\n\n // 2. Destroy existing instance\n this.destroyInstance();\n\n // 3. Setup wrapper DOM structure\n this.setupDOM(container, options);\n\n // 4. Emit loading event\n this.eventEmitter.emit('loading', { source });\n this.showLoading();\n\n try {\n // 5. Normalize source to ArrayBuffer + metadata\n const { buffer, metadata } = await sourceToArrayBuffer(source, signal);\n this.currentBuffer = buffer;\n this.currentMetadata = metadata;\n\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError');\n\n // 6. Find matching plugin\n const fileInfo: FileInfo = { metadata, buffer };\n const matchedPlugin = await this.findPlugin(fileInfo);\n\n if (!matchedPlugin) {\n throw new Error(\n `Unsupported file type: ${metadata.extension ?? metadata.mimeType ?? 'unknown'}`\n );\n }\n\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError');\n\n // 7. Clear content area and render\n if (this.contentEl) {\n this.contentEl.innerHTML = '';\n }\n\n const instance = await matchedPlugin.render({\n container: this.contentEl!,\n source,\n metadata,\n buffer,\n options,\n signal,\n emit: (event, payload) => this.eventEmitter.emit(event, payload),\n });\n\n this.activeInstance = instance;\n\n // 8. Setup toolbar with plugin's actions\n if (options.showToolbar !== false && this.toolbar) {\n const actions = matchedPlugin.getToolbarActions(instance);\n this.toolbar.update(actions);\n this.toolbar.show();\n }\n\n // 9. Setup thumbnails if plugin supports them\n if (instance.getThumbnails && this.thumbnailPanel) {\n const thumbnails = await Promise.resolve(instance.getThumbnails());\n if (thumbnails && thumbnails.length > 0) {\n this.thumbnailPanel.update(thumbnails, (index) => {\n instance.goToPage?.(index + 1);\n });\n if (options.showThumbnails) {\n this.thumbnailPanel.show();\n }\n }\n }\n\n this.hideLoading();\n this.eventEmitter.emit('loaded', { metadata, plugin: matchedPlugin.id });\n\n return instance;\n } catch (error: unknown) {\n this.hideLoading();\n if (error instanceof DOMException && error.name === 'AbortError') {\n throw error;\n }\n this.showError(error instanceof Error ? error.message : 'Failed to preview file');\n this.eventEmitter.emit('error', error);\n throw error;\n }\n }\n\n /**\n * Subscribe to viewer events.\n */\n on(event: string, handler: EventHandler): Unsubscribe {\n return this.eventEmitter.on(event, handler);\n }\n\n /**\n * Destroy the viewer and clean up all resources.\n */\n destroy(): void {\n this.abort();\n this.destroyInstance();\n this.toolbar?.destroy();\n this.thumbnailPanel?.destroy();\n this.eventEmitter.emit('destroy', null);\n this.eventEmitter.removeAll();\n\n if (this.wrapperEl?.parentNode) {\n this.wrapperEl.parentNode.removeChild(this.wrapperEl);\n }\n this.wrapperEl = null;\n this.contentEl = null;\n this.toolbar = null;\n this.thumbnailPanel = null;\n this.currentBuffer = null;\n this.currentMetadata = null;\n }\n\n /**\n * Get the currently active preview instance.\n */\n getInstance(): PreviewInstance | null {\n return this.activeInstance;\n }\n\n // --- Private methods ---\n\n private abort(): void {\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = null;\n }\n }\n\n private destroyInstance(): void {\n if (this.activeInstance) {\n this.activeInstance.destroy();\n this.activeInstance = null;\n }\n }\n\n private async findPlugin(fileInfo: FileInfo): Promise<PreviewPlugin | null> {\n for (const plugin of this.plugins) {\n const result = plugin.supports(fileInfo);\n const supports = result instanceof Promise ? await result : result;\n if (supports) return plugin;\n }\n return null;\n }\n\n private setupDOM(container: HTMLElement, options: PreviewViewerOptions): void {\n // Only setup once, or re-setup if container changed\n if (this.wrapperEl?.parentNode === container) return;\n\n // Clean up old wrapper\n if (this.wrapperEl?.parentNode) {\n this.wrapperEl.parentNode.removeChild(this.wrapperEl);\n }\n\n // Create wrapper structure\n const themeClass = options.theme === 'dark' ? 'fp-theme-dark' : '';\n const toolbarPos = options.toolbarPosition ?? 'top';\n\n this.wrapperEl = document.createElement('div');\n this.wrapperEl.className = `fp-viewer ${themeClass} ${options.className ?? ''}`.trim();\n\n // Toolbar container\n const toolbarEl = document.createElement('div');\n toolbarEl.className = 'fp-toolbar-container';\n\n // Content area (where the plugin renders)\n this.contentEl = document.createElement('div');\n this.contentEl.className = 'fp-content';\n\n // Thumbnail panel\n const thumbnailEl = document.createElement('div');\n thumbnailEl.className = 'fp-thumbnail-container';\n\n // Assemble\n const bodyEl = document.createElement('div');\n bodyEl.className = 'fp-body';\n bodyEl.appendChild(thumbnailEl);\n bodyEl.appendChild(this.contentEl);\n\n if (toolbarPos === 'top') {\n this.wrapperEl.appendChild(toolbarEl);\n this.wrapperEl.appendChild(bodyEl);\n } else {\n this.wrapperEl.appendChild(bodyEl);\n this.wrapperEl.appendChild(toolbarEl);\n }\n\n container.innerHTML = '';\n container.appendChild(this.wrapperEl);\n\n // Initialize toolbar and thumbnail controllers\n this.toolbar = new ToolbarController(toolbarEl);\n this.thumbnailPanel = new ThumbnailPanel(thumbnailEl);\n }\n\n private showLoading(): void {\n if (!this.contentEl) return;\n const loader = document.createElement('div');\n loader.className = 'fp-loading';\n loader.innerHTML = '<div class=\"fp-spinner\"></div><span>Loading preview...</span>';\n this.contentEl.appendChild(loader);\n }\n\n private hideLoading(): void {\n if (!this.contentEl) return;\n const loader = this.contentEl.querySelector('.fp-loading');\n if (loader) loader.remove();\n }\n\n private showError(message: string): void {\n if (!this.contentEl) return;\n this.contentEl.innerHTML = '';\n const errorEl = document.createElement('div');\n errorEl.className = 'fp-error';\n errorEl.innerHTML = `\n <div class=\"fp-error-icon\">โš ๏ธ</div>\n <div class=\"fp-error-message\">${message}</div>\n `;\n this.contentEl.appendChild(errorEl);\n }\n}\n","import type { \n FileInfo, \n RenderContext, \n ToolbarAction, \n PreviewPlugin, \n PreviewInstance, \n Thumbnail \n} from '@patel.sumit51/core';\n\nexport class PdfPlugin implements PreviewPlugin {\n id = 'pdf';\n name = 'PDF Preview';\n extensions = ['.pdf'];\n mimeTypes = ['application/pdf'];\n weight = 100;\n\n supports(file: FileInfo): boolean {\n const ext = file.metadata.extension?.toLowerCase();\n const mime = file.metadata.mimeType?.toLowerCase();\n return ext === '.pdf' || mime === 'application/pdf';\n }\n\n getToolbarActions(instance: PreviewInstance): ToolbarAction[] {\n return [\n {\n id: 'zoom-out',\n icon: 'zoom-out',\n label: 'Zoom Out',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomOut?.();\n }\n },\n {\n id: 'zoom-in',\n icon: 'zoom-in',\n label: 'Zoom In',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomIn?.();\n }\n },\n {\n id: 'fit-page',\n icon: 'fit-page',\n label: 'Fit to Page',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.fitToPage?.();\n }\n },\n {\n id: 'rotate-cw',\n icon: 'rotate-cw',\n label: 'Rotate',\n type: 'button',\n group: 'view',\n execute: () => {\n instance.rotateCW?.();\n }\n },\n {\n id: 'page-nav',\n icon: 'page-nav',\n label: 'Page Navigation',\n type: 'page-nav',\n group: 'navigation',\n execute: (page?: unknown) => {\n if (typeof page === 'number') instance.goToPage?.(page);\n }\n },\n {\n id: 'download',\n icon: 'download',\n label: 'Download',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.download?.();\n }\n },\n {\n id: 'print',\n icon: 'print',\n label: 'Print',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.print?.();\n }\n }\n ];\n }\n\n async render(ctx: RenderContext): Promise<PreviewInstance> {\n const blob = new Blob([ctx.buffer], { type: 'application/pdf' });\n const url = URL.createObjectURL(blob);\n \n const wrapper = document.createElement('div');\n wrapper.style.width = '100%';\n wrapper.style.height = '100%';\n wrapper.style.overflow = 'hidden';\n wrapper.style.display = 'flex';\n wrapper.style.justifyContent = 'center';\n wrapper.style.alignItems = 'center';\n\n const iframe = document.createElement('iframe');\n iframe.src = url;\n iframe.style.width = '100%';\n iframe.style.height = '100%';\n iframe.style.border = 'none';\n \n wrapper.appendChild(iframe);\n ctx.container.appendChild(wrapper);\n \n let currentPage = 1;\n let currentZoom = 1.0;\n let rotation = 0;\n\n const cleanup = () => {\n URL.revokeObjectURL(url);\n wrapper.remove();\n ctx.container.innerHTML = '';\n };\n\n ctx.signal.addEventListener('abort', cleanup);\n\n return {\n destroy: cleanup,\n zoomIn: () => {\n currentZoom += 0.1;\n iframe.style.transform = `scale(${currentZoom}) rotate(${rotation}deg)`;\n },\n zoomOut: () => {\n currentZoom = Math.max(0.2, currentZoom - 0.1);\n iframe.style.transform = `scale(${currentZoom}) rotate(${rotation}deg)`;\n },\n getZoom: () => currentZoom,\n setZoom: (level: number) => {\n currentZoom = level;\n iframe.style.transform = `scale(${currentZoom}) rotate(${rotation}deg)`;\n },\n fitToPage: () => {\n currentZoom = 1.0;\n iframe.style.transform = `scale(1) rotate(${rotation}deg)`;\n },\n rotateCW: () => {\n rotation = (rotation + 90) % 360;\n iframe.style.transform = `scale(${currentZoom}) rotate(${rotation}deg)`;\n },\n rotateCCW: () => {\n rotation = (rotation - 90 + 360) % 360;\n iframe.style.transform = `scale(${currentZoom}) rotate(${rotation}deg)`;\n },\n getRotation: () => rotation,\n goToPage: (page: number) => {\n currentPage = page;\n // In iframe viewer, appending #page=N to the hash navigates in native PDF viewer\n iframe.src = `${url}#page=${page}`;\n },\n getCurrentPage: () => currentPage,\n download: () => {\n const a = document.createElement('a');\n a.href = url;\n a.download = ctx.metadata.name || 'document.pdf';\n a.click();\n },\n print: () => {\n iframe.contentWindow?.print();\n },\n getThumbnails: async (): Promise<Thumbnail[]> => {\n return [\n {\n index: 1,\n label: 'Page 1',\n render: async (canvas: HTMLCanvasElement) => {\n const context = canvas.getContext('2d');\n if (context) {\n context.fillStyle = '#fff';\n context.fillRect(0, 0, canvas.width, canvas.height);\n context.fillStyle = '#333';\n context.font = '12px sans-serif';\n context.fillText('PDF Preview', 10, 20);\n }\n }\n }\n ];\n }\n };\n }\n}\n\nexport function pdfPlugin(): PdfPlugin {\n return new PdfPlugin();\n}\n\nexport default PdfPlugin;\n","import type { \n FileInfo, \n RenderContext, \n ToolbarAction, \n PreviewPlugin, \n PreviewInstance \n} from '@patel.sumit51/core';\n\nconst IMAGE_EXTS = ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.svg'];\nconst VIDEO_EXTS = ['.mp4', '.webm', '.ogg'];\nconst AUDIO_EXTS = ['.mp3', '.wav', '.ogg'];\n\nexport class MediaPlugin implements PreviewPlugin {\n id = 'media';\n name = 'Media Preview';\n extensions = [...IMAGE_EXTS, ...VIDEO_EXTS, ...AUDIO_EXTS];\n mimeTypes = [\n 'image/jpeg', 'image/png', 'image/gif', 'image/webp', 'image/svg+xml',\n 'video/mp4', 'video/webm', 'video/ogg',\n 'audio/mpeg', 'audio/wav', 'audio/ogg'\n ];\n weight = 90;\n\n supports(file: FileInfo): boolean {\n const ext = file.metadata.extension?.toLowerCase() || '';\n const mime = file.metadata.mimeType?.toLowerCase() || '';\n \n return this.extensions.includes(ext) || \n this.mimeTypes.some(m => mime.startsWith(m.split('/')[0]));\n }\n\n getToolbarActions(instance: PreviewInstance): ToolbarAction[] {\n const actions: ToolbarAction[] = [];\n \n if (instance.zoomIn) {\n actions.push(\n {\n id: 'zoom-out',\n icon: 'zoom-out',\n label: 'Zoom Out',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomOut?.();\n }\n },\n {\n id: 'zoom-in',\n icon: 'zoom-in',\n label: 'Zoom In',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomIn?.();\n }\n },\n {\n id: 'fit-page',\n icon: 'fit-page',\n label: 'Fit to Page',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.fitToPage?.();\n }\n },\n {\n id: 'rotate-cw',\n icon: 'rotate-cw',\n label: 'Rotate',\n type: 'button',\n group: 'view',\n execute: () => {\n instance.rotateCW?.();\n }\n }\n );\n }\n \n if (instance.play) {\n actions.push(\n {\n id: 'play',\n icon: 'play',\n label: 'Play',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.play?.();\n }\n },\n {\n id: 'pause',\n icon: 'pause',\n label: 'Pause',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.pause?.();\n }\n }\n );\n }\n\n actions.push({\n id: 'download',\n icon: 'download',\n label: 'Download',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.download?.();\n }\n });\n\n if (instance.print) {\n actions.push({\n id: 'print',\n icon: 'print',\n label: 'Print',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.print?.();\n }\n });\n }\n\n return actions;\n }\n\n async render(ctx: RenderContext): Promise<PreviewInstance> {\n const mimeType = ctx.metadata.mimeType || 'application/octet-stream';\n const isImage = mimeType.startsWith('image/') || IMAGE_EXTS.includes(ctx.metadata.extension || '');\n const isVideo = mimeType.startsWith('video/') || VIDEO_EXTS.includes(ctx.metadata.extension || '');\n const isAudio = mimeType.startsWith('audio/') || AUDIO_EXTS.includes(ctx.metadata.extension || '');\n \n let url = '';\n \n if (ctx.metadata.extension === '.svg' || mimeType === 'image/svg+xml') {\n const decoder = new TextDecoder('utf-8');\n const svgText = decoder.decode(ctx.buffer);\n const blob = new Blob([svgText], { type: 'image/svg+xml' });\n url = URL.createObjectURL(blob);\n } else {\n const blob = new Blob([ctx.buffer], { type: mimeType });\n url = URL.createObjectURL(blob);\n }\n \n let element: HTMLElement;\n let currentZoom = 1.0;\n let rotation = 0;\n let mediaElement: HTMLMediaElement | null = null;\n \n if (isImage) {\n const img = document.createElement('img');\n img.src = url;\n img.style.maxWidth = '100%';\n img.style.maxHeight = '100%';\n img.style.objectFit = 'contain';\n img.style.transition = 'transform 0.2s ease';\n element = img;\n } else if (isVideo) {\n const video = document.createElement('video');\n video.src = url;\n video.controls = true;\n video.style.maxWidth = '100%';\n video.style.maxHeight = '100%';\n element = video;\n mediaElement = video;\n } else if (isAudio) {\n const audio = document.createElement('audio');\n audio.src = url;\n audio.controls = true;\n element = audio;\n mediaElement = audio;\n } else {\n element = document.createElement('div');\n element.textContent = 'Unsupported media type';\n }\n \n ctx.container.style.display = 'flex';\n ctx.container.style.alignItems = 'center';\n ctx.container.style.justifyContent = 'center';\n ctx.container.style.overflow = 'hidden';\n ctx.container.appendChild(element);\n\n const applyTransform = () => {\n element.style.transform = `scale(${currentZoom}) rotate(${rotation}deg)`;\n };\n\n const cleanup = () => {\n if (url) URL.revokeObjectURL(url);\n element.remove();\n ctx.container.innerHTML = '';\n };\n\n ctx.signal.addEventListener('abort', cleanup);\n\n return {\n destroy: cleanup,\n zoomIn: isImage ? () => {\n currentZoom += 0.1;\n applyTransform();\n } : undefined,\n zoomOut: isImage ? () => {\n currentZoom = Math.max(0.1, currentZoom - 0.1);\n applyTransform();\n } : undefined,\n getZoom: isImage ? () => currentZoom : undefined,\n setZoom: isImage ? (level: number) => {\n currentZoom = level;\n applyTransform();\n } : undefined,\n fitToPage: isImage ? () => {\n currentZoom = 1.0;\n rotation = 0;\n applyTransform();\n } : undefined,\n rotateCW: isImage || isVideo ? () => {\n rotation = (rotation + 90) % 360;\n applyTransform();\n } : undefined,\n rotateCCW: isImage || isVideo ? () => {\n rotation = (rotation - 90 + 360) % 360;\n applyTransform();\n } : undefined,\n getRotation: () => rotation,\n play: mediaElement ? () => mediaElement?.play() : undefined,\n pause: mediaElement ? () => mediaElement?.pause() : undefined,\n isPlaying: mediaElement ? () => !mediaElement?.paused : undefined,\n download: () => {\n const a = document.createElement('a');\n a.href = url;\n a.download = ctx.metadata.name || 'media';\n a.click();\n },\n print: isImage ? () => {\n window.print();\n } : undefined\n };\n }\n}\n\nexport function mediaPlugin(): MediaPlugin {\n return new MediaPlugin();\n}\n\nexport default MediaPlugin;\n","import type { \n FileInfo, \n RenderContext, \n ToolbarAction, \n PreviewPlugin, \n PreviewInstance \n} from '@patel.sumit51/core';\nimport * as docx from 'docx-preview';\n\nexport class DocxPlugin implements PreviewPlugin {\n id = 'docx';\n name = 'Word Document Preview';\n extensions = ['.docx'];\n mimeTypes = ['application/vnd.openxmlformats-officedocument.wordprocessingml.document'];\n weight = 80;\n\n supports(file: FileInfo): boolean {\n const ext = file.metadata.extension?.toLowerCase();\n const mime = file.metadata.mimeType?.toLowerCase();\n return ext === '.docx' || this.mimeTypes.includes(mime || '');\n }\n\n getToolbarActions(instance: PreviewInstance): ToolbarAction[] {\n return [\n {\n id: 'zoom-out',\n icon: 'zoom-out',\n label: 'Zoom Out',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomOut?.();\n }\n },\n {\n id: 'zoom-in',\n icon: 'zoom-in',\n label: 'Zoom In',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomIn?.();\n }\n },\n {\n id: 'fit-page',\n icon: 'fit-page',\n label: 'Fit to Page',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.fitToPage?.();\n }\n },\n {\n id: 'download',\n icon: 'download',\n label: 'Download',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.download?.();\n }\n },\n {\n id: 'print',\n icon: 'print',\n label: 'Print',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.print?.();\n }\n }\n ];\n }\n\n async render(ctx: RenderContext): Promise<PreviewInstance> {\n const wrapper = document.createElement('div');\n wrapper.className = 'fp-docx-wrapper';\n wrapper.style.transformOrigin = 'top center';\n wrapper.style.transition = 'transform 0.2s ease';\n wrapper.style.padding = '16px';\n \n ctx.container.style.overflow = 'auto';\n ctx.container.appendChild(wrapper);\n\n let scale = 1.0;\n\n try {\n await docx.renderAsync(ctx.buffer, wrapper, ctx.container, {\n inWrapper: true,\n ignoreWidth: false,\n ignoreHeight: false,\n });\n } catch {\n wrapper.innerHTML = `\n <div style=\"text-align:center; padding: 40px; color: #666;\">\n <div style=\"font-size:48px; margin-bottom: 16px;\">๐Ÿ“„</div>\n <h3>${ctx.metadata.name || 'Word Document'}</h3>\n <p>DOCX render preview</p>\n </div>\n `;\n }\n\n const cleanup = () => {\n wrapper.remove();\n ctx.container.innerHTML = '';\n };\n\n ctx.signal.addEventListener('abort', cleanup);\n\n return {\n destroy: cleanup,\n zoomIn: () => {\n scale += 0.1;\n wrapper.style.transform = `scale(${scale})`;\n },\n zoomOut: () => {\n scale = Math.max(0.2, scale - 0.1);\n wrapper.style.transform = `scale(${scale})`;\n },\n getZoom: () => scale,\n setZoom: (level: number) => {\n scale = level;\n wrapper.style.transform = `scale(${scale})`;\n },\n fitToPage: () => {\n scale = 1.0;\n wrapper.style.transform = `scale(1)`;\n },\n download: () => {\n const blob = new Blob([ctx.buffer], { type: this.mimeTypes[0] });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = ctx.metadata.name || 'document.docx';\n a.click();\n URL.revokeObjectURL(url);\n },\n print: () => {\n window.print();\n }\n };\n }\n}\n\nexport function docxPlugin(): DocxPlugin {\n return new DocxPlugin();\n}\n\nexport default DocxPlugin;\n","import type { \n FileInfo, \n RenderContext, \n ToolbarAction, \n PreviewPlugin, \n PreviewInstance \n} from '@patel.sumit51/core';\nimport ExcelJS from 'exceljs';\n\nexport class ExcelPlugin implements PreviewPlugin {\n id = 'excel';\n name = 'Excel Spreadsheet Preview';\n extensions = ['.xlsx', '.xls'];\n mimeTypes = [\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.ms-excel'\n ];\n weight = 80;\n\n supports(file: FileInfo): boolean {\n const ext = file.metadata.extension?.toLowerCase();\n const mime = file.metadata.mimeType?.toLowerCase();\n return this.extensions.includes(ext || '') || this.mimeTypes.includes(mime || '');\n }\n\n getToolbarActions(instance: PreviewInstance): ToolbarAction[] {\n return [\n {\n id: 'zoom-out',\n icon: 'zoom-out',\n label: 'Zoom Out',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomOut?.();\n }\n },\n {\n id: 'zoom-in',\n icon: 'zoom-in',\n label: 'Zoom In',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomIn?.();\n }\n },\n {\n id: 'page-nav',\n icon: 'page-nav',\n label: 'Sheet Navigation',\n type: 'page-nav',\n group: 'navigation',\n execute: (sheet?: unknown) => {\n if (typeof sheet === 'number') instance.goToPage?.(sheet);\n }\n },\n {\n id: 'download',\n icon: 'download',\n label: 'Download',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.download?.();\n }\n },\n {\n id: 'print',\n icon: 'print',\n label: 'Print',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.print?.();\n }\n }\n ];\n }\n\n async render(ctx: RenderContext): Promise<PreviewInstance> {\n const container = document.createElement('div');\n container.style.display = 'flex';\n container.style.flexDirection = 'column';\n container.style.width = '100%';\n container.style.height = '100%';\n container.style.overflow = 'hidden';\n\n const contentArea = document.createElement('div');\n contentArea.style.flex = '1';\n contentArea.style.overflow = 'auto';\n contentArea.style.padding = '16px';\n contentArea.style.transformOrigin = 'top left';\n\n const tabsArea = document.createElement('div');\n tabsArea.style.display = 'flex';\n tabsArea.style.gap = '8px';\n tabsArea.style.padding = '8px 16px';\n tabsArea.style.borderTop = '1px solid #e0e0e0';\n tabsArea.style.backgroundColor = '#fafafa';\n tabsArea.style.overflowX = 'auto';\n\n container.appendChild(contentArea);\n container.appendChild(tabsArea);\n ctx.container.appendChild(container);\n\n let scale = 1.0;\n let currentSheetIndex = 1;\n const workbook = new ExcelJS.Workbook();\n\n try {\n await workbook.xlsx.load(ctx.buffer);\n } catch {\n // Fallback\n }\n\n const renderSheet = (index: number) => {\n contentArea.innerHTML = '';\n const sheet = workbook.getWorksheet(index);\n if (!sheet) return;\n\n const table = document.createElement('table');\n table.style.borderCollapse = 'collapse';\n table.style.fontFamily = 'sans-serif';\n table.style.fontSize = '13px';\n table.style.minWidth = '100%';\n\n sheet.eachRow({ includeEmpty: false }, (row) => {\n const tr = document.createElement('tr');\n row.eachCell({ includeEmpty: true }, (cell) => {\n const td = document.createElement('td');\n td.style.border = '1px solid #d0d7de';\n td.style.padding = '6px 12px';\n td.textContent = cell.text || '';\n tr.appendChild(td);\n });\n table.appendChild(tr);\n });\n\n contentArea.appendChild(table);\n currentSheetIndex = index;\n };\n\n workbook.worksheets.forEach((sheet, idx) => {\n const btn = document.createElement('button');\n btn.textContent = sheet.name;\n btn.style.padding = '4px 12px';\n btn.style.fontSize = '12px';\n btn.style.cursor = 'pointer';\n btn.style.border = '1px solid #ccc';\n btn.style.borderRadius = '4px';\n btn.style.backgroundColor = '#fff';\n btn.onclick = () => renderSheet(idx + 1);\n tabsArea.appendChild(btn);\n });\n\n if (workbook.worksheets.length > 0) {\n renderSheet(1);\n }\n\n const cleanup = () => {\n container.remove();\n ctx.container.innerHTML = '';\n };\n\n ctx.signal.addEventListener('abort', cleanup);\n\n return {\n destroy: cleanup,\n zoomIn: () => {\n scale += 0.1;\n contentArea.style.transform = `scale(${scale})`;\n },\n zoomOut: () => {\n scale = Math.max(0.2, scale - 0.1);\n contentArea.style.transform = `scale(${scale})`;\n },\n getZoom: () => scale,\n setZoom: (level: number) => {\n scale = level;\n contentArea.style.transform = `scale(${scale})`;\n },\n goToPage: (page: number) => {\n if (page > 0 && page <= workbook.worksheets.length) {\n renderSheet(page);\n }\n },\n getPageCount: () => workbook.worksheets.length,\n getCurrentPage: () => currentSheetIndex,\n download: () => {\n const blob = new Blob([ctx.buffer], { type: this.mimeTypes[0] });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = ctx.metadata.name || 'spreadsheet.xlsx';\n a.click();\n URL.revokeObjectURL(url);\n },\n print: () => {\n window.print();\n }\n };\n }\n}\n\nexport function excelPlugin(): ExcelPlugin {\n return new ExcelPlugin();\n}\n\nexport default ExcelPlugin;\n","import type { \n FileInfo, \n RenderContext, \n ToolbarAction, \n PreviewPlugin, \n PreviewInstance \n} from '@patel.sumit51/core';\n\nexport class CsvPlugin implements PreviewPlugin {\n id = 'csv';\n name = 'CSV Preview';\n extensions = ['.csv', '.tsv'];\n mimeTypes = ['text/csv', 'text/tab-separated-values'];\n weight = 80;\n\n supports(file: FileInfo): boolean {\n const ext = file.metadata.extension?.toLowerCase();\n const mime = file.metadata.mimeType?.toLowerCase();\n return ext === '.csv' || ext === '.tsv' || mime === 'text/csv' || mime === 'text/tab-separated-values';\n }\n\n getToolbarActions(instance: PreviewInstance): ToolbarAction[] {\n return [\n {\n id: 'zoom-out',\n icon: 'zoom-out',\n label: 'Zoom Out',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomOut?.();\n }\n },\n {\n id: 'zoom-in',\n icon: 'zoom-in',\n label: 'Zoom In',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomIn?.();\n }\n },\n {\n id: 'download',\n icon: 'download',\n label: 'Download',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.download?.();\n }\n },\n {\n id: 'print',\n icon: 'print',\n label: 'Print',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.print?.();\n }\n }\n ];\n }\n\n async render(ctx: RenderContext): Promise<PreviewInstance> {\n const decoder = new TextDecoder('utf-8');\n const text = decoder.decode(ctx.buffer);\n \n const container = document.createElement('div');\n container.style.width = '100%';\n container.style.height = '100%';\n container.style.overflow = 'auto';\n container.style.padding = '16px';\n container.style.boxSizing = 'border-box';\n container.style.transformOrigin = 'top left';\n \n const table = document.createElement('table');\n table.style.borderCollapse = 'collapse';\n table.style.width = '100%';\n table.style.fontFamily = 'monospace';\n table.style.fontSize = '13px';\n \n const delimiter = ctx.metadata.extension === '.tsv' ? '\\t' : ',';\n const rows = text.split(/\\r?\\n/).slice(0, 500); \n \n rows.forEach((row, rowIndex) => {\n if (!row.trim()) return;\n const tr = document.createElement('tr');\n const cells = row.split(delimiter);\n \n cells.forEach(cell => {\n const td = document.createElement(rowIndex === 0 ? 'th' : 'td');\n td.textContent = cell.trim();\n td.style.border = '1px solid #d0d7de';\n td.style.padding = '6px 12px';\n if (rowIndex === 0) {\n td.style.backgroundColor = '#f6f8fa';\n td.style.fontWeight = 'bold';\n }\n tr.appendChild(td);\n });\n table.appendChild(tr);\n });\n \n container.appendChild(table);\n ctx.container.appendChild(container);\n\n let scale = 1.0;\n\n const cleanup = () => {\n container.remove();\n ctx.container.innerHTML = '';\n };\n\n ctx.signal.addEventListener('abort', cleanup);\n\n return {\n destroy: cleanup,\n zoomIn: () => {\n scale += 0.1;\n container.style.transform = `scale(${scale})`;\n },\n zoomOut: () => {\n scale = Math.max(0.2, scale - 0.1);\n container.style.transform = `scale(${scale})`;\n },\n getZoom: () => scale,\n setZoom: (level: number) => {\n scale = level;\n container.style.transform = `scale(${scale})`;\n },\n fitToPage: () => {\n scale = 1.0;\n container.style.transform = `scale(1)`;\n },\n download: () => {\n const blob = new Blob([ctx.buffer], { type: 'text/csv' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = ctx.metadata.name || 'data.csv';\n a.click();\n URL.revokeObjectURL(url);\n },\n print: () => {\n window.print();\n }\n };\n }\n}\n\nexport function csvPlugin(): CsvPlugin {\n return new CsvPlugin();\n}\n\nexport default CsvPlugin;\n","import type { \n FileInfo, \n RenderContext, \n ToolbarAction, \n PreviewPlugin, \n PreviewInstance \n} from '@patel.sumit51/core';\nimport hljs from 'highlight.js';\n\nconst CODE_EXTENSIONS = [\n '.txt', '.json', '.js', '.ts', '.jsx', '.tsx', '.html', '.css', '.scss', '.less',\n '.md', '.xml', '.yml', '.yaml', '.sh', '.bash', '.py', \n '.java', '.c', '.cpp', '.h', '.cs', '.go', '.rs', '.sql', '.php'\n];\n\nexport class CodePlugin implements PreviewPlugin {\n id = 'code';\n name = 'Code/Text Preview';\n extensions = CODE_EXTENSIONS;\n mimeTypes = ['text/plain', 'application/json', 'text/javascript', 'text/html', 'text/css'];\n weight = 50; \n\n supports(file: FileInfo): boolean {\n const ext = file.metadata.extension?.toLowerCase();\n const mime = file.metadata.mimeType?.toLowerCase();\n \n if (ext && this.extensions.includes(ext)) return true;\n if (mime && (mime.startsWith('text/') || this.mimeTypes.includes(mime))) return true;\n \n return false;\n }\n\n getToolbarActions(instance: PreviewInstance): ToolbarAction[] {\n return [\n {\n id: 'zoom-out',\n icon: 'zoom-out',\n label: 'Zoom Out',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomOut?.();\n }\n },\n {\n id: 'zoom-in',\n icon: 'zoom-in',\n label: 'Zoom In',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomIn?.();\n }\n },\n {\n id: 'download',\n icon: 'download',\n label: 'Download',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.download?.();\n }\n },\n {\n id: 'print',\n icon: 'print',\n label: 'Print',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.print?.();\n }\n }\n ];\n }\n\n async render(ctx: RenderContext): Promise<PreviewInstance> {\n const decoder = new TextDecoder('utf-8');\n const text = decoder.decode(ctx.buffer);\n \n const container = document.createElement('div');\n container.style.width = '100%';\n container.style.height = '100%';\n container.style.overflow = 'auto';\n container.style.backgroundColor = '#1e1e1e';\n container.style.color = '#d4d4d4';\n container.style.padding = '16px';\n container.style.boxSizing = 'border-box';\n \n let fontSize = 13;\n const pre = document.createElement('pre');\n pre.style.margin = '0';\n pre.style.fontFamily = 'Consolas, Menlo, Monaco, monospace';\n pre.style.fontSize = `${fontSize}px`;\n pre.style.lineHeight = '1.5';\n pre.style.whiteSpace = 'pre-wrap';\n pre.style.wordBreak = 'break-all';\n\n const code = document.createElement('code');\n const ext = (ctx.metadata.extension || '').replace('.', '');\n\n try {\n if (ext && hljs.getLanguage(ext)) {\n code.innerHTML = hljs.highlight(text, { language: ext }).value;\n } else {\n code.innerHTML = hljs.highlightAuto(text).value;\n }\n } catch {\n code.textContent = text;\n }\n \n pre.appendChild(code);\n container.appendChild(pre);\n ctx.container.appendChild(container);\n\n const cleanup = () => {\n container.remove();\n ctx.container.innerHTML = '';\n };\n\n ctx.signal.addEventListener('abort', cleanup);\n\n return {\n destroy: cleanup,\n zoomIn: () => {\n fontSize = Math.min(32, fontSize + 2);\n pre.style.fontSize = `${fontSize}px`;\n },\n zoomOut: () => {\n fontSize = Math.max(8, fontSize - 2);\n pre.style.fontSize = `${fontSize}px`;\n },\n getZoom: () => fontSize / 13,\n setZoom: (level: number) => {\n fontSize = Math.round(13 * level);\n pre.style.fontSize = `${fontSize}px`;\n },\n download: () => {\n const mimeType = ctx.metadata.mimeType || 'text/plain';\n const blob = new Blob([ctx.buffer], { type: mimeType });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = ctx.metadata.name || 'code.txt';\n a.click();\n URL.revokeObjectURL(url);\n },\n print: () => {\n window.print();\n }\n };\n }\n}\n\nexport function codePlugin(): CodePlugin {\n return new CodePlugin();\n}\n\nexport default CodePlugin;\n","import type { \n FileInfo, \n RenderContext, \n ToolbarAction, \n PreviewPlugin, \n PreviewInstance \n} from '@patel.sumit51/core';\nimport { formatFileSize, downloadFile } from '@patel.sumit51/core';\nimport { unzip } from 'fflate';\n\ninterface ArchiveEntry {\n path: string;\n name: string;\n isDir: boolean;\n size: number;\n data?: Uint8Array;\n}\n\nexport class ArchivePlugin implements PreviewPlugin {\n id = 'archive';\n name = 'Archive Explorer';\n extensions = ['.zip'];\n mimeTypes = ['application/zip', 'application/x-zip-compressed'];\n weight = 70;\n\n supports(file: FileInfo): boolean {\n const ext = file.metadata.extension?.toLowerCase();\n const mime = file.metadata.mimeType?.toLowerCase();\n return ext === '.zip' || this.mimeTypes.includes(mime || '');\n }\n\n getToolbarActions(instance: PreviewInstance): ToolbarAction[] {\n return [\n {\n id: 'zoom-out',\n icon: 'zoom-out',\n label: 'Zoom Out',\n type: 'button',\n group: 'zoom',\n execute: () => instance.zoomOut?.()\n },\n {\n id: 'zoom-in',\n icon: 'zoom-in',\n label: 'Zoom In',\n type: 'button',\n group: 'zoom',\n execute: () => instance.zoomIn?.()\n },\n {\n id: 'fit-page',\n icon: 'fit-page',\n label: 'Reset Zoom',\n type: 'button',\n group: 'zoom',\n execute: () => instance.fitToPage?.()\n },\n {\n id: 'download',\n icon: 'download',\n label: 'Download Archive',\n type: 'button',\n group: 'actions',\n execute: () => instance.download?.()\n },\n {\n id: 'print',\n icon: 'print',\n label: 'Print File List',\n type: 'button',\n group: 'actions',\n execute: () => instance.print?.()\n }\n ];\n }\n\n async render(ctx: RenderContext): Promise<PreviewInstance> {\n const wrapper = document.createElement('div');\n wrapper.className = 'fp-archive-wrapper';\n wrapper.style.cssText = `\n width: 100%;\n height: 100%;\n overflow: auto;\n padding: 24px;\n box-sizing: border-box;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n transform-origin: top left;\n transition: transform 0.2s ease;\n `;\n ctx.container.innerHTML = '';\n ctx.container.style.overflow = 'auto';\n ctx.container.appendChild(wrapper);\n\n let scale = 1.0;\n\n const entries = await new Promise<ArchiveEntry[]>((resolve, reject) => {\n unzip(new Uint8Array(ctx.buffer), (err, unzipped) => {\n if (err) {\n reject(err);\n return;\n }\n const list: ArchiveEntry[] = Object.entries(unzipped).map(([path, data]) => {\n const isDir = path.endsWith('/');\n const parts = path.split('/').filter(Boolean);\n const name = parts[parts.length - 1] || path;\n return {\n path,\n name,\n isDir,\n size: data.length,\n data\n };\n });\n resolve(list);\n });\n });\n\n const totalUncompressedSize = entries.reduce((acc, e) => acc + e.size, 0);\n\n const renderUI = (filteredEntries: ArchiveEntry[]) => {\n wrapper.innerHTML = `\n <div style=\"max-width: 900px; margin: 0 auto; background: var(--fp-bg, #ffffff); border: 1px solid var(--fp-border, #e5e7eb); border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); overflow: hidden;\">\n <div style=\"padding: 16px 20px; background: var(--fp-toolbar-bg, #f9fafb); border-bottom: 1px solid var(--fp-border, #e5e7eb); display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 12px;\">\n <div>\n <h3 style=\"margin: 0 0 4px 0; font-size: 16px; font-weight: 600; color: var(--fp-text, #111827);\">\n ๐Ÿ“ฆ ${ctx.metadata.name || 'Archive.zip'}\n </h3>\n <div style=\"font-size: 13px; color: var(--fp-text-muted, #6b7280);\">\n ${entries.length} items ยท Total size: ${formatFileSize(totalUncompressedSize)} (Compressed: ${formatFileSize(ctx.buffer.byteLength)})\n </div>\n </div>\n <div>\n <input type=\"text\" id=\"fp-archive-search\" placeholder=\"Search files in archive...\" style=\"padding: 6px 12px; font-size: 13px; border: 1px solid var(--fp-border, #d1d5db); border-radius: 6px; outline: none; width: 220px;\" />\n </div>\n </div>\n <div style=\"max-height: 550px; overflow-y: auto;\">\n <table style=\"width: 100%; border-collapse: collapse; font-size: 13px; text-align: left;\">\n <thead>\n <tr style=\"background: var(--fp-toolbar-bg, #f3f4f6); color: var(--fp-text-muted, #4b5563); border-bottom: 1px solid var(--fp-border, #e5e7eb);\">\n <th style=\"padding: 10px 16px; font-weight: 600;\">Name / Path</th>\n <th style=\"padding: 10px 16px; font-weight: 600; width: 120px;\">Size</th>\n <th style=\"padding: 10px 16px; font-weight: 600; width: 100px; text-align: right;\">Action</th>\n </tr>\n </thead>\n <tbody id=\"fp-archive-body\">\n </tbody>\n </table>\n </div>\n </div>\n `;\n\n const tbody = wrapper.querySelector('#fp-archive-body') as HTMLElement;\n if (filteredEntries.length === 0) {\n tbody.innerHTML = `<tr><td colspan=\"3\" style=\"padding: 24px; text-align: center; color: #9ca3af;\">No matching files found</td></tr>`;\n } else {\n tbody.innerHTML = filteredEntries.map((e, idx) => `\n <tr style=\"border-bottom: 1px solid var(--fp-border, #f3f4f6); transition: background 0.15s ease;\" onmouseover=\"this.style.background='var(--fp-hover, #f9fafb)'\" onmouseout=\"this.style.background='transparent'\">\n <td style=\"padding: 10px 16px; color: var(--fp-text, #1f2937); word-break: break-all;\">\n <span style=\"margin-right: 8px;\">${e.isDir ? '๐Ÿ“' : '๐Ÿ“„'}</span>\n ${e.path}\n </td>\n <td style=\"padding: 10px 16px; color: var(--fp-text-muted, #6b7280);\">\n ${e.isDir ? '-' : formatFileSize(e.size)}\n </td>\n <td style=\"padding: 10px 16px; text-align: right;\">\n ${!e.isDir ? `<button data-idx=\"${idx}\" class=\"fp-entry-dl\" style=\"padding: 4px 8px; font-size: 12px; background: transparent; border: 1px solid var(--fp-border, #d1d5db); border-radius: 4px; cursor: pointer; color: var(--fp-text, #374151);\">โฌ‡๏ธ Save</button>` : ''}\n </td>\n </tr>\n `).join('');\n }\n\n // Handle download individual file\n tbody.querySelectorAll('.fp-entry-dl').forEach((btn) => {\n btn.addEventListener('click', (ev) => {\n const target = ev.currentTarget as HTMLElement;\n const idx = Number(target.getAttribute('data-idx'));\n const entry = filteredEntries[idx];\n if (entry && entry.data) {\n downloadFile(entry.data.buffer as ArrayBuffer, entry.name);\n }\n });\n });\n\n // Handle search\n const searchInput = wrapper.querySelector('#fp-archive-search') as HTMLInputElement;\n if (searchInput) {\n searchInput.addEventListener('input', () => {\n const q = searchInput.value.toLowerCase().trim();\n const filtered = q ? entries.filter(e => e.path.toLowerCase().includes(q)) : entries;\n renderUI(filtered);\n const newSearch = wrapper.querySelector('#fp-archive-search') as HTMLInputElement;\n if (newSearch) {\n newSearch.value = q;\n newSearch.focus();\n }\n });\n }\n };\n\n renderUI(entries);\n\n const cleanup = () => {\n wrapper.remove();\n ctx.container.innerHTML = '';\n };\n\n ctx.signal.addEventListener('abort', cleanup);\n\n return {\n destroy: cleanup,\n zoomIn: () => {\n scale += 0.1;\n wrapper.style.transform = `scale(${scale})`;\n },\n zoomOut: () => {\n scale = Math.max(0.3, scale - 0.1);\n wrapper.style.transform = `scale(${scale})`;\n },\n getZoom: () => scale,\n setZoom: (level: number) => {\n scale = level;\n wrapper.style.transform = `scale(${scale})`;\n },\n fitToPage: () => {\n scale = 1.0;\n wrapper.style.transform = `scale(1)`;\n },\n download: () => {\n downloadFile(ctx.buffer, ctx.metadata.name || 'archive.zip', 'application/zip');\n },\n print: () => {\n window.print();\n }\n };\n }\n}\n\nexport function archivePlugin(): ArchivePlugin {\n return new ArchivePlugin();\n}\n\nexport default ArchivePlugin;\r\n","import type { \n FileInfo, \n RenderContext, \n ToolbarAction, \n PreviewPlugin, \n PreviewInstance \n} from '@patel.sumit51/core';\nimport { downloadFile } from '@patel.sumit51/core';\nimport { marked } from 'marked';\nimport DOMPurify from 'dompurify';\nimport hljs from 'highlight.js';\n\nexport class MarkdownPlugin implements PreviewPlugin {\n id = 'markdown';\n name = 'Markdown Preview';\n extensions = ['.md', '.markdown', '.mdown', '.mkd'];\n mimeTypes = ['text/markdown', 'text/x-markdown'];\n weight = 90; // Higher than generic text/code plugin\n\n supports(file: FileInfo): boolean {\n const ext = file.metadata.extension?.toLowerCase();\n const mime = file.metadata.mimeType?.toLowerCase();\n return this.extensions.includes(ext || '') || this.mimeTypes.includes(mime || '');\n }\n\n getToolbarActions(instance: PreviewInstance): ToolbarAction[] {\n return [\n {\n id: 'zoom-out',\n icon: 'zoom-out',\n label: 'Decrease Font',\n type: 'button',\n group: 'zoom',\n execute: () => instance.zoomOut?.()\n },\n {\n id: 'zoom-in',\n icon: 'zoom-in',\n label: 'Increase Font',\n type: 'button',\n group: 'zoom',\n execute: () => instance.zoomIn?.()\n },\n {\n id: 'fit-page',\n icon: 'fit-page',\n label: 'Default Size',\n type: 'button',\n group: 'zoom',\n execute: () => instance.fitToPage?.()\n },\n {\n id: 'download',\n icon: 'download',\n label: 'Download Markdown',\n type: 'button',\n group: 'actions',\n execute: () => instance.download?.()\n },\n {\n id: 'print',\n icon: 'print',\n label: 'Print Document',\n type: 'button',\n group: 'actions',\n execute: () => instance.print?.()\n }\n ];\n }\n\n async render(ctx: RenderContext): Promise<PreviewInstance> {\n const text = new TextDecoder('utf-8', { fatal: false }).decode(ctx.buffer);\n \n // Parse markdown to HTML\n const rawHtml = await marked.parse(text, {\n gfm: true,\n breaks: true,\n });\n\n // Sanitize generated HTML for security\n const cleanHtml = DOMPurify.sanitize(rawHtml, {\n USE_PROFILES: { html: true }\n });\n\n const wrapper = document.createElement('div');\n wrapper.className = 'fp-markdown-wrapper';\n wrapper.style.cssText = `\n width: 100%;\n height: 100%;\n overflow: auto;\n padding: 32px 40px;\n box-sizing: border-box;\n line-height: 1.6;\n font-size: 15px;\n color: var(--fp-text, #24292f);\n background: var(--fp-bg, #ffffff);\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Noto Sans\", Helvetica, Arial, sans-serif;\n `;\n\n wrapper.innerHTML = `\n <style>\n .fp-markdown-wrapper h1, .fp-markdown-wrapper h2, .fp-markdown-wrapper h3,\n .fp-markdown-wrapper h4, .fp-markdown-wrapper h5, .fp-markdown-wrapper h6 {\n margin-top: 24px;\n margin-bottom: 16px;\n font-weight: 600;\n line-height: 1.25;\n color: var(--fp-text, #1f2328);\n }\n .fp-markdown-wrapper h1 { font-size: 2em; padding-bottom: 0.3em; border-bottom: 1px solid var(--fp-border, #d0d7de); }\n .fp-markdown-wrapper h2 { font-size: 1.5em; padding-bottom: 0.3em; border-bottom: 1px solid var(--fp-border, #d0d7de); }\n .fp-markdown-wrapper h3 { font-size: 1.25em; }\n .fp-markdown-wrapper p { margin-top: 0; margin-bottom: 16px; }\n .fp-markdown-wrapper table {\n border-spacing: 0;\n border-collapse: collapse;\n margin-top: 0;\n margin-bottom: 16px;\n width: 100%;\n overflow: auto;\n }\n .fp-markdown-wrapper table th, .fp-markdown-wrapper table td {\n padding: 6px 13px;\n border: 1px solid var(--fp-border, #d0d7de);\n }\n .fp-markdown-wrapper table tr:nth-child(2n) {\n background-color: var(--fp-toolbar-bg, #f6f8fa);\n }\n .fp-markdown-wrapper blockquote {\n margin: 0 0 16px 0;\n padding: 0 1em;\n color: var(--fp-text-muted, #59636e);\n border-left: 0.25em solid var(--fp-border, #d0d7de);\n }\n .fp-markdown-wrapper pre {\n padding: 16px;\n overflow: auto;\n font-size: 85%;\n line-height: 1.45;\n background-color: var(--fp-toolbar-bg, #f6f8fa);\n border-radius: 6px;\n border: 1px solid var(--fp-border, #d0d7de);\n }\n .fp-markdown-wrapper code {\n padding: 0.2em 0.4em;\n margin: 0;\n font-size: 85%;\n background-color: rgba(175, 184, 193, 0.2);\n border-radius: 4px;\n font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n }\n .fp-markdown-wrapper pre code {\n padding: 0;\n background: transparent;\n }\n .fp-markdown-wrapper ul, .fp-markdown-wrapper ol {\n padding-left: 2em;\n margin-top: 0;\n margin-bottom: 16px;\n }\n .fp-markdown-wrapper hr {\n height: 0.25em;\n padding: 0;\n margin: 24px 0;\n background-color: var(--fp-border, #d0d7de);\n border: 0;\n }\n </style>\n <div class=\"fp-markdown-content\" style=\"max-width: 860px; margin: 0 auto;\">\n ${cleanHtml}\n </div>\n `;\n\n // Apply syntax highlighting to pre code blocks\n wrapper.querySelectorAll('pre code').forEach((block) => {\n hljs.highlightElement(block as HTMLElement);\n });\n\n ctx.container.innerHTML = '';\n ctx.container.style.overflow = 'auto';\n ctx.container.appendChild(wrapper);\n\n let fontSize = 15;\n\n const cleanup = () => {\n wrapper.remove();\n ctx.container.innerHTML = '';\n };\n\n ctx.signal.addEventListener('abort', cleanup);\n\n return {\n destroy: cleanup,\n zoomIn: () => {\n fontSize = Math.min(28, fontSize + 2);\n wrapper.style.fontSize = `${fontSize}px`;\n },\n zoomOut: () => {\n fontSize = Math.max(10, fontSize - 2);\n wrapper.style.fontSize = `${fontSize}px`;\n },\n getZoom: () => fontSize / 15,\n setZoom: (level: number) => {\n fontSize = Math.round(15 * level);\n wrapper.style.fontSize = `${fontSize}px`;\n },\n fitToPage: () => {\n fontSize = 15;\n wrapper.style.fontSize = '15px';\n },\n download: () => {\n downloadFile(ctx.buffer, ctx.metadata.name || 'document.md', 'text/markdown');\n },\n print: () => {\n window.print();\n }\n };\n }\n}\n\nexport function markdownPlugin(): MarkdownPlugin {\n return new MarkdownPlugin();\n}\n\nexport default MarkdownPlugin;\r\n","import type { \n FileInfo, \n RenderContext, \n ToolbarAction, \n PreviewPlugin, \n PreviewInstance,\n Thumbnail\n} from '@patel.sumit51/core';\nimport { downloadFile } from '@patel.sumit51/core';\nimport { PptxRenderer } from 'pptx-browser';\n\nexport class PptxPlugin implements PreviewPlugin {\n id = 'pptx';\n name = 'PowerPoint Presentation';\n extensions = ['.pptx', '.ppsx'];\n mimeTypes = [\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/vnd.openxmlformats-officedocument.presentationml.slideshow'\n ];\n weight = 80;\n\n supports(file: FileInfo): boolean {\n const ext = file.metadata.extension?.toLowerCase();\n const mime = file.metadata.mimeType?.toLowerCase();\n return this.extensions.includes(ext || '') || this.mimeTypes.includes(mime || '');\n }\n\n getToolbarActions(instance: PreviewInstance): ToolbarAction[] {\n return [\n {\n id: 'thumbnails',\n icon: 'thumbnails',\n label: 'Slide Thumbnails',\n type: 'button',\n group: 'navigation',\n execute: () => instance.toggleThumbnails?.()\n },\n {\n id: 'page-prev',\n icon: 'page-prev',\n label: 'Previous Slide',\n type: 'button',\n group: 'navigation',\n execute: () => {\n const cur = instance.getCurrentPage?.() ?? 1;\n if (cur > 1) instance.goToPage?.(cur - 1);\n }\n },\n {\n id: 'page-nav',\n icon: '',\n label: 'Slide Number',\n type: 'page-nav',\n group: 'navigation',\n execute: (page: unknown) => instance.goToPage?.(Number(page))\n },\n {\n id: 'page-next',\n icon: 'page-next',\n label: 'Next Slide',\n type: 'button',\n group: 'navigation',\n execute: () => {\n const cur = instance.getCurrentPage?.() ?? 1;\n const total = instance.getPageCount?.() ?? 1;\n if (cur < total) instance.goToPage?.(cur + 1);\n }\n },\n {\n id: 'zoom-out',\n icon: 'zoom-out',\n label: 'Zoom Out',\n type: 'button',\n group: 'zoom',\n execute: () => instance.zoomOut?.()\n },\n {\n id: 'zoom-in',\n icon: 'zoom-in',\n label: 'Zoom In',\n type: 'button',\n group: 'zoom',\n execute: () => instance.zoomIn?.()\n },\n {\n id: 'fit-page',\n icon: 'fit-page',\n label: 'Fit to Slide',\n type: 'button',\n group: 'zoom',\n execute: () => instance.fitToPage?.()\n },\n {\n id: 'download',\n icon: 'download',\n label: 'Download PPTX',\n type: 'button',\n group: 'actions',\n execute: () => instance.download?.()\n },\n {\n id: 'print',\n icon: 'print',\n label: 'Print Presentation',\n type: 'button',\n group: 'actions',\n execute: () => instance.print?.()\n }\n ];\n }\n\n async render(ctx: RenderContext): Promise<PreviewInstance> {\n const renderer = new PptxRenderer();\n await renderer.load(ctx.buffer);\n\n const slideCount = (renderer as any).slidePaths?.length || 1;\n let currentSlide = 1;\n let scale = 1.0;\n\n const wrapper = document.createElement('div');\n wrapper.className = 'fp-pptx-wrapper';\n wrapper.style.cssText = `\n width: 100%;\n height: 100%;\n overflow: auto;\n display: flex;\n justify-content: center;\n align-items: flex-start;\n padding: 24px;\n box-sizing: border-box;\n background: var(--fp-bg-canvas, #525659);\n `;\n\n const slideContainer = document.createElement('div');\n slideContainer.className = 'fp-slide-container';\n slideContainer.style.cssText = `\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25);\n border-radius: 4px;\n overflow: hidden;\n background: #ffffff;\n transform-origin: top center;\n transition: transform 0.2s ease;\n `;\n\n const canvas = document.createElement('canvas');\n slideContainer.appendChild(canvas);\n wrapper.appendChild(slideContainer);\n\n ctx.container.innerHTML = '';\n ctx.container.style.overflow = 'auto';\n ctx.container.appendChild(wrapper);\n\n const renderCurrentSlide = async () => {\n try {\n await renderer.renderSlide(currentSlide - 1, canvas, 1280);\n ctx.emit('page-change', { page: currentSlide, totalPages: slideCount });\n } catch (err) {\n console.error('[PptxPlugin] Failed to render slide:', err);\n }\n };\n\n await renderCurrentSlide();\n\n const cleanup = () => {\n renderer.destroy();\n wrapper.remove();\n ctx.container.innerHTML = '';\n };\n\n ctx.signal.addEventListener('abort', cleanup);\n\n const instance: PreviewInstance = {\n destroy: cleanup,\n goToPage: (page: number) => {\n if (page >= 1 && page <= slideCount) {\n currentSlide = page;\n renderCurrentSlide();\n }\n },\n getPageCount: () => slideCount,\n getCurrentPage: () => currentSlide,\n zoomIn: () => {\n scale += 0.1;\n slideContainer.style.transform = `scale(${scale})`;\n },\n zoomOut: () => {\n scale = Math.max(0.2, scale - 0.1);\n slideContainer.style.transform = `scale(${scale})`;\n },\n getZoom: () => scale,\n setZoom: (level: number) => {\n scale = level;\n slideContainer.style.transform = `scale(${scale})`;\n },\n fitToPage: () => {\n scale = 1.0;\n slideContainer.style.transform = 'scale(1)';\n },\n getThumbnails: (): Thumbnail[] => {\n const list: Thumbnail[] = [];\n for (let i = 0; i < slideCount; i++) {\n const slideIdx = i;\n list.push({\n index: slideIdx,\n label: `Slide ${slideIdx + 1}`,\n render: async (thumbCanvas: HTMLCanvasElement) => {\n await renderer.renderSlide(slideIdx, thumbCanvas, 240);\n }\n });\n }\n return list;\n },\n download: () => {\n downloadFile(\n ctx.buffer,\n ctx.metadata.name || 'presentation.pptx',\n this.mimeTypes[0]\n );\n },\n print: () => {\n window.print();\n }\n };\n\n return instance;\n }\n}\n\nexport function pptxPlugin(): PptxPlugin {\n return new PptxPlugin();\n}\n\nexport default PptxPlugin;\r\n","import type { \n FileInfo, \n RenderContext, \n ToolbarAction, \n PreviewPlugin, \n PreviewInstance \n} from '@patel.sumit51/core';\nimport { downloadFile } from '@patel.sumit51/core';\nimport * as THREE from 'three';\nimport { STLLoader } from 'three/examples/jsm/loaders/STLLoader.js';\nimport { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\n\nexport class ThreeDPlugin implements PreviewPlugin {\n id = '3d';\n name = '3D Model Preview';\n extensions = ['.stl', '.obj'];\n mimeTypes = ['model/stl', 'model/obj', 'application/sla', 'text/plain'];\n weight = 75;\n\n supports(file: FileInfo): boolean {\n const ext = file.metadata.extension?.toLowerCase();\n return ext === '.stl' || ext === '.obj';\n }\n\n getToolbarActions(instance: PreviewInstance): ToolbarAction[] {\n return [\n {\n id: 'zoom-out',\n icon: 'zoom-out',\n label: 'Zoom Out',\n type: 'button',\n group: 'zoom',\n execute: () => instance.zoomOut?.()\n },\n {\n id: 'zoom-in',\n icon: 'zoom-in',\n label: 'Zoom In',\n type: 'button',\n group: 'zoom',\n execute: () => instance.zoomIn?.()\n },\n {\n id: 'fit-page',\n icon: 'fit-page',\n label: 'Reset Camera View',\n type: 'button',\n group: 'zoom',\n execute: () => instance.fitToPage?.()\n },\n {\n id: 'rotate-cw',\n icon: 'rotate-cw',\n label: 'Toggle Wireframe',\n type: 'button',\n group: 'view',\n execute: () => instance.rotateCW?.()\n },\n {\n id: 'download',\n icon: 'download',\n label: 'Download 3D Model',\n type: 'button',\n group: 'actions',\n execute: () => instance.download?.()\n }\n ];\n }\n\n async render(ctx: RenderContext): Promise<PreviewInstance> {\n const container = ctx.container;\n container.innerHTML = '';\n container.style.overflow = 'hidden';\n container.style.position = 'relative';\n container.style.width = '100%';\n container.style.height = '100%';\n container.style.background = '#1a1a1a';\n\n const width = container.clientWidth || 800;\n const height = container.clientHeight || 600;\n\n // 1. Setup Scene, Camera, Renderer\n const scene = new THREE.Scene();\n scene.background = new THREE.Color(0x1e1e24);\n\n const camera = new THREE.PerspectiveCamera(45, width / height, 0.1, 2000);\n const renderer = new THREE.WebGLRenderer({ antialias: true });\n renderer.setSize(width, height);\n renderer.setPixelRatio(window.devicePixelRatio);\n renderer.shadowMap.enabled = true;\n container.appendChild(renderer.domElement);\n\n // 2. Setup OrbitControls\n const controls = new OrbitControls(camera, renderer.domElement);\n controls.enableDamping = true;\n controls.dampingFactor = 0.05;\n\n // 3. Add Lights\n const ambientLight = new THREE.AmbientLight(0xffffff, 0.8);\n scene.add(ambientLight);\n\n const dirLight1 = new THREE.DirectionalLight(0xffffff, 1.2);\n dirLight1.position.set(100, 200, 100);\n scene.add(dirLight1);\n\n const dirLight2 = new THREE.DirectionalLight(0xffffff, 0.6);\n dirLight2.position.set(-100, -100, -100);\n scene.add(dirLight2);\n\n // 4. Add Grid Helper\n const grid = new THREE.GridHelper(200, 20, 0x444444, 0x222222);\n scene.add(grid);\n\n // 5. Load and center 3D Model\n let meshGroup = new THREE.Group();\n let isWireframe = false;\n const ext = ctx.metadata.extension?.toLowerCase();\n\n const materials: THREE.Material[] = [];\n\n if (ext === '.stl') {\n const loader = new STLLoader();\n const geometry = loader.parse(ctx.buffer);\n geometry.computeVertexNormals();\n geometry.center();\n\n const material = new THREE.MeshStandardMaterial({\n color: 0x3b82f6,\n roughness: 0.4,\n metalness: 0.2\n });\n materials.push(material);\n\n const mesh = new THREE.Mesh(geometry, material);\n meshGroup.add(mesh);\n } else if (ext === '.obj') {\n const loader = new OBJLoader();\n const text = new TextDecoder().decode(ctx.buffer);\n const obj = loader.parse(text);\n\n obj.traverse((child) => {\n if ((child as THREE.Mesh).isMesh) {\n const m = child as THREE.Mesh;\n m.geometry.computeVertexNormals();\n const mat = new THREE.MeshStandardMaterial({\n color: 0x10b981,\n roughness: 0.5,\n metalness: 0.1\n });\n materials.push(mat);\n m.material = mat;\n }\n });\n meshGroup.add(obj);\n }\n\n scene.add(meshGroup);\n\n // 6. Compute bounding box to frame camera nicely\n const box = new THREE.Box3().setFromObject(meshGroup);\n const sphere = box.getBoundingSphere(new THREE.Sphere());\n const radius = Math.max(sphere.radius, 10);\n\n const fitCamera = () => {\n camera.position.set(radius * 1.5, radius * 1.2, radius * 2);\n camera.lookAt(0, 0, 0);\n controls.target.set(0, 0, 0);\n controls.update();\n };\n\n fitCamera();\n\n // 7. Animation Loop\n let animId: number;\n const animate = () => {\n animId = requestAnimationFrame(animate);\n controls.update();\n renderer.render(scene, camera);\n };\n animate();\n\n // 8. Handle Resize\n const resizeObserver = new ResizeObserver(() => {\n const newWidth = container.clientWidth || 800;\n const newHeight = container.clientHeight || 600;\n camera.aspect = newWidth / newHeight;\n camera.updateProjectionMatrix();\n renderer.setSize(newWidth, newHeight);\n });\n resizeObserver.observe(container);\n\n const cleanup = () => {\n cancelAnimationFrame(animId);\n resizeObserver.disconnect();\n controls.dispose();\n renderer.dispose();\n materials.forEach(m => m.dispose());\n meshGroup.traverse((child) => {\n if ((child as THREE.Mesh).geometry) {\n (child as THREE.Mesh).geometry.dispose();\n }\n });\n container.innerHTML = '';\n };\n\n ctx.signal.addEventListener('abort', cleanup);\n\n return {\n destroy: cleanup,\n zoomIn: () => {\n camera.position.multiplyScalar(0.85);\n controls.update();\n },\n zoomOut: () => {\n camera.position.multiplyScalar(1.15);\n controls.update();\n },\n fitToPage: fitCamera,\n rotateCW: () => {\n isWireframe = !isWireframe;\n materials.forEach(m => {\n (m as THREE.MeshStandardMaterial).wireframe = isWireframe;\n });\n },\n download: () => {\n downloadFile(ctx.buffer, ctx.metadata.name || `model${ext || '.stl'}`);\n }\n };\n }\n}\n\nexport function threeDPlugin(): ThreeDPlugin {\n return new ThreeDPlugin();\n}\n\nexport default ThreeDPlugin;\r\n","import { FilePreviewViewer as CoreViewer } from '@patel.sumit51/core';\nimport { pdfPlugin } from '@patel.sumit51/plugin-pdf';\nimport { mediaPlugin } from '@patel.sumit51/plugin-media';\nimport { docxPlugin } from '@patel.sumit51/plugin-docx';\nimport { excelPlugin } from '@patel.sumit51/plugin-excel';\nimport { csvPlugin } from '@patel.sumit51/plugin-csv';\nimport { codePlugin } from '@patel.sumit51/plugin-code';\nimport { archivePlugin } from '@patel.sumit51/plugin-archive';\nimport { markdownPlugin } from '@patel.sumit51/plugin-markdown';\nimport { pptxPlugin } from '@patel.sumit51/plugin-pptx';\nimport { threeDPlugin } from '@patel.sumit51/plugin-3d';\nimport type { PreviewPlugin } from '@patel.sumit51/core';\n\n/**\n * Returns all built-in default preview plugins:\n * PDF, Word (DOCX), Excel (XLSX), PowerPoint (PPTX), CSV/TSV,\n * ZIP Archives, Markdown, 3D Models (STL/OBJ), Media (Images/Video/Audio/SVG), and Code/Text.\n */\nexport function getDefaultPlugins(): PreviewPlugin[] {\n return [\n pdfPlugin(),\n mediaPlugin(),\n docxPlugin(),\n excelPlugin(),\n pptxPlugin(),\n csvPlugin(),\n archivePlugin(),\n markdownPlugin(),\n threeDPlugin(),\n codePlugin(),\n ];\n}\n\n/**\n * Universal File Preview Viewer.\n * Pre-loads all format plugins by default so any file format can be previewed immediately.\n */\nexport class FilePreviewViewer extends CoreViewer {\n constructor(options?: { autoRegisterDefaults?: boolean }) {\n super();\n if (options?.autoRegisterDefaults !== false) {\n this.registerPlugins(getDefaultPlugins());\n }\n }\n}\n\n// Re-export individual plugins for custom configurations\nexport {\n pdfPlugin,\n mediaPlugin,\n docxPlugin,\n excelPlugin,\n pptxPlugin,\n csvPlugin,\n archivePlugin,\n markdownPlugin,\n threeDPlugin,\n codePlugin,\n};\n\n// Re-export all core types, utilities, controllers, and events\nexport * from '@patel.sumit51/core';\r\n","import React, { useEffect, useImperativeHandle, useRef, forwardRef, memo } from 'react';\nimport {\n FilePreviewViewer,\n getDefaultPlugins,\n type FileSource,\n type PreviewPlugin,\n type PreviewViewerOptions,\n type PreviewInstance,\n} from './index';\n\nexport interface FilePreviewProps {\n /** File to preview. Accepts URL string, File, Blob, ArrayBuffer, or Uint8Array */\n src: FileSource;\n /** Optional custom plugins list. If omitted, all default plugins (PDF, Word, Excel, CSV, Media, Code) are loaded */\n plugins?: PreviewPlugin[];\n /** Viewer options (theme, showToolbar, toolbarPosition, showThumbnails, etc.) */\n options?: PreviewViewerOptions;\n /** Triggered when loading starts */\n onLoading?: () => void;\n /** Triggered when preview is successfully loaded */\n onLoaded?: (data: unknown) => void;\n /** Triggered when an error occurs */\n onError?: (error: Error) => void;\n /** Triggered on page or sheet change */\n onPageChange?: (data: unknown) => void;\n /** Triggered on zoom level change */\n onZoomChange?: (data: unknown) => void;\n /** Custom wrapper CSS class name */\n className?: string;\n /** Custom wrapper inline style */\n style?: React.CSSProperties;\n}\n\nexport interface FilePreviewHandle {\n getInstance: () => PreviewInstance | null;\n getViewer: () => FilePreviewViewer | null;\n destroy: () => void;\n}\n\nexport const FilePreview = memo(forwardRef<FilePreviewHandle, FilePreviewProps>(\n (\n {\n src,\n plugins,\n options = {},\n onLoading,\n onLoaded,\n onError,\n onPageChange,\n onZoomChange,\n className,\n style,\n },\n ref\n ) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const viewerRef = useRef<FilePreviewViewer | null>(null);\n const instanceRef = useRef<PreviewInstance | null>(null);\n\n useImperativeHandle(ref, () => ({\n getInstance: () => instanceRef.current,\n getViewer: () => viewerRef.current,\n destroy: () => viewerRef.current?.destroy(),\n }));\n\n useEffect(() => {\n const viewer = new FilePreviewViewer({ autoRegisterDefaults: false });\n const activePlugins = plugins && plugins.length > 0 ? plugins : getDefaultPlugins();\n viewer.registerPlugins(activePlugins);\n viewerRef.current = viewer;\n\n const unsubs: Array<() => void> = [];\n if (onLoading) unsubs.push(viewer.on('loading', onLoading));\n if (onLoaded) unsubs.push(viewer.on('loaded', onLoaded));\n if (onError) unsubs.push(viewer.on('error', (e: unknown) => onError(e instanceof Error ? e : new Error(String(e)))));\n if (onPageChange) unsubs.push(viewer.on('page-change', onPageChange));\n if (onZoomChange) unsubs.push(viewer.on('zoom-change', onZoomChange));\n\n return () => {\n unsubs.forEach(fn => fn());\n viewer.destroy();\n viewerRef.current = null;\n instanceRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (!viewerRef.current || !containerRef.current || !src) return;\n\n const doPreview = async () => {\n try {\n instanceRef.current = await viewerRef.current!.preview(\n containerRef.current!,\n src,\n options\n );\n } catch (error: unknown) {\n if (error instanceof DOMException && error.name === 'AbortError') return;\n if (onError) {\n onError(error instanceof Error ? error : new Error(String(error)));\n }\n }\n };\n\n doPreview();\n }, [src, options, onError]);\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{ width: '100%', height: '100%', position: 'relative', ...style }}\n />\n );\n }\n));\n\nFilePreview.displayName = 'FilePreview';\nexport default FilePreview;\n"]}
1
+ {"version":3,"sources":["../../core/src/events.ts","../../core/src/detect.ts","../../core/src/utils.ts","../../core/src/toolbar/icons.ts","../../core/src/toolbar/toolbar-controller.ts","../../core/src/thumbnail/thumbnail-panel.ts","../../core/src/engine.ts","../../plugins/pdf/src/index.ts","../../plugins/media/src/index.ts","../../plugins/docx/src/index.ts","../../plugins/excel/src/index.ts","../../plugins/csv/src/index.ts","../../plugins/code/src/index.ts","../../plugins/archive/src/index.ts","../../plugins/markdown/src/index.ts","../../plugins/pptx/src/index.ts","../../plugins/3d/src/index.ts","../src/index.ts","../src/react.tsx"],"names":["DOMPurify","docx","ExcelJS","hljs","unzip","marked","PptxRenderer","THREE","OrbitControls","STLLoader","OBJLoader","FilePreviewViewer","memo","forwardRef","useRef","useImperativeHandle","useEffect","jsx"],"mappings":"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","file":"react.cjs","sourcesContent":["import type { EventHandler, Unsubscribe } from './types';\n\n/**\n * Lightweight typed event emitter for the file preview system.\n * Supports on/off/emit with automatic cleanup.\n */\nexport class EventEmitter {\n private listeners = new Map<string, Set<EventHandler>>();\n\n /**\n * Subscribe to an event.\n * @returns An unsubscribe function.\n */\n on(event: string, handler: EventHandler): Unsubscribe {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(handler);\n\n return () => this.off(event, handler);\n }\n\n /**\n * Unsubscribe from an event.\n */\n off(event: string, handler: EventHandler): void {\n const handlers = this.listeners.get(event);\n if (handlers) {\n handlers.delete(handler);\n if (handlers.size === 0) {\n this.listeners.delete(event);\n }\n }\n }\n\n /**\n * Emit an event with optional payload.\n */\n emit(event: string, data?: unknown): void {\n const handlers = this.listeners.get(event);\n if (handlers) {\n for (const handler of handlers) {\n try {\n handler(data);\n } catch (error) {\n console.error(`[FilePreview] Error in '${event}' handler:`, error);\n }\n }\n }\n }\n\n /**\n * Remove all listeners, optionally for a specific event.\n */\n removeAll(event?: string): void {\n if (event) {\n this.listeners.delete(event);\n } else {\n this.listeners.clear();\n }\n }\n\n /**\n * Get the count of listeners for a specific event.\n */\n listenerCount(event: string): number {\n return this.listeners.get(event)?.size ?? 0;\n }\n}\n","import type { FileSource, FileMetadata, FileInfo } from './types';\n\n/** Magic number signatures for common file formats */\nconst MAGIC_NUMBERS: Array<{ bytes: number[]; mask?: number[]; offset?: number; mime: string }> = [\n { bytes: [0x25, 0x50, 0x44, 0x46], mime: 'application/pdf' }, // %PDF\n { bytes: [0x50, 0x4B, 0x03, 0x04], mime: 'application/zip' }, // PK.. (ZIP/DOCX/XLSX/PPTX)\n { bytes: [0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A], mime: 'image/png' }, // PNG\n { bytes: [0xFF, 0xD8, 0xFF], mime: 'image/jpeg' }, // JPEG\n { bytes: [0x47, 0x49, 0x46, 0x38], mime: 'image/gif' }, // GIF87a/GIF89a\n { bytes: [0x42, 0x4D], mime: 'image/bmp' }, // BMP\n { bytes: [0x00, 0x00, 0x01, 0x00], mime: 'image/x-icon' }, // ICO\n { bytes: [0x49, 0x49, 0x2A, 0x00], mime: 'image/tiff' }, // TIFF (LE)\n { bytes: [0x4D, 0x4D, 0x00, 0x2A], mime: 'image/tiff' }, // TIFF (BE)\n { bytes: [0x1A, 0x45, 0xDF, 0xA3], mime: 'video/webm' }, // WebM/MKV\n { bytes: [0x66, 0x74, 0x79, 0x70], mime: 'video/mp4', offset: 4 }, // MP4 (ftyp)\n { bytes: [0x49, 0x44, 0x33], mime: 'audio/mpeg' }, // MP3 (ID3)\n { bytes: [0xFF, 0xFB], mime: 'audio/mpeg' }, // MP3 (sync)\n { bytes: [0xFF, 0xF3], mime: 'audio/mpeg' }, // MP3 (sync)\n { bytes: [0x4F, 0x67, 0x67, 0x53], mime: 'audio/ogg' }, // OGG\n { bytes: [0x52, 0x49, 0x46, 0x46], mime: 'audio/wav' }, // WAV/RIFF (also WebP)\n { bytes: [0x66, 0x4C, 0x61, 0x43], mime: 'audio/flac' }, // FLAC\n { bytes: [0x7B, 0x5C, 0x72, 0x74, 0x66], mime: 'text/rtf' }, // RTF\n];\n\n/** Extension to MIME type mapping */\nconst EXTENSION_MIME_MAP: Record<string, string> = {\n // Documents\n '.pdf': 'application/pdf',\n '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n '.xls': 'application/vnd.ms-excel',\n '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n '.csv': 'text/csv',\n '.tsv': 'text/tab-separated-values',\n // Images\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.gif': 'image/gif',\n '.webp': 'image/webp',\n '.bmp': 'image/bmp',\n '.svg': 'image/svg+xml',\n '.ico': 'image/x-icon',\n '.tiff': 'image/tiff',\n '.tif': 'image/tiff',\n // Media\n '.mp4': 'video/mp4',\n '.webm': 'video/webm',\n '.ogg': 'audio/ogg',\n '.ogv': 'video/ogg',\n '.mov': 'video/quicktime',\n '.mp3': 'audio/mpeg',\n '.wav': 'audio/wav',\n '.aac': 'audio/aac',\n '.flac': 'audio/flac',\n // Code/Text\n '.txt': 'text/plain',\n '.log': 'text/plain',\n '.json': 'application/json',\n '.xml': 'application/xml',\n '.html': 'text/html',\n '.htm': 'text/html',\n '.css': 'text/css',\n '.js': 'text/javascript',\n '.ts': 'text/typescript',\n '.jsx': 'text/jsx',\n '.tsx': 'text/tsx',\n '.py': 'text/x-python',\n '.java': 'text/x-java',\n '.c': 'text/x-c',\n '.cpp': 'text/x-c++',\n '.h': 'text/x-c',\n '.go': 'text/x-go',\n '.rs': 'text/x-rust',\n '.rb': 'text/x-ruby',\n '.php': 'text/x-php',\n '.sh': 'text/x-shellscript',\n '.bash': 'text/x-shellscript',\n '.sql': 'text/x-sql',\n '.yaml': 'text/yaml',\n '.yml': 'text/yaml',\n '.toml': 'text/toml',\n '.ini': 'text/ini',\n '.conf': 'text/plain',\n '.env': 'text/plain',\n '.md': 'text/markdown',\n '.scss': 'text/x-scss',\n '.less': 'text/x-less',\n '.vue': 'text/x-vue',\n '.svelte': 'text/x-svelte',\n '.dart': 'text/x-dart',\n '.kt': 'text/x-kotlin',\n '.swift': 'text/x-swift',\n '.r': 'text/x-r',\n '.scala': 'text/x-scala',\n '.lua': 'text/x-lua',\n '.perl': 'text/x-perl',\n '.pl': 'text/x-perl',\n};\n\n/**\n * Detect MIME type from file buffer magic bytes.\n */\nexport function detectMagicBytes(buffer: ArrayBuffer): string | null {\n const bytes = new Uint8Array(buffer.slice(0, 16));\n\n for (const sig of MAGIC_NUMBERS) {\n const offset = sig.offset ?? 0;\n let match = true;\n for (let i = 0; i < sig.bytes.length; i++) {\n const actual = bytes[offset + i];\n const expected = sig.bytes[i];\n const mask = sig.mask?.[i] ?? 0xFF;\n if ((actual & mask) !== expected) {\n match = false;\n break;\n }\n }\n if (match) {\n // Special case: RIFF could be WAV or WebP\n if (sig.mime === 'audio/wav' && bytes.length >= 12) {\n const format = String.fromCharCode(bytes[8], bytes[9], bytes[10], bytes[11]);\n if (format === 'WEBP') return 'image/webp';\n if (format === 'AVI ') return 'video/x-msvideo';\n return 'audio/wav';\n }\n return sig.mime;\n }\n }\n\n return null;\n}\n\n/**\n * Detect OOXML sub-type (docx vs xlsx vs pptx) by checking ZIP entry names.\n * All OOXML formats use ZIP container with PK header.\n */\nexport function detectOoxmlType(buffer: ArrayBuffer): string | null {\n const text = new TextDecoder('ascii', { fatal: false }).decode(\n new Uint8Array(buffer.slice(0, 4000))\n );\n\n if (text.includes('word/')) {\n return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n }\n if (text.includes('xl/')) {\n return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n }\n if (text.includes('ppt/')) {\n return 'application/vnd.openxmlformats-officedocument.presentationml.presentation';\n }\n\n return 'application/zip';\n}\n\n/**\n * Extract file extension from a filename or URL.\n */\nexport function extractExtension(nameOrUrl: string): string | undefined {\n try {\n // Try as URL first\n const url = new URL(nameOrUrl);\n const pathname = url.pathname;\n const dotIndex = pathname.lastIndexOf('.');\n if (dotIndex !== -1) {\n return pathname.slice(dotIndex).toLowerCase().split('?')[0];\n }\n } catch {\n // Not a URL, try as filename\n const dotIndex = nameOrUrl.lastIndexOf('.');\n if (dotIndex !== -1) {\n return nameOrUrl.slice(dotIndex).toLowerCase();\n }\n }\n return undefined;\n}\n\n/**\n * Get MIME type from file extension.\n */\nexport function mimeFromExtension(extension: string): string | undefined {\n return EXTENSION_MIME_MAP[extension.toLowerCase()];\n}\n\n/**\n * Convert any FileSource to ArrayBuffer.\n */\nexport async function sourceToArrayBuffer(\n source: FileSource,\n signal?: AbortSignal\n): Promise<{ buffer: ArrayBuffer; metadata: FileMetadata }> {\n let buffer: ArrayBuffer;\n const metadata: FileMetadata = {};\n\n if (typeof source === 'string') {\n // URL string\n metadata.name = source.split('/').pop()?.split('?')[0];\n metadata.extension = extractExtension(source);\n\n const response = await fetch(source, { signal });\n if (!response.ok) {\n throw new Error(`Failed to fetch file: ${response.status} ${response.statusText}`);\n }\n metadata.mimeType = response.headers.get('content-type') ?? undefined;\n buffer = await response.arrayBuffer();\n } else if (source instanceof File) {\n metadata.name = source.name;\n metadata.size = source.size;\n metadata.mimeType = source.type || undefined;\n metadata.extension = extractExtension(source.name);\n buffer = await source.arrayBuffer();\n } else if (source instanceof Blob) {\n metadata.size = source.size;\n metadata.mimeType = source.type || undefined;\n buffer = await source.arrayBuffer();\n } else if (source instanceof ArrayBuffer) {\n buffer = source;\n } else if (source instanceof Uint8Array) {\n buffer = source.buffer.slice(\n source.byteOffset,\n source.byteOffset + source.byteLength\n ) as ArrayBuffer;\n } else {\n throw new Error('Unsupported file source type');\n }\n\n metadata.size = metadata.size ?? buffer.byteLength;\n\n // Detect MIME from magic bytes if not already known\n const magicMime = detectMagicBytes(buffer);\n if (magicMime) {\n // Special handling for ZIP-based OOXML\n if (magicMime === 'application/zip') {\n const ooxmlMime = detectOoxmlType(buffer);\n if (ooxmlMime && ooxmlMime !== 'application/zip') {\n metadata.mimeType = ooxmlMime;\n // Set extension from OOXML type\n if (ooxmlMime.includes('wordprocessing')) metadata.extension = metadata.extension ?? '.docx';\n else if (ooxmlMime.includes('spreadsheet')) metadata.extension = metadata.extension ?? '.xlsx';\n else if (ooxmlMime.includes('presentation')) metadata.extension = metadata.extension ?? '.pptx';\n } else {\n metadata.mimeType = metadata.mimeType ?? magicMime;\n }\n } else {\n metadata.mimeType = magicMime;\n }\n }\n\n // Fallback: derive MIME from extension\n if (!metadata.mimeType && metadata.extension) {\n metadata.mimeType = mimeFromExtension(metadata.extension);\n }\n\n return { buffer, metadata };\n}\n","import DOMPurify from 'dompurify';\n\n/**\n * Sanitize HTML string using DOMPurify to prevent XSS.\n */\nexport function sanitizeHTML(html: string): string {\n return DOMPurify.sanitize(html, {\n USE_PROFILES: { html: true },\n });\n}\n\n/**\n * Sanitize SVG string using DOMPurify.\n */\nexport function sanitizeSVG(svg: string): string {\n return DOMPurify.sanitize(svg, {\n USE_PROFILES: { svg: true, svgFilters: true },\n });\n}\n\n/**\n * Download a file from an ArrayBuffer.\n */\nexport function downloadFile(buffer: ArrayBuffer, filename: string, mimeType?: string): void {\n const blob = new Blob([buffer], { type: mimeType ?? 'application/octet-stream' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n link.style.display = 'none';\n document.body.appendChild(link);\n link.click();\n // Cleanup\n setTimeout(() => {\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n }, 100);\n}\n\n/**\n * Print an HTML element by opening a print window.\n */\nexport function printElement(element: HTMLElement, title?: string): void {\n const printWindow = window.open('', '_blank');\n if (!printWindow) {\n console.warn('[FilePreview] Could not open print window. Pop-ups may be blocked.');\n return;\n }\n\n const styles = Array.from(document.querySelectorAll('style, link[rel=\"stylesheet\"]'))\n .map(el => el.outerHTML)\n .join('\\n');\n\n printWindow.document.write(`\n <!DOCTYPE html>\n <html>\n <head>\n <title>${title ?? 'Print Preview'}</title>\n ${styles}\n <style>\n @media print {\n body { margin: 0; padding: 16px; }\n }\n </style>\n </head>\n <body>\n ${element.innerHTML}\n </body>\n </html>\n `);\n printWindow.document.close();\n printWindow.focus();\n printWindow.print();\n printWindow.close();\n}\n\n/**\n * Format file size in human-readable format.\n */\nexport function formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 B';\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\n const size = bytes / Math.pow(1024, i);\n return `${size.toFixed(i > 0 ? 1 : 0)} ${units[i]}`;\n}\n\n/**\n * Debounce a function call.\n */\nexport function debounce<T extends (...args: unknown[]) => void>(\n fn: T,\n delay: number\n): (...args: Parameters<T>) => void {\n let timer: ReturnType<typeof setTimeout> | undefined;\n return (...args: Parameters<T>) => {\n clearTimeout(timer);\n timer = setTimeout(() => fn(...args), delay);\n };\n}\n\n/**\n * Clamp a number between min and max.\n */\nexport function clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Create a DOM element with optional attributes and children.\n */\nexport function createElement<K extends keyof HTMLElementTagNameMap>(\n tag: K,\n attrs?: Record<string, string>,\n ...children: (string | Node)[]\n): HTMLElementTagNameMap[K] {\n const el = document.createElement(tag);\n if (attrs) {\n for (const [key, value] of Object.entries(attrs)) {\n if (key === 'className') {\n el.className = value;\n } else {\n el.setAttribute(key, value);\n }\n }\n }\n for (const child of children) {\n if (typeof child === 'string') {\n el.appendChild(document.createTextNode(child));\n } else {\n el.appendChild(child);\n }\n }\n return el;\n}\n","export const ICON_ZOOM_IN = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line><line x1=\"11\" y1=\"8\" x2=\"11\" y2=\"14\"></line><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"></line></svg>`;\nexport const ICON_ZOOM_OUT = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"></line></svg>`;\nexport const ICON_FIT_PAGE = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"15 3 21 3 21 9\"></polyline><polyline points=\"9 21 3 21 3 15\"></polyline><line x1=\"21\" y1=\"3\" x2=\"14\" y2=\"10\"></line><line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\"></line></svg>`;\nexport const ICON_ROTATE_CW = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"23 4 23 10 17 10\"></polyline><path d=\"M20.49 15a9 9 0 1 1-2.12-9.36L23 10\"></path></svg>`;\nexport const ICON_ROTATE_CCW = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"1 4 1 10 7 10\"></polyline><path d=\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\"></path></svg>`;\nexport const ICON_DOWNLOAD = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path><polyline points=\"7 10 12 15 17 10\"></polyline><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line></svg>`;\nexport const ICON_PRINT = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 6 2 18 2 18 9\"></polyline><path d=\"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2\"></path><rect x=\"6\" y=\"14\" width=\"12\" height=\"8\"></rect></svg>`;\nexport const ICON_PAGE_PREV = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"15 18 9 12 15 6\"></polyline></svg>`;\nexport const ICON_PAGE_NEXT = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"9 18 15 12 9 6\"></polyline></svg>`;\nexport const ICON_PLAY = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"5 3 19 12 5 21 5 3\"></polygon></svg>`;\nexport const ICON_PAUSE = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"6\" y=\"4\" width=\"4\" height=\"16\"></rect><rect x=\"14\" y=\"4\" width=\"4\" height=\"16\"></rect></svg>`;\nexport const ICON_THUMBNAILS = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"></rect><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"></rect><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"></rect><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"></rect></svg>`;\nexport const ICON_CLOSE = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line></svg>`;\nexport const ICON_FULLSCREEN = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"></path></svg>`;\nexport const ICON_CHEVRON_LEFT = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"15 18 9 12 15 6\"></polyline></svg>`;\nexport const ICON_CHEVRON_RIGHT = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"9 18 15 12 9 6\"></polyline></svg>`;\n","import './toolbar.css';\nimport { createElement, sanitizeSVG } from '../utils';\nimport type { ToolbarAction, ToolbarGroup } from '../types';\nimport * as icons from './icons';\n\nexport class ToolbarController {\n private el: HTMLElement;\n private toolbarEl: HTMLElement;\n private actions: ToolbarAction[] = [];\n\n constructor(container: HTMLElement) {\n this.el = container;\n this.toolbarEl = createElement('div', { className: 'fp-toolbar' });\n this.el.appendChild(this.toolbarEl);\n }\n\n update(actions: ToolbarAction[]): void {\n this.actions = actions;\n this.render();\n }\n\n show(): void {\n this.el.style.display = 'block';\n }\n\n hide(): void {\n this.el.style.display = 'none';\n }\n\n destroy(): void {\n this.el.innerHTML = '';\n }\n\n private render(): void {\n this.toolbarEl.innerHTML = '';\n\n const groups: Record<ToolbarGroup, ToolbarAction[]> = {\n navigation: [],\n zoom: [],\n view: [],\n actions: []\n };\n\n for (const action of this.actions) {\n if (groups[action.group]) {\n groups[action.group].push(action);\n }\n }\n\n const order: ToolbarGroup[] = ['navigation', 'zoom', 'view', 'actions'];\n let isFirstGroup = true;\n\n for (const group of order) {\n const groupActions = groups[group];\n if (groupActions.length === 0) continue;\n\n if (!isFirstGroup) {\n this.toolbarEl.appendChild(createElement('div', { className: 'fp-toolbar-separator' }));\n }\n isFirstGroup = false;\n\n const groupEl = createElement('div', { className: 'fp-toolbar-group' });\n\n for (const action of groupActions) {\n if (action.type === 'separator') {\n groupEl.appendChild(createElement('div', { className: 'fp-toolbar-separator' }));\n } else if (action.type === 'page-nav') {\n const prevBtn = this.createButton(\n 'prev', icons.ICON_PAGE_PREV, 'Previous Page',\n () => action.execute('prev')\n );\n const nextBtn = this.createButton(\n 'next', icons.ICON_PAGE_NEXT, 'Next Page',\n () => action.execute('next')\n );\n const input = createElement('input', {\n className: 'fp-toolbar-input',\n type: 'number',\n value: (action.value ?? 1).toString(),\n min: '1',\n max: (action.max ?? 1).toString()\n }) as HTMLInputElement;\n \n input.addEventListener('change', () => {\n action.execute('go', parseInt(input.value, 10));\n });\n \n const label = createElement('span', { className: 'fp-toolbar-label' }, ` / ${action.max ?? 1}`);\n \n groupEl.appendChild(prevBtn);\n groupEl.appendChild(input);\n groupEl.appendChild(label);\n groupEl.appendChild(nextBtn);\n } else if (action.type === 'range') {\n const input = createElement('input', {\n type: 'range',\n min: (action.min ?? 0).toString(),\n max: (action.max ?? 100).toString(),\n step: (action.step ?? 1).toString(),\n value: (action.value ?? 50).toString()\n }) as HTMLInputElement;\n input.addEventListener('input', () => {\n action.execute(parseFloat(input.value));\n });\n groupEl.appendChild(input);\n } else {\n const btn = this.createButton(\n action.id, action.icon, action.label,\n () => action.execute()\n );\n if (action.enabled === false) btn.disabled = true;\n if (action.active) btn.classList.add('active');\n groupEl.appendChild(btn);\n }\n }\n\n this.toolbarEl.appendChild(groupEl);\n }\n }\n\n private createButton(id: string, iconHtml: string, title: string, onClick: () => void): HTMLButtonElement {\n const btn = createElement('button', {\n className: 'fp-toolbar-btn',\n title,\n type: 'button',\n 'data-action-id': id\n }) as HTMLButtonElement;\n \n if (iconHtml.startsWith('<svg')) {\n btn.innerHTML = sanitizeSVG(iconHtml);\n } else {\n btn.textContent = iconHtml; \n }\n \n btn.addEventListener('click', onClick);\n return btn;\n }\n}\n","import { createElement } from '../utils';\nimport type { Thumbnail } from '../types';\n\nexport class ThumbnailPanel {\n private el: HTMLElement;\n private panelEl: HTMLElement;\n private thumbnails: Thumbnail[] = [];\n private onSelect?: (index: number) => void;\n private activeIndex: number = 0;\n\n constructor(container: HTMLElement) {\n this.el = container;\n this.panelEl = createElement('div', { className: 'fp-thumbnail-panel hidden' });\n this.el.appendChild(this.panelEl);\n }\n\n update(thumbnails: Thumbnail[], onSelect: (index: number) => void): void {\n this.thumbnails = thumbnails;\n this.onSelect = onSelect;\n this.render();\n }\n\n setActive(index: number): void {\n this.activeIndex = index;\n const items = this.panelEl.querySelectorAll('.fp-thumbnail-item');\n items.forEach((item, i) => {\n if (i === index) {\n item.classList.add('active');\n } else {\n item.classList.remove('active');\n }\n });\n }\n\n show(): void {\n this.panelEl.classList.remove('hidden');\n }\n\n hide(): void {\n this.panelEl.classList.add('hidden');\n }\n\n toggle(): void {\n this.panelEl.classList.toggle('hidden');\n }\n\n destroy(): void {\n this.el.innerHTML = '';\n }\n\n private async render(): Promise<void> {\n this.panelEl.innerHTML = '';\n\n for (let i = 0; i < this.thumbnails.length; i++) {\n const thumb = this.thumbnails[i];\n const itemEl = createElement('div', { className: 'fp-thumbnail-item' });\n if (i === this.activeIndex) {\n itemEl.classList.add('active');\n }\n\n itemEl.addEventListener('click', () => {\n this.setActive(i);\n this.onSelect?.(i);\n });\n\n const canvas = createElement('canvas', { width: '150', height: '200' }) as HTMLCanvasElement;\n const label = createElement('span', { className: 'fp-thumbnail-label' }, thumb.label);\n\n itemEl.appendChild(canvas);\n itemEl.appendChild(label);\n this.panelEl.appendChild(itemEl);\n\n try {\n await thumb.render(canvas);\n } catch (err) {\n console.error(`[FilePreview] Error rendering thumbnail ${i}:`, err);\n }\n }\n }\n}\n","import { EventEmitter } from './events';\nimport { sourceToArrayBuffer } from './detect';\nimport { ToolbarController } from './toolbar/toolbar-controller';\nimport { ThumbnailPanel } from './thumbnail/thumbnail-panel';\nimport type {\n FileSource,\n PreviewPlugin,\n PreviewInstance,\n PreviewViewerOptions,\n FileInfo,\n EventHandler,\n Unsubscribe,\n} from './types';\n\n/**\n * Main file preview viewer engine.\n * Manages plugins, rendering lifecycle, toolbar, and thumbnails.\n */\nexport class FilePreviewViewer {\n private plugins: PreviewPlugin[] = [];\n private activeInstance: PreviewInstance | null = null;\n private abortController: AbortController | null = null;\n private eventEmitter = new EventEmitter();\n private toolbar: ToolbarController | null = null;\n private thumbnailPanel: ThumbnailPanel | null = null;\n private wrapperEl: HTMLElement | null = null;\n private contentEl: HTMLElement | null = null;\n private currentBuffer: ArrayBuffer | null = null;\n private currentMetadata: import('./types').FileMetadata | null = null;\n\n /**\n * Register a preview plugin.\n */\n registerPlugin(plugin: PreviewPlugin): this {\n this.plugins.push(plugin);\n // Sort by weight descending (higher weight = higher priority)\n this.plugins.sort((a, b) => (b.weight ?? 0) - (a.weight ?? 0));\n return this;\n }\n\n /**\n * Register multiple plugins at once.\n */\n registerPlugins(plugins: PreviewPlugin[]): this {\n for (const plugin of plugins) {\n this.registerPlugin(plugin);\n }\n return this;\n }\n\n /**\n * Preview a file in the given container element.\n */\n async preview(\n container: HTMLElement,\n source: FileSource,\n options: PreviewViewerOptions = {}\n ): Promise<PreviewInstance> {\n // 1. Abort any in-flight operation\n this.abort();\n this.abortController = new AbortController();\n const { signal } = this.abortController;\n\n // 2. Destroy existing instance\n this.destroyInstance();\n\n // 3. Setup wrapper DOM structure\n this.setupDOM(container, options);\n\n // 4. Emit loading event\n this.eventEmitter.emit('loading', { source });\n this.showLoading();\n\n try {\n // 5. Normalize source to ArrayBuffer + metadata\n const { buffer, metadata } = await sourceToArrayBuffer(source, signal);\n this.currentBuffer = buffer;\n this.currentMetadata = metadata;\n\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError');\n\n // 6. Find matching plugin\n const fileInfo: FileInfo = { metadata, buffer };\n const matchedPlugin = await this.findPlugin(fileInfo);\n\n if (!matchedPlugin) {\n throw new Error(\n `Unsupported file type: ${metadata.extension ?? metadata.mimeType ?? 'unknown'}`\n );\n }\n\n if (signal.aborted) throw new DOMException('Aborted', 'AbortError');\n\n // 7. Clear content area and render\n if (this.contentEl) {\n this.contentEl.innerHTML = '';\n }\n\n const instance = await matchedPlugin.render({\n container: this.contentEl!,\n source,\n metadata,\n buffer,\n options,\n signal,\n emit: (event, payload) => this.eventEmitter.emit(event, payload),\n });\n\n this.activeInstance = instance;\n\n // 8. Setup toolbar with plugin's actions\n if (options.showToolbar !== false && this.toolbar) {\n const actions = matchedPlugin.getToolbarActions(instance);\n this.toolbar.update(actions);\n this.toolbar.show();\n }\n\n // 9. Setup thumbnails if plugin supports them\n if (instance.getThumbnails && this.thumbnailPanel) {\n const thumbnails = await Promise.resolve(instance.getThumbnails());\n if (thumbnails && thumbnails.length > 0) {\n this.thumbnailPanel.update(thumbnails, (index) => {\n instance.goToPage?.(index + 1);\n });\n if (options.showThumbnails) {\n this.thumbnailPanel.show();\n }\n }\n }\n\n this.hideLoading();\n this.eventEmitter.emit('loaded', { metadata, plugin: matchedPlugin.id });\n\n return instance;\n } catch (error: unknown) {\n this.hideLoading();\n if (error instanceof DOMException && error.name === 'AbortError') {\n throw error;\n }\n this.showError(error instanceof Error ? error.message : 'Failed to preview file');\n this.eventEmitter.emit('error', error);\n throw error;\n }\n }\n\n /**\n * Subscribe to viewer events.\n */\n on(event: string, handler: EventHandler): Unsubscribe {\n return this.eventEmitter.on(event, handler);\n }\n\n /**\n * Destroy the viewer and clean up all resources.\n */\n destroy(): void {\n this.abort();\n this.destroyInstance();\n this.toolbar?.destroy();\n this.thumbnailPanel?.destroy();\n this.eventEmitter.emit('destroy', null);\n this.eventEmitter.removeAll();\n\n if (this.wrapperEl?.parentNode) {\n this.wrapperEl.parentNode.removeChild(this.wrapperEl);\n }\n this.wrapperEl = null;\n this.contentEl = null;\n this.toolbar = null;\n this.thumbnailPanel = null;\n this.currentBuffer = null;\n this.currentMetadata = null;\n }\n\n /**\n * Get the currently active preview instance.\n */\n getInstance(): PreviewInstance | null {\n return this.activeInstance;\n }\n\n // --- Private methods ---\n\n private abort(): void {\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = null;\n }\n }\n\n private destroyInstance(): void {\n if (this.activeInstance) {\n this.activeInstance.destroy();\n this.activeInstance = null;\n }\n }\n\n private async findPlugin(fileInfo: FileInfo): Promise<PreviewPlugin | null> {\n for (const plugin of this.plugins) {\n const result = plugin.supports(fileInfo);\n const supports = result instanceof Promise ? await result : result;\n if (supports) return plugin;\n }\n return null;\n }\n\n private setupDOM(container: HTMLElement, options: PreviewViewerOptions): void {\n // Only setup once, or re-setup if container changed\n if (this.wrapperEl?.parentNode === container) return;\n\n // Clean up old wrapper\n if (this.wrapperEl?.parentNode) {\n this.wrapperEl.parentNode.removeChild(this.wrapperEl);\n }\n\n // Create wrapper structure\n const themeClass = options.theme === 'dark' ? 'fp-theme-dark' : '';\n const toolbarPos = options.toolbarPosition ?? 'top';\n\n this.wrapperEl = document.createElement('div');\n this.wrapperEl.className = `fp-viewer ${themeClass} ${options.className ?? ''}`.trim();\n\n // Toolbar container\n const toolbarEl = document.createElement('div');\n toolbarEl.className = 'fp-toolbar-container';\n\n // Content area (where the plugin renders)\n this.contentEl = document.createElement('div');\n this.contentEl.className = 'fp-content';\n\n // Thumbnail panel\n const thumbnailEl = document.createElement('div');\n thumbnailEl.className = 'fp-thumbnail-container';\n\n // Assemble\n const bodyEl = document.createElement('div');\n bodyEl.className = 'fp-body';\n bodyEl.appendChild(thumbnailEl);\n bodyEl.appendChild(this.contentEl);\n\n if (toolbarPos === 'top') {\n this.wrapperEl.appendChild(toolbarEl);\n this.wrapperEl.appendChild(bodyEl);\n } else {\n this.wrapperEl.appendChild(bodyEl);\n this.wrapperEl.appendChild(toolbarEl);\n }\n\n container.innerHTML = '';\n container.appendChild(this.wrapperEl);\n\n // Initialize toolbar and thumbnail controllers\n this.toolbar = new ToolbarController(toolbarEl);\n this.thumbnailPanel = new ThumbnailPanel(thumbnailEl);\n }\n\n private showLoading(): void {\n if (!this.contentEl) return;\n const loader = document.createElement('div');\n loader.className = 'fp-loading';\n loader.innerHTML = '<div class=\"fp-spinner\"></div><span>Loading preview...</span>';\n this.contentEl.appendChild(loader);\n }\n\n private hideLoading(): void {\n if (!this.contentEl) return;\n const loader = this.contentEl.querySelector('.fp-loading');\n if (loader) loader.remove();\n }\n\n private showError(message: string): void {\n if (!this.contentEl) return;\n this.contentEl.innerHTML = '';\n const errorEl = document.createElement('div');\n errorEl.className = 'fp-error';\n errorEl.innerHTML = `\n <div class=\"fp-error-icon\">โš ๏ธ</div>\n <div class=\"fp-error-message\">${message}</div>\n `;\n this.contentEl.appendChild(errorEl);\n }\n}\n","import type { \n FileInfo, \n RenderContext, \n ToolbarAction, \n PreviewPlugin, \n PreviewInstance, \n Thumbnail \n} from '@patel.sumit51/core';\n\nexport class PdfPlugin implements PreviewPlugin {\n id = 'pdf';\n name = 'PDF Preview';\n extensions = ['.pdf'];\n mimeTypes = ['application/pdf'];\n weight = 100;\n\n supports(file: FileInfo): boolean {\n const ext = file.metadata.extension?.toLowerCase();\n const mime = file.metadata.mimeType?.toLowerCase();\n return ext === '.pdf' || mime === 'application/pdf';\n }\n\n getToolbarActions(instance: PreviewInstance): ToolbarAction[] {\n return [\n {\n id: 'zoom-out',\n icon: 'zoom-out',\n label: 'Zoom Out',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomOut?.();\n }\n },\n {\n id: 'zoom-in',\n icon: 'zoom-in',\n label: 'Zoom In',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomIn?.();\n }\n },\n {\n id: 'fit-page',\n icon: 'fit-page',\n label: 'Fit to Page',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.fitToPage?.();\n }\n },\n {\n id: 'rotate-cw',\n icon: 'rotate-cw',\n label: 'Rotate',\n type: 'button',\n group: 'view',\n execute: () => {\n instance.rotateCW?.();\n }\n },\n {\n id: 'page-nav',\n icon: 'page-nav',\n label: 'Page Navigation',\n type: 'page-nav',\n group: 'navigation',\n execute: (page?: unknown) => {\n if (typeof page === 'number') instance.goToPage?.(page);\n }\n },\n {\n id: 'download',\n icon: 'download',\n label: 'Download',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.download?.();\n }\n },\n {\n id: 'print',\n icon: 'print',\n label: 'Print',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.print?.();\n }\n }\n ];\n }\n\n async render(ctx: RenderContext): Promise<PreviewInstance> {\n const blob = new Blob([ctx.buffer], { type: 'application/pdf' });\n const url = URL.createObjectURL(blob);\n \n const wrapper = document.createElement('div');\n wrapper.style.width = '100%';\n wrapper.style.height = '100%';\n wrapper.style.overflow = 'hidden';\n wrapper.style.display = 'flex';\n wrapper.style.justifyContent = 'center';\n wrapper.style.alignItems = 'center';\n\n const iframe = document.createElement('iframe');\n iframe.src = url;\n iframe.style.width = '100%';\n iframe.style.height = '100%';\n iframe.style.border = 'none';\n \n wrapper.appendChild(iframe);\n ctx.container.appendChild(wrapper);\n \n let currentPage = 1;\n let currentZoom = 1.0;\n let rotation = 0;\n\n const cleanup = () => {\n URL.revokeObjectURL(url);\n wrapper.remove();\n ctx.container.innerHTML = '';\n };\n\n ctx.signal.addEventListener('abort', cleanup);\n\n return {\n destroy: cleanup,\n zoomIn: () => {\n currentZoom += 0.1;\n iframe.style.transform = `scale(${currentZoom}) rotate(${rotation}deg)`;\n },\n zoomOut: () => {\n currentZoom = Math.max(0.2, currentZoom - 0.1);\n iframe.style.transform = `scale(${currentZoom}) rotate(${rotation}deg)`;\n },\n getZoom: () => currentZoom,\n setZoom: (level: number) => {\n currentZoom = level;\n iframe.style.transform = `scale(${currentZoom}) rotate(${rotation}deg)`;\n },\n fitToPage: () => {\n currentZoom = 1.0;\n iframe.style.transform = `scale(1) rotate(${rotation}deg)`;\n },\n rotateCW: () => {\n rotation = (rotation + 90) % 360;\n iframe.style.transform = `scale(${currentZoom}) rotate(${rotation}deg)`;\n },\n rotateCCW: () => {\n rotation = (rotation - 90 + 360) % 360;\n iframe.style.transform = `scale(${currentZoom}) rotate(${rotation}deg)`;\n },\n getRotation: () => rotation,\n goToPage: (page: number) => {\n currentPage = page;\n // In iframe viewer, appending #page=N to the hash navigates in native PDF viewer\n iframe.src = `${url}#page=${page}`;\n },\n getCurrentPage: () => currentPage,\n download: () => {\n const a = document.createElement('a');\n a.href = url;\n a.download = ctx.metadata.name || 'document.pdf';\n a.click();\n },\n print: () => {\n iframe.contentWindow?.print();\n },\n getThumbnails: async (): Promise<Thumbnail[]> => {\n return [\n {\n index: 1,\n label: 'Page 1',\n render: async (canvas: HTMLCanvasElement) => {\n const context = canvas.getContext('2d');\n if (context) {\n context.fillStyle = '#fff';\n context.fillRect(0, 0, canvas.width, canvas.height);\n context.fillStyle = '#333';\n context.font = '12px sans-serif';\n context.fillText('PDF Preview', 10, 20);\n }\n }\n }\n ];\n }\n };\n }\n}\n\nexport function pdfPlugin(): PdfPlugin {\n return new PdfPlugin();\n}\n\nexport default PdfPlugin;\n","import type { \n FileInfo, \n RenderContext, \n ToolbarAction, \n PreviewPlugin, \n PreviewInstance \n} from '@patel.sumit51/core';\n\nconst IMAGE_EXTS = ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.svg'];\nconst VIDEO_EXTS = ['.mp4', '.webm', '.ogg'];\nconst AUDIO_EXTS = ['.mp3', '.wav', '.ogg'];\n\nexport class MediaPlugin implements PreviewPlugin {\n id = 'media';\n name = 'Media Preview';\n extensions = [...IMAGE_EXTS, ...VIDEO_EXTS, ...AUDIO_EXTS];\n mimeTypes = [\n 'image/jpeg', 'image/png', 'image/gif', 'image/webp', 'image/svg+xml',\n 'video/mp4', 'video/webm', 'video/ogg',\n 'audio/mpeg', 'audio/wav', 'audio/ogg'\n ];\n weight = 90;\n\n supports(file: FileInfo): boolean {\n const ext = file.metadata.extension?.toLowerCase() || '';\n const mime = file.metadata.mimeType?.toLowerCase() || '';\n \n return this.extensions.includes(ext) || \n this.mimeTypes.some(m => mime.startsWith(m.split('/')[0]));\n }\n\n getToolbarActions(instance: PreviewInstance): ToolbarAction[] {\n const actions: ToolbarAction[] = [];\n \n if (instance.zoomIn) {\n actions.push(\n {\n id: 'zoom-out',\n icon: 'zoom-out',\n label: 'Zoom Out',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomOut?.();\n }\n },\n {\n id: 'zoom-in',\n icon: 'zoom-in',\n label: 'Zoom In',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomIn?.();\n }\n },\n {\n id: 'fit-page',\n icon: 'fit-page',\n label: 'Fit to Page',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.fitToPage?.();\n }\n },\n {\n id: 'rotate-cw',\n icon: 'rotate-cw',\n label: 'Rotate',\n type: 'button',\n group: 'view',\n execute: () => {\n instance.rotateCW?.();\n }\n }\n );\n }\n \n if (instance.play) {\n actions.push(\n {\n id: 'play',\n icon: 'play',\n label: 'Play',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.play?.();\n }\n },\n {\n id: 'pause',\n icon: 'pause',\n label: 'Pause',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.pause?.();\n }\n }\n );\n }\n\n actions.push({\n id: 'download',\n icon: 'download',\n label: 'Download',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.download?.();\n }\n });\n\n if (instance.print) {\n actions.push({\n id: 'print',\n icon: 'print',\n label: 'Print',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.print?.();\n }\n });\n }\n\n return actions;\n }\n\n async render(ctx: RenderContext): Promise<PreviewInstance> {\n const mimeType = ctx.metadata.mimeType || 'application/octet-stream';\n const isImage = mimeType.startsWith('image/') || IMAGE_EXTS.includes(ctx.metadata.extension || '');\n const isVideo = mimeType.startsWith('video/') || VIDEO_EXTS.includes(ctx.metadata.extension || '');\n const isAudio = mimeType.startsWith('audio/') || AUDIO_EXTS.includes(ctx.metadata.extension || '');\n \n let url = '';\n \n if (ctx.metadata.extension === '.svg' || mimeType === 'image/svg+xml') {\n const decoder = new TextDecoder('utf-8');\n const svgText = decoder.decode(ctx.buffer);\n const blob = new Blob([svgText], { type: 'image/svg+xml' });\n url = URL.createObjectURL(blob);\n } else {\n const blob = new Blob([ctx.buffer], { type: mimeType });\n url = URL.createObjectURL(blob);\n }\n \n let element: HTMLElement;\n let currentZoom = 1.0;\n let rotation = 0;\n let mediaElement: HTMLMediaElement | null = null;\n \n if (isImage) {\n const img = document.createElement('img');\n img.src = url;\n img.style.maxWidth = '100%';\n img.style.maxHeight = '100%';\n img.style.objectFit = 'contain';\n img.style.transition = 'transform 0.2s ease';\n element = img;\n } else if (isVideo) {\n const video = document.createElement('video');\n video.src = url;\n video.controls = true;\n video.style.maxWidth = '100%';\n video.style.maxHeight = '100%';\n element = video;\n mediaElement = video;\n } else if (isAudio) {\n const audio = document.createElement('audio');\n audio.src = url;\n audio.controls = true;\n element = audio;\n mediaElement = audio;\n } else {\n element = document.createElement('div');\n element.textContent = 'Unsupported media type';\n }\n \n ctx.container.style.display = 'flex';\n ctx.container.style.alignItems = 'center';\n ctx.container.style.justifyContent = 'center';\n ctx.container.style.overflow = 'hidden';\n ctx.container.appendChild(element);\n\n const applyTransform = () => {\n element.style.transform = `scale(${currentZoom}) rotate(${rotation}deg)`;\n };\n\n const cleanup = () => {\n if (url) URL.revokeObjectURL(url);\n element.remove();\n ctx.container.innerHTML = '';\n };\n\n ctx.signal.addEventListener('abort', cleanup);\n\n return {\n destroy: cleanup,\n zoomIn: isImage ? () => {\n currentZoom += 0.1;\n applyTransform();\n } : undefined,\n zoomOut: isImage ? () => {\n currentZoom = Math.max(0.1, currentZoom - 0.1);\n applyTransform();\n } : undefined,\n getZoom: isImage ? () => currentZoom : undefined,\n setZoom: isImage ? (level: number) => {\n currentZoom = level;\n applyTransform();\n } : undefined,\n fitToPage: isImage ? () => {\n currentZoom = 1.0;\n rotation = 0;\n applyTransform();\n } : undefined,\n rotateCW: isImage || isVideo ? () => {\n rotation = (rotation + 90) % 360;\n applyTransform();\n } : undefined,\n rotateCCW: isImage || isVideo ? () => {\n rotation = (rotation - 90 + 360) % 360;\n applyTransform();\n } : undefined,\n getRotation: () => rotation,\n play: mediaElement ? () => mediaElement?.play() : undefined,\n pause: mediaElement ? () => mediaElement?.pause() : undefined,\n isPlaying: mediaElement ? () => !mediaElement?.paused : undefined,\n download: () => {\n const a = document.createElement('a');\n a.href = url;\n a.download = ctx.metadata.name || 'media';\n a.click();\n },\n print: isImage ? () => {\n window.print();\n } : undefined\n };\n }\n}\n\nexport function mediaPlugin(): MediaPlugin {\n return new MediaPlugin();\n}\n\nexport default MediaPlugin;\n","import type { \n FileInfo, \n RenderContext, \n ToolbarAction, \n PreviewPlugin, \n PreviewInstance \n} from '@patel.sumit51/core';\nimport * as docx from 'docx-preview';\n\nexport class DocxPlugin implements PreviewPlugin {\n id = 'docx';\n name = 'Word Document Preview';\n extensions = ['.docx'];\n mimeTypes = ['application/vnd.openxmlformats-officedocument.wordprocessingml.document'];\n weight = 80;\n\n supports(file: FileInfo): boolean {\n const ext = file.metadata.extension?.toLowerCase();\n const mime = file.metadata.mimeType?.toLowerCase();\n return ext === '.docx' || this.mimeTypes.includes(mime || '');\n }\n\n getToolbarActions(instance: PreviewInstance): ToolbarAction[] {\n return [\n {\n id: 'zoom-out',\n icon: 'zoom-out',\n label: 'Zoom Out',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomOut?.();\n }\n },\n {\n id: 'zoom-in',\n icon: 'zoom-in',\n label: 'Zoom In',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomIn?.();\n }\n },\n {\n id: 'fit-page',\n icon: 'fit-page',\n label: 'Fit to Page',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.fitToPage?.();\n }\n },\n {\n id: 'download',\n icon: 'download',\n label: 'Download',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.download?.();\n }\n },\n {\n id: 'print',\n icon: 'print',\n label: 'Print',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.print?.();\n }\n }\n ];\n }\n\n async render(ctx: RenderContext): Promise<PreviewInstance> {\n const wrapper = document.createElement('div');\n wrapper.className = 'fp-docx-wrapper';\n wrapper.style.transformOrigin = 'top center';\n wrapper.style.transition = 'transform 0.2s ease';\n wrapper.style.padding = '16px';\n \n ctx.container.style.overflow = 'auto';\n ctx.container.appendChild(wrapper);\n\n let scale = 1.0;\n\n try {\n await docx.renderAsync(ctx.buffer, wrapper, ctx.container, {\n inWrapper: true,\n ignoreWidth: false,\n ignoreHeight: false,\n });\n } catch {\n wrapper.innerHTML = `\n <div style=\"text-align:center; padding: 40px; color: #666;\">\n <div style=\"font-size:48px; margin-bottom: 16px;\">๐Ÿ“„</div>\n <h3>${ctx.metadata.name || 'Word Document'}</h3>\n <p>DOCX render preview</p>\n </div>\n `;\n }\n\n const cleanup = () => {\n wrapper.remove();\n ctx.container.innerHTML = '';\n };\n\n ctx.signal.addEventListener('abort', cleanup);\n\n return {\n destroy: cleanup,\n zoomIn: () => {\n scale += 0.1;\n wrapper.style.transform = `scale(${scale})`;\n },\n zoomOut: () => {\n scale = Math.max(0.2, scale - 0.1);\n wrapper.style.transform = `scale(${scale})`;\n },\n getZoom: () => scale,\n setZoom: (level: number) => {\n scale = level;\n wrapper.style.transform = `scale(${scale})`;\n },\n fitToPage: () => {\n scale = 1.0;\n wrapper.style.transform = `scale(1)`;\n },\n download: () => {\n const blob = new Blob([ctx.buffer], { type: this.mimeTypes[0] });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = ctx.metadata.name || 'document.docx';\n a.click();\n URL.revokeObjectURL(url);\n },\n print: () => {\n window.print();\n }\n };\n }\n}\n\nexport function docxPlugin(): DocxPlugin {\n return new DocxPlugin();\n}\n\nexport default DocxPlugin;\n","import type { \n FileInfo, \n RenderContext, \n ToolbarAction, \n PreviewPlugin, \n PreviewInstance \n} from '@patel.sumit51/core';\nimport ExcelJS from 'exceljs';\n\nexport class ExcelPlugin implements PreviewPlugin {\n id = 'excel';\n name = 'Excel Spreadsheet Preview';\n extensions = ['.xlsx', '.xls'];\n mimeTypes = [\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.ms-excel'\n ];\n weight = 80;\n\n supports(file: FileInfo): boolean {\n const ext = file.metadata.extension?.toLowerCase();\n const mime = file.metadata.mimeType?.toLowerCase();\n return this.extensions.includes(ext || '') || this.mimeTypes.includes(mime || '');\n }\n\n getToolbarActions(instance: PreviewInstance): ToolbarAction[] {\n return [\n {\n id: 'zoom-out',\n icon: 'zoom-out',\n label: 'Zoom Out',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomOut?.();\n }\n },\n {\n id: 'zoom-in',\n icon: 'zoom-in',\n label: 'Zoom In',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomIn?.();\n }\n },\n {\n id: 'page-nav',\n icon: 'page-nav',\n label: 'Sheet Navigation',\n type: 'page-nav',\n group: 'navigation',\n execute: (sheet?: unknown) => {\n if (typeof sheet === 'number') instance.goToPage?.(sheet);\n }\n },\n {\n id: 'download',\n icon: 'download',\n label: 'Download',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.download?.();\n }\n },\n {\n id: 'print',\n icon: 'print',\n label: 'Print',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.print?.();\n }\n }\n ];\n }\n\n async render(ctx: RenderContext): Promise<PreviewInstance> {\n const container = document.createElement('div');\n container.style.display = 'flex';\n container.style.flexDirection = 'column';\n container.style.width = '100%';\n container.style.height = '100%';\n container.style.overflow = 'hidden';\n\n const contentArea = document.createElement('div');\n contentArea.style.flex = '1';\n contentArea.style.overflow = 'auto';\n contentArea.style.padding = '16px';\n contentArea.style.transformOrigin = 'top left';\n\n const tabsArea = document.createElement('div');\n tabsArea.style.display = 'flex';\n tabsArea.style.gap = '8px';\n tabsArea.style.padding = '8px 16px';\n tabsArea.style.borderTop = '1px solid #e0e0e0';\n tabsArea.style.backgroundColor = '#fafafa';\n tabsArea.style.overflowX = 'auto';\n\n container.appendChild(contentArea);\n container.appendChild(tabsArea);\n ctx.container.appendChild(container);\n\n let scale = 1.0;\n let currentSheetIndex = 1;\n const workbook = new ExcelJS.Workbook();\n\n try {\n await workbook.xlsx.load(ctx.buffer);\n } catch {\n // Fallback\n }\n\n const renderSheet = (index: number) => {\n contentArea.innerHTML = '';\n const sheet = workbook.getWorksheet(index);\n if (!sheet) return;\n\n const table = document.createElement('table');\n table.style.borderCollapse = 'collapse';\n table.style.fontFamily = 'sans-serif';\n table.style.fontSize = '13px';\n table.style.minWidth = '100%';\n\n sheet.eachRow({ includeEmpty: false }, (row) => {\n const tr = document.createElement('tr');\n row.eachCell({ includeEmpty: true }, (cell) => {\n const td = document.createElement('td');\n td.style.border = '1px solid #d0d7de';\n td.style.padding = '6px 12px';\n td.textContent = cell.text || '';\n tr.appendChild(td);\n });\n table.appendChild(tr);\n });\n\n contentArea.appendChild(table);\n currentSheetIndex = index;\n };\n\n workbook.worksheets.forEach((sheet, idx) => {\n const btn = document.createElement('button');\n btn.textContent = sheet.name;\n btn.style.padding = '4px 12px';\n btn.style.fontSize = '12px';\n btn.style.cursor = 'pointer';\n btn.style.border = '1px solid #ccc';\n btn.style.borderRadius = '4px';\n btn.style.backgroundColor = '#fff';\n btn.onclick = () => renderSheet(idx + 1);\n tabsArea.appendChild(btn);\n });\n\n if (workbook.worksheets.length > 0) {\n renderSheet(1);\n }\n\n const cleanup = () => {\n container.remove();\n ctx.container.innerHTML = '';\n };\n\n ctx.signal.addEventListener('abort', cleanup);\n\n return {\n destroy: cleanup,\n zoomIn: () => {\n scale += 0.1;\n contentArea.style.transform = `scale(${scale})`;\n },\n zoomOut: () => {\n scale = Math.max(0.2, scale - 0.1);\n contentArea.style.transform = `scale(${scale})`;\n },\n getZoom: () => scale,\n setZoom: (level: number) => {\n scale = level;\n contentArea.style.transform = `scale(${scale})`;\n },\n goToPage: (page: number) => {\n if (page > 0 && page <= workbook.worksheets.length) {\n renderSheet(page);\n }\n },\n getPageCount: () => workbook.worksheets.length,\n getCurrentPage: () => currentSheetIndex,\n download: () => {\n const blob = new Blob([ctx.buffer], { type: this.mimeTypes[0] });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = ctx.metadata.name || 'spreadsheet.xlsx';\n a.click();\n URL.revokeObjectURL(url);\n },\n print: () => {\n window.print();\n }\n };\n }\n}\n\nexport function excelPlugin(): ExcelPlugin {\n return new ExcelPlugin();\n}\n\nexport default ExcelPlugin;\n","import type { \n FileInfo, \n RenderContext, \n ToolbarAction, \n PreviewPlugin, \n PreviewInstance \n} from '@patel.sumit51/core';\n\nexport class CsvPlugin implements PreviewPlugin {\n id = 'csv';\n name = 'CSV Preview';\n extensions = ['.csv', '.tsv'];\n mimeTypes = ['text/csv', 'text/tab-separated-values'];\n weight = 80;\n\n supports(file: FileInfo): boolean {\n const ext = file.metadata.extension?.toLowerCase();\n const mime = file.metadata.mimeType?.toLowerCase();\n return ext === '.csv' || ext === '.tsv' || mime === 'text/csv' || mime === 'text/tab-separated-values';\n }\n\n getToolbarActions(instance: PreviewInstance): ToolbarAction[] {\n return [\n {\n id: 'zoom-out',\n icon: 'zoom-out',\n label: 'Zoom Out',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomOut?.();\n }\n },\n {\n id: 'zoom-in',\n icon: 'zoom-in',\n label: 'Zoom In',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomIn?.();\n }\n },\n {\n id: 'download',\n icon: 'download',\n label: 'Download',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.download?.();\n }\n },\n {\n id: 'print',\n icon: 'print',\n label: 'Print',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.print?.();\n }\n }\n ];\n }\n\n async render(ctx: RenderContext): Promise<PreviewInstance> {\n const decoder = new TextDecoder('utf-8');\n const text = decoder.decode(ctx.buffer);\n \n const container = document.createElement('div');\n container.style.width = '100%';\n container.style.height = '100%';\n container.style.overflow = 'auto';\n container.style.padding = '16px';\n container.style.boxSizing = 'border-box';\n container.style.transformOrigin = 'top left';\n \n const table = document.createElement('table');\n table.style.borderCollapse = 'collapse';\n table.style.width = '100%';\n table.style.fontFamily = 'monospace';\n table.style.fontSize = '13px';\n \n const delimiter = ctx.metadata.extension === '.tsv' ? '\\t' : ',';\n const rows = text.split(/\\r?\\n/).slice(0, 500); \n \n rows.forEach((row, rowIndex) => {\n if (!row.trim()) return;\n const tr = document.createElement('tr');\n const cells = row.split(delimiter);\n \n cells.forEach(cell => {\n const td = document.createElement(rowIndex === 0 ? 'th' : 'td');\n td.textContent = cell.trim();\n td.style.border = '1px solid #d0d7de';\n td.style.padding = '6px 12px';\n if (rowIndex === 0) {\n td.style.backgroundColor = '#f6f8fa';\n td.style.fontWeight = 'bold';\n }\n tr.appendChild(td);\n });\n table.appendChild(tr);\n });\n \n container.appendChild(table);\n ctx.container.appendChild(container);\n\n let scale = 1.0;\n\n const cleanup = () => {\n container.remove();\n ctx.container.innerHTML = '';\n };\n\n ctx.signal.addEventListener('abort', cleanup);\n\n return {\n destroy: cleanup,\n zoomIn: () => {\n scale += 0.1;\n container.style.transform = `scale(${scale})`;\n },\n zoomOut: () => {\n scale = Math.max(0.2, scale - 0.1);\n container.style.transform = `scale(${scale})`;\n },\n getZoom: () => scale,\n setZoom: (level: number) => {\n scale = level;\n container.style.transform = `scale(${scale})`;\n },\n fitToPage: () => {\n scale = 1.0;\n container.style.transform = `scale(1)`;\n },\n download: () => {\n const blob = new Blob([ctx.buffer], { type: 'text/csv' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = ctx.metadata.name || 'data.csv';\n a.click();\n URL.revokeObjectURL(url);\n },\n print: () => {\n window.print();\n }\n };\n }\n}\n\nexport function csvPlugin(): CsvPlugin {\n return new CsvPlugin();\n}\n\nexport default CsvPlugin;\n","import type { \n FileInfo, \n RenderContext, \n ToolbarAction, \n PreviewPlugin, \n PreviewInstance \n} from '@patel.sumit51/core';\nimport hljs from 'highlight.js';\n\nconst CODE_EXTENSIONS = [\n '.txt', '.json', '.js', '.ts', '.jsx', '.tsx', '.html', '.css', '.scss', '.less',\n '.md', '.xml', '.yml', '.yaml', '.sh', '.bash', '.py', \n '.java', '.c', '.cpp', '.h', '.cs', '.go', '.rs', '.sql', '.php'\n];\n\nexport class CodePlugin implements PreviewPlugin {\n id = 'code';\n name = 'Code/Text Preview';\n extensions = CODE_EXTENSIONS;\n mimeTypes = ['text/plain', 'application/json', 'text/javascript', 'text/html', 'text/css'];\n weight = 50; \n\n supports(file: FileInfo): boolean {\n const ext = file.metadata.extension?.toLowerCase();\n const mime = file.metadata.mimeType?.toLowerCase();\n \n if (ext && this.extensions.includes(ext)) return true;\n if (mime && (mime.startsWith('text/') || this.mimeTypes.includes(mime))) return true;\n \n return false;\n }\n\n getToolbarActions(instance: PreviewInstance): ToolbarAction[] {\n return [\n {\n id: 'zoom-out',\n icon: 'zoom-out',\n label: 'Zoom Out',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomOut?.();\n }\n },\n {\n id: 'zoom-in',\n icon: 'zoom-in',\n label: 'Zoom In',\n type: 'button',\n group: 'zoom',\n execute: () => {\n instance.zoomIn?.();\n }\n },\n {\n id: 'download',\n icon: 'download',\n label: 'Download',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.download?.();\n }\n },\n {\n id: 'print',\n icon: 'print',\n label: 'Print',\n type: 'button',\n group: 'actions',\n execute: () => {\n instance.print?.();\n }\n }\n ];\n }\n\n async render(ctx: RenderContext): Promise<PreviewInstance> {\n const decoder = new TextDecoder('utf-8');\n const text = decoder.decode(ctx.buffer);\n \n const container = document.createElement('div');\n container.style.width = '100%';\n container.style.height = '100%';\n container.style.overflow = 'auto';\n container.style.backgroundColor = '#1e1e1e';\n container.style.color = '#d4d4d4';\n container.style.padding = '16px';\n container.style.boxSizing = 'border-box';\n \n let fontSize = 13;\n const pre = document.createElement('pre');\n pre.style.margin = '0';\n pre.style.fontFamily = 'Consolas, Menlo, Monaco, monospace';\n pre.style.fontSize = `${fontSize}px`;\n pre.style.lineHeight = '1.5';\n pre.style.whiteSpace = 'pre-wrap';\n pre.style.wordBreak = 'break-all';\n\n const code = document.createElement('code');\n const ext = (ctx.metadata.extension || '').replace('.', '');\n\n try {\n if (ext && hljs.getLanguage(ext)) {\n code.innerHTML = hljs.highlight(text, { language: ext }).value;\n } else {\n code.innerHTML = hljs.highlightAuto(text).value;\n }\n } catch {\n code.textContent = text;\n }\n \n pre.appendChild(code);\n container.appendChild(pre);\n ctx.container.appendChild(container);\n\n const cleanup = () => {\n container.remove();\n ctx.container.innerHTML = '';\n };\n\n ctx.signal.addEventListener('abort', cleanup);\n\n return {\n destroy: cleanup,\n zoomIn: () => {\n fontSize = Math.min(32, fontSize + 2);\n pre.style.fontSize = `${fontSize}px`;\n },\n zoomOut: () => {\n fontSize = Math.max(8, fontSize - 2);\n pre.style.fontSize = `${fontSize}px`;\n },\n getZoom: () => fontSize / 13,\n setZoom: (level: number) => {\n fontSize = Math.round(13 * level);\n pre.style.fontSize = `${fontSize}px`;\n },\n download: () => {\n const mimeType = ctx.metadata.mimeType || 'text/plain';\n const blob = new Blob([ctx.buffer], { type: mimeType });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = ctx.metadata.name || 'code.txt';\n a.click();\n URL.revokeObjectURL(url);\n },\n print: () => {\n window.print();\n }\n };\n }\n}\n\nexport function codePlugin(): CodePlugin {\n return new CodePlugin();\n}\n\nexport default CodePlugin;\n","import type { \n FileInfo, \n RenderContext, \n ToolbarAction, \n PreviewPlugin, \n PreviewInstance \n} from '@patel.sumit51/core';\nimport { formatFileSize, downloadFile } from '@patel.sumit51/core';\nimport { unzip } from 'fflate';\n\ninterface ArchiveEntry {\n path: string;\n name: string;\n isDir: boolean;\n size: number;\n data?: Uint8Array;\n}\n\nexport class ArchivePlugin implements PreviewPlugin {\n id = 'archive';\n name = 'Archive Explorer';\n extensions = ['.zip'];\n mimeTypes = ['application/zip', 'application/x-zip-compressed'];\n weight = 70;\n\n supports(file: FileInfo): boolean {\n const ext = file.metadata.extension?.toLowerCase();\n const mime = file.metadata.mimeType?.toLowerCase();\n return ext === '.zip' || this.mimeTypes.includes(mime || '');\n }\n\n getToolbarActions(instance: PreviewInstance): ToolbarAction[] {\n return [\n {\n id: 'zoom-out',\n icon: 'zoom-out',\n label: 'Zoom Out',\n type: 'button',\n group: 'zoom',\n execute: () => instance.zoomOut?.()\n },\n {\n id: 'zoom-in',\n icon: 'zoom-in',\n label: 'Zoom In',\n type: 'button',\n group: 'zoom',\n execute: () => instance.zoomIn?.()\n },\n {\n id: 'fit-page',\n icon: 'fit-page',\n label: 'Reset Zoom',\n type: 'button',\n group: 'zoom',\n execute: () => instance.fitToPage?.()\n },\n {\n id: 'download',\n icon: 'download',\n label: 'Download Archive',\n type: 'button',\n group: 'actions',\n execute: () => instance.download?.()\n },\n {\n id: 'print',\n icon: 'print',\n label: 'Print File List',\n type: 'button',\n group: 'actions',\n execute: () => instance.print?.()\n }\n ];\n }\n\n async render(ctx: RenderContext): Promise<PreviewInstance> {\n const wrapper = document.createElement('div');\n wrapper.className = 'fp-archive-wrapper';\n wrapper.style.cssText = `\n width: 100%;\n height: 100%;\n overflow: auto;\n padding: 24px;\n box-sizing: border-box;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n transform-origin: top left;\n transition: transform 0.2s ease;\n `;\n ctx.container.innerHTML = '';\n ctx.container.style.overflow = 'auto';\n ctx.container.appendChild(wrapper);\n\n let scale = 1.0;\n\n const entries = await new Promise<ArchiveEntry[]>((resolve, reject) => {\n unzip(new Uint8Array(ctx.buffer), (err, unzipped) => {\n if (err) {\n reject(err);\n return;\n }\n const list: ArchiveEntry[] = Object.entries(unzipped).map(([path, data]) => {\n const isDir = path.endsWith('/');\n const parts = path.split('/').filter(Boolean);\n const name = parts[parts.length - 1] || path;\n return {\n path,\n name,\n isDir,\n size: data.length,\n data\n };\n });\n resolve(list);\n });\n });\n\n const totalUncompressedSize = entries.reduce((acc, e) => acc + e.size, 0);\n\n const renderUI = (filteredEntries: ArchiveEntry[]) => {\n wrapper.innerHTML = `\n <div style=\"max-width: 900px; margin: 0 auto; background: var(--fp-bg, #ffffff); border: 1px solid var(--fp-border, #e5e7eb); border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); overflow: hidden;\">\n <div style=\"padding: 16px 20px; background: var(--fp-toolbar-bg, #f9fafb); border-bottom: 1px solid var(--fp-border, #e5e7eb); display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 12px;\">\n <div>\n <h3 style=\"margin: 0 0 4px 0; font-size: 16px; font-weight: 600; color: var(--fp-text, #111827);\">\n ๐Ÿ“ฆ ${ctx.metadata.name || 'Archive.zip'}\n </h3>\n <div style=\"font-size: 13px; color: var(--fp-text-muted, #6b7280);\">\n ${entries.length} items ยท Total size: ${formatFileSize(totalUncompressedSize)} (Compressed: ${formatFileSize(ctx.buffer.byteLength)})\n </div>\n </div>\n <div>\n <input type=\"text\" id=\"fp-archive-search\" placeholder=\"Search files in archive...\" style=\"padding: 6px 12px; font-size: 13px; border: 1px solid var(--fp-border, #d1d5db); border-radius: 6px; outline: none; width: 220px;\" />\n </div>\n </div>\n <div style=\"max-height: 550px; overflow-y: auto;\">\n <table style=\"width: 100%; border-collapse: collapse; font-size: 13px; text-align: left;\">\n <thead>\n <tr style=\"background: var(--fp-toolbar-bg, #f3f4f6); color: var(--fp-text-muted, #4b5563); border-bottom: 1px solid var(--fp-border, #e5e7eb);\">\n <th style=\"padding: 10px 16px; font-weight: 600;\">Name / Path</th>\n <th style=\"padding: 10px 16px; font-weight: 600; width: 120px;\">Size</th>\n <th style=\"padding: 10px 16px; font-weight: 600; width: 100px; text-align: right;\">Action</th>\n </tr>\n </thead>\n <tbody id=\"fp-archive-body\">\n </tbody>\n </table>\n </div>\n </div>\n `;\n\n const tbody = wrapper.querySelector('#fp-archive-body') as HTMLElement;\n if (filteredEntries.length === 0) {\n tbody.innerHTML = `<tr><td colspan=\"3\" style=\"padding: 24px; text-align: center; color: #9ca3af;\">No matching files found</td></tr>`;\n } else {\n tbody.innerHTML = filteredEntries.map((e, idx) => `\n <tr style=\"border-bottom: 1px solid var(--fp-border, #f3f4f6); transition: background 0.15s ease;\" onmouseover=\"this.style.background='var(--fp-hover, #f9fafb)'\" onmouseout=\"this.style.background='transparent'\">\n <td style=\"padding: 10px 16px; color: var(--fp-text, #1f2937); word-break: break-all;\">\n <span style=\"margin-right: 8px;\">${e.isDir ? '๐Ÿ“' : '๐Ÿ“„'}</span>\n ${e.path}\n </td>\n <td style=\"padding: 10px 16px; color: var(--fp-text-muted, #6b7280);\">\n ${e.isDir ? '-' : formatFileSize(e.size)}\n </td>\n <td style=\"padding: 10px 16px; text-align: right;\">\n ${!e.isDir ? `<button data-idx=\"${idx}\" class=\"fp-entry-dl\" style=\"padding: 4px 8px; font-size: 12px; background: transparent; border: 1px solid var(--fp-border, #d1d5db); border-radius: 4px; cursor: pointer; color: var(--fp-text, #374151);\">โฌ‡๏ธ Save</button>` : ''}\n </td>\n </tr>\n `).join('');\n }\n\n // Handle download individual file\n tbody.querySelectorAll('.fp-entry-dl').forEach((btn) => {\n btn.addEventListener('click', (ev) => {\n const target = ev.currentTarget as HTMLElement;\n const idx = Number(target.getAttribute('data-idx'));\n const entry = filteredEntries[idx];\n if (entry && entry.data) {\n downloadFile(entry.data.buffer as ArrayBuffer, entry.name);\n }\n });\n });\n\n // Handle search\n const searchInput = wrapper.querySelector('#fp-archive-search') as HTMLInputElement;\n if (searchInput) {\n searchInput.addEventListener('input', () => {\n const q = searchInput.value.toLowerCase().trim();\n const filtered = q ? entries.filter(e => e.path.toLowerCase().includes(q)) : entries;\n renderUI(filtered);\n const newSearch = wrapper.querySelector('#fp-archive-search') as HTMLInputElement;\n if (newSearch) {\n newSearch.value = q;\n newSearch.focus();\n }\n });\n }\n };\n\n renderUI(entries);\n\n const cleanup = () => {\n wrapper.remove();\n ctx.container.innerHTML = '';\n };\n\n ctx.signal.addEventListener('abort', cleanup);\n\n return {\n destroy: cleanup,\n zoomIn: () => {\n scale += 0.1;\n wrapper.style.transform = `scale(${scale})`;\n },\n zoomOut: () => {\n scale = Math.max(0.3, scale - 0.1);\n wrapper.style.transform = `scale(${scale})`;\n },\n getZoom: () => scale,\n setZoom: (level: number) => {\n scale = level;\n wrapper.style.transform = `scale(${scale})`;\n },\n fitToPage: () => {\n scale = 1.0;\n wrapper.style.transform = `scale(1)`;\n },\n download: () => {\n downloadFile(ctx.buffer, ctx.metadata.name || 'archive.zip', 'application/zip');\n },\n print: () => {\n window.print();\n }\n };\n }\n}\n\nexport function archivePlugin(): ArchivePlugin {\n return new ArchivePlugin();\n}\n\nexport default ArchivePlugin;\r\n","import type { \n FileInfo, \n RenderContext, \n ToolbarAction, \n PreviewPlugin, \n PreviewInstance \n} from '@patel.sumit51/core';\nimport { downloadFile } from '@patel.sumit51/core';\nimport { marked } from 'marked';\nimport DOMPurify from 'dompurify';\nimport hljs from 'highlight.js';\n\nexport class MarkdownPlugin implements PreviewPlugin {\n id = 'markdown';\n name = 'Markdown Preview';\n extensions = ['.md', '.markdown', '.mdown', '.mkd'];\n mimeTypes = ['text/markdown', 'text/x-markdown'];\n weight = 90; // Higher than generic text/code plugin\n\n supports(file: FileInfo): boolean {\n const ext = file.metadata.extension?.toLowerCase();\n const mime = file.metadata.mimeType?.toLowerCase();\n return this.extensions.includes(ext || '') || this.mimeTypes.includes(mime || '');\n }\n\n getToolbarActions(instance: PreviewInstance): ToolbarAction[] {\n return [\n {\n id: 'zoom-out',\n icon: 'zoom-out',\n label: 'Decrease Font',\n type: 'button',\n group: 'zoom',\n execute: () => instance.zoomOut?.()\n },\n {\n id: 'zoom-in',\n icon: 'zoom-in',\n label: 'Increase Font',\n type: 'button',\n group: 'zoom',\n execute: () => instance.zoomIn?.()\n },\n {\n id: 'fit-page',\n icon: 'fit-page',\n label: 'Default Size',\n type: 'button',\n group: 'zoom',\n execute: () => instance.fitToPage?.()\n },\n {\n id: 'download',\n icon: 'download',\n label: 'Download Markdown',\n type: 'button',\n group: 'actions',\n execute: () => instance.download?.()\n },\n {\n id: 'print',\n icon: 'print',\n label: 'Print Document',\n type: 'button',\n group: 'actions',\n execute: () => instance.print?.()\n }\n ];\n }\n\n async render(ctx: RenderContext): Promise<PreviewInstance> {\n const text = new TextDecoder('utf-8', { fatal: false }).decode(ctx.buffer);\n \n // Parse markdown to HTML\n const rawHtml = await marked.parse(text, {\n gfm: true,\n breaks: true,\n });\n\n // Sanitize generated HTML for security\n const cleanHtml = DOMPurify.sanitize(rawHtml, {\n USE_PROFILES: { html: true }\n });\n\n const wrapper = document.createElement('div');\n wrapper.className = 'fp-markdown-wrapper';\n wrapper.style.cssText = `\n width: 100%;\n height: 100%;\n overflow: auto;\n padding: 32px 40px;\n box-sizing: border-box;\n line-height: 1.6;\n font-size: 15px;\n color: var(--fp-text, #24292f);\n background: var(--fp-bg, #ffffff);\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Noto Sans\", Helvetica, Arial, sans-serif;\n `;\n\n wrapper.innerHTML = `\n <style>\n .fp-markdown-wrapper h1, .fp-markdown-wrapper h2, .fp-markdown-wrapper h3,\n .fp-markdown-wrapper h4, .fp-markdown-wrapper h5, .fp-markdown-wrapper h6 {\n margin-top: 24px;\n margin-bottom: 16px;\n font-weight: 600;\n line-height: 1.25;\n color: var(--fp-text, #1f2328);\n }\n .fp-markdown-wrapper h1 { font-size: 2em; padding-bottom: 0.3em; border-bottom: 1px solid var(--fp-border, #d0d7de); }\n .fp-markdown-wrapper h2 { font-size: 1.5em; padding-bottom: 0.3em; border-bottom: 1px solid var(--fp-border, #d0d7de); }\n .fp-markdown-wrapper h3 { font-size: 1.25em; }\n .fp-markdown-wrapper p { margin-top: 0; margin-bottom: 16px; }\n .fp-markdown-wrapper table {\n border-spacing: 0;\n border-collapse: collapse;\n margin-top: 0;\n margin-bottom: 16px;\n width: 100%;\n overflow: auto;\n }\n .fp-markdown-wrapper table th, .fp-markdown-wrapper table td {\n padding: 6px 13px;\n border: 1px solid var(--fp-border, #d0d7de);\n }\n .fp-markdown-wrapper table tr:nth-child(2n) {\n background-color: var(--fp-toolbar-bg, #f6f8fa);\n }\n .fp-markdown-wrapper blockquote {\n margin: 0 0 16px 0;\n padding: 0 1em;\n color: var(--fp-text-muted, #59636e);\n border-left: 0.25em solid var(--fp-border, #d0d7de);\n }\n .fp-markdown-wrapper pre {\n padding: 16px;\n overflow: auto;\n font-size: 85%;\n line-height: 1.45;\n background-color: var(--fp-toolbar-bg, #f6f8fa);\n border-radius: 6px;\n border: 1px solid var(--fp-border, #d0d7de);\n }\n .fp-markdown-wrapper code {\n padding: 0.2em 0.4em;\n margin: 0;\n font-size: 85%;\n background-color: rgba(175, 184, 193, 0.2);\n border-radius: 4px;\n font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n }\n .fp-markdown-wrapper pre code {\n padding: 0;\n background: transparent;\n }\n .fp-markdown-wrapper ul, .fp-markdown-wrapper ol {\n padding-left: 2em;\n margin-top: 0;\n margin-bottom: 16px;\n }\n .fp-markdown-wrapper hr {\n height: 0.25em;\n padding: 0;\n margin: 24px 0;\n background-color: var(--fp-border, #d0d7de);\n border: 0;\n }\n </style>\n <div class=\"fp-markdown-content\" style=\"max-width: 860px; margin: 0 auto;\">\n ${cleanHtml}\n </div>\n `;\n\n // Apply syntax highlighting to pre code blocks\n wrapper.querySelectorAll('pre code').forEach((block) => {\n hljs.highlightElement(block as HTMLElement);\n });\n\n ctx.container.innerHTML = '';\n ctx.container.style.overflow = 'auto';\n ctx.container.appendChild(wrapper);\n\n let fontSize = 15;\n\n const cleanup = () => {\n wrapper.remove();\n ctx.container.innerHTML = '';\n };\n\n ctx.signal.addEventListener('abort', cleanup);\n\n return {\n destroy: cleanup,\n zoomIn: () => {\n fontSize = Math.min(28, fontSize + 2);\n wrapper.style.fontSize = `${fontSize}px`;\n },\n zoomOut: () => {\n fontSize = Math.max(10, fontSize - 2);\n wrapper.style.fontSize = `${fontSize}px`;\n },\n getZoom: () => fontSize / 15,\n setZoom: (level: number) => {\n fontSize = Math.round(15 * level);\n wrapper.style.fontSize = `${fontSize}px`;\n },\n fitToPage: () => {\n fontSize = 15;\n wrapper.style.fontSize = '15px';\n },\n download: () => {\n downloadFile(ctx.buffer, ctx.metadata.name || 'document.md', 'text/markdown');\n },\n print: () => {\n window.print();\n }\n };\n }\n}\n\nexport function markdownPlugin(): MarkdownPlugin {\n return new MarkdownPlugin();\n}\n\nexport default MarkdownPlugin;\r\n","import type { \n FileInfo, \n RenderContext, \n ToolbarAction, \n PreviewPlugin, \n PreviewInstance,\n Thumbnail\n} from '@patel.sumit51/core';\nimport { downloadFile } from '@patel.sumit51/core';\nimport { PptxRenderer } from 'pptx-browser';\n\nexport class PptxPlugin implements PreviewPlugin {\n id = 'pptx';\n name = 'PowerPoint Presentation';\n extensions = ['.pptx', '.ppsx'];\n mimeTypes = [\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/vnd.openxmlformats-officedocument.presentationml.slideshow'\n ];\n weight = 80;\n\n supports(file: FileInfo): boolean {\n const ext = file.metadata.extension?.toLowerCase();\n const mime = file.metadata.mimeType?.toLowerCase();\n return this.extensions.includes(ext || '') || this.mimeTypes.includes(mime || '');\n }\n\n getToolbarActions(instance: PreviewInstance): ToolbarAction[] {\n return [\n {\n id: 'thumbnails',\n icon: 'thumbnails',\n label: 'Slide Thumbnails',\n type: 'button',\n group: 'navigation',\n execute: () => instance.toggleThumbnails?.()\n },\n {\n id: 'page-prev',\n icon: 'page-prev',\n label: 'Previous Slide',\n type: 'button',\n group: 'navigation',\n execute: () => {\n const cur = instance.getCurrentPage?.() ?? 1;\n if (cur > 1) instance.goToPage?.(cur - 1);\n }\n },\n {\n id: 'page-nav',\n icon: '',\n label: 'Slide Number',\n type: 'page-nav',\n group: 'navigation',\n execute: (page: unknown) => instance.goToPage?.(Number(page))\n },\n {\n id: 'page-next',\n icon: 'page-next',\n label: 'Next Slide',\n type: 'button',\n group: 'navigation',\n execute: () => {\n const cur = instance.getCurrentPage?.() ?? 1;\n const total = instance.getPageCount?.() ?? 1;\n if (cur < total) instance.goToPage?.(cur + 1);\n }\n },\n {\n id: 'zoom-out',\n icon: 'zoom-out',\n label: 'Zoom Out',\n type: 'button',\n group: 'zoom',\n execute: () => instance.zoomOut?.()\n },\n {\n id: 'zoom-in',\n icon: 'zoom-in',\n label: 'Zoom In',\n type: 'button',\n group: 'zoom',\n execute: () => instance.zoomIn?.()\n },\n {\n id: 'fit-page',\n icon: 'fit-page',\n label: 'Fit to Slide',\n type: 'button',\n group: 'zoom',\n execute: () => instance.fitToPage?.()\n },\n {\n id: 'download',\n icon: 'download',\n label: 'Download PPTX',\n type: 'button',\n group: 'actions',\n execute: () => instance.download?.()\n },\n {\n id: 'print',\n icon: 'print',\n label: 'Print Presentation',\n type: 'button',\n group: 'actions',\n execute: () => instance.print?.()\n }\n ];\n }\n\n async render(ctx: RenderContext): Promise<PreviewInstance> {\n const renderer = new PptxRenderer();\n await renderer.load(ctx.buffer);\n\n const slideCount = (renderer as any).slidePaths?.length || 1;\n let currentSlide = 1;\n let scale = 1.0;\n\n const wrapper = document.createElement('div');\n wrapper.className = 'fp-pptx-wrapper';\n wrapper.style.cssText = `\n width: 100%;\n height: 100%;\n overflow: auto;\n display: flex;\n justify-content: center;\n align-items: flex-start;\n padding: 24px;\n box-sizing: border-box;\n background: var(--fp-bg-canvas, #525659);\n `;\n\n const slideContainer = document.createElement('div');\n slideContainer.className = 'fp-slide-container';\n slideContainer.style.cssText = `\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25);\n border-radius: 4px;\n overflow: hidden;\n background: #ffffff;\n transform-origin: top center;\n transition: transform 0.2s ease;\n `;\n\n const canvas = document.createElement('canvas');\n slideContainer.appendChild(canvas);\n wrapper.appendChild(slideContainer);\n\n ctx.container.innerHTML = '';\n ctx.container.style.overflow = 'auto';\n ctx.container.appendChild(wrapper);\n\n const renderCurrentSlide = async () => {\n try {\n await renderer.renderSlide(currentSlide - 1, canvas, 1280);\n ctx.emit('page-change', { page: currentSlide, totalPages: slideCount });\n } catch (err) {\n console.error('[PptxPlugin] Failed to render slide:', err);\n }\n };\n\n await renderCurrentSlide();\n\n const cleanup = () => {\n renderer.destroy();\n wrapper.remove();\n ctx.container.innerHTML = '';\n };\n\n ctx.signal.addEventListener('abort', cleanup);\n\n const instance: PreviewInstance = {\n destroy: cleanup,\n goToPage: (page: number) => {\n if (page >= 1 && page <= slideCount) {\n currentSlide = page;\n renderCurrentSlide();\n }\n },\n getPageCount: () => slideCount,\n getCurrentPage: () => currentSlide,\n zoomIn: () => {\n scale += 0.1;\n slideContainer.style.transform = `scale(${scale})`;\n },\n zoomOut: () => {\n scale = Math.max(0.2, scale - 0.1);\n slideContainer.style.transform = `scale(${scale})`;\n },\n getZoom: () => scale,\n setZoom: (level: number) => {\n scale = level;\n slideContainer.style.transform = `scale(${scale})`;\n },\n fitToPage: () => {\n scale = 1.0;\n slideContainer.style.transform = 'scale(1)';\n },\n getThumbnails: (): Thumbnail[] => {\n const list: Thumbnail[] = [];\n for (let i = 0; i < slideCount; i++) {\n const slideIdx = i;\n list.push({\n index: slideIdx,\n label: `Slide ${slideIdx + 1}`,\n render: async (thumbCanvas: HTMLCanvasElement) => {\n await renderer.renderSlide(slideIdx, thumbCanvas, 240);\n }\n });\n }\n return list;\n },\n download: () => {\n downloadFile(\n ctx.buffer,\n ctx.metadata.name || 'presentation.pptx',\n this.mimeTypes[0]\n );\n },\n print: () => {\n window.print();\n }\n };\n\n return instance;\n }\n}\n\nexport function pptxPlugin(): PptxPlugin {\n return new PptxPlugin();\n}\n\nexport default PptxPlugin;\r\n","import type { \n FileInfo, \n RenderContext, \n ToolbarAction, \n PreviewPlugin, \n PreviewInstance \n} from '@patel.sumit51/core';\nimport { downloadFile } from '@patel.sumit51/core';\nimport * as THREE from 'three';\nimport { STLLoader } from 'three/examples/jsm/loaders/STLLoader.js';\nimport { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\n\nexport class ThreeDPlugin implements PreviewPlugin {\n id = '3d';\n name = '3D Model Preview';\n extensions = ['.stl', '.obj'];\n mimeTypes = ['model/stl', 'model/obj', 'application/sla', 'text/plain'];\n weight = 75;\n\n supports(file: FileInfo): boolean {\n const ext = file.metadata.extension?.toLowerCase();\n return ext === '.stl' || ext === '.obj';\n }\n\n getToolbarActions(instance: PreviewInstance): ToolbarAction[] {\n return [\n {\n id: 'zoom-out',\n icon: 'zoom-out',\n label: 'Zoom Out',\n type: 'button',\n group: 'zoom',\n execute: () => instance.zoomOut?.()\n },\n {\n id: 'zoom-in',\n icon: 'zoom-in',\n label: 'Zoom In',\n type: 'button',\n group: 'zoom',\n execute: () => instance.zoomIn?.()\n },\n {\n id: 'fit-page',\n icon: 'fit-page',\n label: 'Reset Camera View',\n type: 'button',\n group: 'zoom',\n execute: () => instance.fitToPage?.()\n },\n {\n id: 'rotate-cw',\n icon: 'rotate-cw',\n label: 'Toggle Wireframe',\n type: 'button',\n group: 'view',\n execute: () => instance.rotateCW?.()\n },\n {\n id: 'download',\n icon: 'download',\n label: 'Download 3D Model',\n type: 'button',\n group: 'actions',\n execute: () => instance.download?.()\n }\n ];\n }\n\n async render(ctx: RenderContext): Promise<PreviewInstance> {\n const container = ctx.container;\n container.innerHTML = '';\n container.style.overflow = 'hidden';\n container.style.position = 'relative';\n container.style.width = '100%';\n container.style.height = '100%';\n container.style.background = '#1a1a1a';\n\n const width = container.clientWidth || 800;\n const height = container.clientHeight || 600;\n\n // 1. Setup Scene, Camera, Renderer\n const scene = new THREE.Scene();\n scene.background = new THREE.Color(0x1e1e24);\n\n const camera = new THREE.PerspectiveCamera(45, width / height, 0.1, 2000);\n const renderer = new THREE.WebGLRenderer({ antialias: true });\n renderer.setSize(width, height);\n renderer.setPixelRatio(window.devicePixelRatio);\n renderer.shadowMap.enabled = true;\n container.appendChild(renderer.domElement);\n\n // 2. Setup OrbitControls\n const controls = new OrbitControls(camera, renderer.domElement);\n controls.enableDamping = true;\n controls.dampingFactor = 0.05;\n\n // 3. Add Lights\n const ambientLight = new THREE.AmbientLight(0xffffff, 0.8);\n scene.add(ambientLight);\n\n const dirLight1 = new THREE.DirectionalLight(0xffffff, 1.2);\n dirLight1.position.set(100, 200, 100);\n scene.add(dirLight1);\n\n const dirLight2 = new THREE.DirectionalLight(0xffffff, 0.6);\n dirLight2.position.set(-100, -100, -100);\n scene.add(dirLight2);\n\n // 4. Add Grid Helper\n const grid = new THREE.GridHelper(200, 20, 0x444444, 0x222222);\n scene.add(grid);\n\n // 5. Load and center 3D Model\n let meshGroup = new THREE.Group();\n let isWireframe = false;\n const ext = ctx.metadata.extension?.toLowerCase();\n\n const materials: THREE.Material[] = [];\n\n if (ext === '.stl') {\n const loader = new STLLoader();\n const geometry = loader.parse(ctx.buffer);\n geometry.computeVertexNormals();\n geometry.center();\n\n const material = new THREE.MeshStandardMaterial({\n color: 0x3b82f6,\n roughness: 0.4,\n metalness: 0.2\n });\n materials.push(material);\n\n const mesh = new THREE.Mesh(geometry, material);\n meshGroup.add(mesh);\n } else if (ext === '.obj') {\n const loader = new OBJLoader();\n const text = new TextDecoder().decode(ctx.buffer);\n const obj = loader.parse(text);\n\n obj.traverse((child) => {\n if ((child as THREE.Mesh).isMesh) {\n const m = child as THREE.Mesh;\n m.geometry.computeVertexNormals();\n const mat = new THREE.MeshStandardMaterial({\n color: 0x10b981,\n roughness: 0.5,\n metalness: 0.1\n });\n materials.push(mat);\n m.material = mat;\n }\n });\n meshGroup.add(obj);\n }\n\n scene.add(meshGroup);\n\n // 6. Compute bounding box to frame camera nicely\n const box = new THREE.Box3().setFromObject(meshGroup);\n const sphere = box.getBoundingSphere(new THREE.Sphere());\n const radius = Math.max(sphere.radius, 10);\n\n const fitCamera = () => {\n camera.position.set(radius * 1.5, radius * 1.2, radius * 2);\n camera.lookAt(0, 0, 0);\n controls.target.set(0, 0, 0);\n controls.update();\n };\n\n fitCamera();\n\n // 7. Animation Loop\n let animId: number;\n const animate = () => {\n animId = requestAnimationFrame(animate);\n controls.update();\n renderer.render(scene, camera);\n };\n animate();\n\n // 8. Handle Resize\n const resizeObserver = new ResizeObserver(() => {\n const newWidth = container.clientWidth || 800;\n const newHeight = container.clientHeight || 600;\n camera.aspect = newWidth / newHeight;\n camera.updateProjectionMatrix();\n renderer.setSize(newWidth, newHeight);\n });\n resizeObserver.observe(container);\n\n const cleanup = () => {\n cancelAnimationFrame(animId);\n resizeObserver.disconnect();\n controls.dispose();\n renderer.dispose();\n materials.forEach(m => m.dispose());\n meshGroup.traverse((child) => {\n if ((child as THREE.Mesh).geometry) {\n (child as THREE.Mesh).geometry.dispose();\n }\n });\n container.innerHTML = '';\n };\n\n ctx.signal.addEventListener('abort', cleanup);\n\n return {\n destroy: cleanup,\n zoomIn: () => {\n camera.position.multiplyScalar(0.85);\n controls.update();\n },\n zoomOut: () => {\n camera.position.multiplyScalar(1.15);\n controls.update();\n },\n fitToPage: fitCamera,\n rotateCW: () => {\n isWireframe = !isWireframe;\n materials.forEach(m => {\n (m as THREE.MeshStandardMaterial).wireframe = isWireframe;\n });\n },\n download: () => {\n downloadFile(ctx.buffer, ctx.metadata.name || `model${ext || '.stl'}`);\n }\n };\n }\n}\n\nexport function threeDPlugin(): ThreeDPlugin {\n return new ThreeDPlugin();\n}\n\nexport default ThreeDPlugin;\r\n","import { FilePreviewViewer as CoreViewer } from '@patel.sumit51/core';\r\nimport { pdfPlugin } from '@patel.sumit51/plugin-pdf';\r\nimport { mediaPlugin } from '@patel.sumit51/plugin-media';\r\nimport { docxPlugin } from '@patel.sumit51/plugin-docx';\r\nimport { excelPlugin } from '@patel.sumit51/plugin-excel';\r\nimport { csvPlugin } from '@patel.sumit51/plugin-csv';\r\nimport { codePlugin } from '@patel.sumit51/plugin-code';\r\nimport { archivePlugin } from '@patel.sumit51/plugin-archive';\r\nimport { markdownPlugin } from '@patel.sumit51/plugin-markdown';\r\nimport { pptxPlugin } from '@patel.sumit51/plugin-pptx';\r\nimport { threeDPlugin } from '@patel.sumit51/plugin-3d';\r\nimport type { PreviewPlugin } from '@patel.sumit51/core';\r\n\r\n/**\r\n * Returns all built-in default preview plugins:\r\n * PDF, Word (DOCX), Excel (XLSX), PowerPoint (PPTX), CSV/TSV,\r\n * ZIP Archives, Markdown, 3D Models (STL/OBJ), Media (Images/Video/Audio/SVG), and Code/Text.\r\n */\r\nexport function getDefaultPlugins(): PreviewPlugin[] {\r\n return [\r\n pdfPlugin(),\r\n mediaPlugin(),\r\n docxPlugin(),\r\n excelPlugin(),\r\n pptxPlugin(),\r\n csvPlugin(),\r\n archivePlugin(),\r\n markdownPlugin(),\r\n threeDPlugin(),\r\n codePlugin(),\r\n ];\r\n}\r\n\r\n/**\r\n * Universal File Preview Viewer.\r\n * Pre-loads all format plugins by default so any file format can be previewed immediately.\r\n */\r\nexport class FilePreviewViewer extends CoreViewer {\r\n constructor(options?: { autoRegisterDefaults?: boolean }) {\r\n super();\r\n if (options?.autoRegisterDefaults !== false) {\r\n this.registerPlugins(getDefaultPlugins());\r\n }\r\n }\r\n}\r\n\r\n// Re-export individual plugins for custom configurations\r\nexport {\r\n pdfPlugin,\r\n mediaPlugin,\r\n docxPlugin,\r\n excelPlugin,\r\n pptxPlugin,\r\n csvPlugin,\r\n archivePlugin,\r\n markdownPlugin,\r\n threeDPlugin,\r\n codePlugin,\r\n};\r\n\r\n// Re-export all core types, utilities, controllers, and events\r\nexport * from '@patel.sumit51/core';\r\n","import React, { useEffect, useImperativeHandle, useRef, forwardRef, memo } from 'react';\r\nimport {\r\n FilePreviewViewer,\r\n getDefaultPlugins,\r\n type FileSource,\r\n type PreviewPlugin,\r\n type PreviewViewerOptions,\r\n type PreviewInstance,\r\n} from './index';\r\n\r\nexport interface FilePreviewProps {\r\n /** File to preview. Accepts URL string, File, Blob, ArrayBuffer, or Uint8Array */\r\n src: FileSource;\r\n /** Optional custom plugins list. If omitted, all default plugins (PDF, Word, Excel, CSV, Media, Code) are loaded */\r\n plugins?: PreviewPlugin[];\r\n /** Viewer options (theme, showToolbar, toolbarPosition, showThumbnails, etc.) */\r\n options?: PreviewViewerOptions;\r\n /** Triggered when loading starts */\r\n onLoading?: () => void;\r\n /** Triggered when preview is successfully loaded */\r\n onLoaded?: (data: unknown) => void;\r\n /** Triggered when an error occurs */\r\n onError?: (error: Error) => void;\r\n /** Triggered on page or sheet change */\r\n onPageChange?: (data: unknown) => void;\r\n /** Triggered on zoom level change */\r\n onZoomChange?: (data: unknown) => void;\r\n /** Custom wrapper CSS class name */\r\n className?: string;\r\n /** Custom wrapper inline style */\r\n style?: React.CSSProperties;\r\n}\r\n\r\nexport interface FilePreviewHandle {\r\n getInstance: () => PreviewInstance | null;\r\n getViewer: () => FilePreviewViewer | null;\r\n destroy: () => void;\r\n}\r\n\r\nexport const FilePreview = memo(forwardRef<FilePreviewHandle, FilePreviewProps>(\r\n (\r\n {\r\n src,\r\n plugins,\r\n options = {},\r\n onLoading,\r\n onLoaded,\r\n onError,\r\n onPageChange,\r\n onZoomChange,\r\n className,\r\n style,\r\n },\r\n ref\r\n ) => {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const viewerRef = useRef<FilePreviewViewer | null>(null);\r\n const instanceRef = useRef<PreviewInstance | null>(null);\r\n\r\n useImperativeHandle(ref, () => ({\r\n getInstance: () => instanceRef.current,\r\n getViewer: () => viewerRef.current,\r\n destroy: () => viewerRef.current?.destroy(),\r\n }));\r\n\r\n useEffect(() => {\r\n const viewer = new FilePreviewViewer({ autoRegisterDefaults: false });\r\n const activePlugins = plugins && plugins.length > 0 ? plugins : getDefaultPlugins();\r\n viewer.registerPlugins(activePlugins);\r\n viewerRef.current = viewer;\r\n\r\n const unsubs: Array<() => void> = [];\r\n if (onLoading) unsubs.push(viewer.on('loading', onLoading));\r\n if (onLoaded) unsubs.push(viewer.on('loaded', onLoaded));\r\n if (onError) unsubs.push(viewer.on('error', (e: unknown) => onError(e instanceof Error ? e : new Error(String(e)))));\r\n if (onPageChange) unsubs.push(viewer.on('page-change', onPageChange));\r\n if (onZoomChange) unsubs.push(viewer.on('zoom-change', onZoomChange));\r\n\r\n return () => {\r\n unsubs.forEach(fn => fn());\r\n viewer.destroy();\r\n viewerRef.current = null;\r\n instanceRef.current = null;\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!viewerRef.current || !containerRef.current || !src) return;\r\n\r\n const doPreview = async () => {\r\n try {\r\n instanceRef.current = await viewerRef.current!.preview(\r\n containerRef.current!,\r\n src,\r\n options\r\n );\r\n } catch (error: unknown) {\r\n if (error instanceof DOMException && error.name === 'AbortError') return;\r\n if (onError) {\r\n onError(error instanceof Error ? error : new Error(String(error)));\r\n }\r\n }\r\n };\r\n\r\n doPreview();\r\n }, [src, options, onError]);\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={className}\r\n style={{ width: '100%', height: '100%', position: 'relative', ...style }}\r\n />\r\n );\r\n }\r\n));\r\n\r\nFilePreview.displayName = 'FilePreview';\r\nexport default FilePreview;\r\n"]}