@eternalheart/react-file-preview 1.0.5 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/utils/fileNormalizer.ts","../src/renderers/ImageRenderer.tsx","../src/utils/pdfConfig.ts","../src/renderers/PdfRenderer.tsx","../src/renderers/DocxRenderer.tsx","../src/renderers/XlsxRenderer.tsx","../src/renderers/PptxRenderer.tsx","../src/renderers/VideoRenderer.tsx","../src/renderers/AudioRenderer.tsx","../../../node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@18.3.1/node_modules/react-syntax-highlighter/dist/esm/styles/prism/vsc-dark-plus.js","../src/renderers/MarkdownRenderer.tsx","../src/renderers/TextRenderer.tsx","../src/renderers/UnsupportedRenderer.tsx","../src/FilePreviewModal.tsx","../src/index.ts"],"sourcesContent":["import { PreviewFile, PreviewFileInput } from '../types';\n\n/**\n * 从 URL 字符串中提取文件名\n */\nfunction getFileNameFromUrl(url: string): string {\n try {\n const urlObj = new URL(url);\n const pathname = urlObj.pathname;\n const fileName = pathname.split('/').pop() || 'file';\n return decodeURIComponent(fileName);\n } catch {\n // 如果不是有效的 URL,尝试从路径中提取\n const fileName = url.split('/').pop() || 'file';\n return decodeURIComponent(fileName);\n }\n}\n\n/**\n * 从文件名中推断 MIME 类型\n */\nfunction inferMimeType(fileName: string): string {\n const ext = fileName.split('.').pop()?.toLowerCase() || '';\n \n const mimeTypes: Record<string, string> = {\n // 图片\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n png: 'image/png',\n gif: 'image/gif',\n webp: 'image/webp',\n svg: 'image/svg+xml',\n bmp: 'image/bmp',\n ico: 'image/x-icon',\n \n // 视频\n mp4: 'video/mp4',\n webm: 'video/webm',\n ogg: 'video/ogg',\n ogv: 'video/ogg',\n mov: 'video/quicktime',\n avi: 'video/x-msvideo',\n mkv: 'video/x-matroska',\n m4v: 'video/x-m4v',\n '3gp': 'video/3gpp',\n flv: 'video/x-flv',\n \n // 音频\n mp3: 'audio/mpeg',\n wav: 'audio/wav',\n m4a: 'audio/mp4',\n aac: 'audio/aac',\n flac: 'audio/flac',\n \n // 文档\n pdf: 'application/pdf',\n docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n ppt: 'application/vnd.ms-powerpoint',\n \n // 文本\n txt: 'text/plain',\n md: 'text/markdown',\n markdown: 'text/markdown',\n json: 'application/json',\n xml: 'application/xml',\n html: 'text/html',\n css: 'text/css',\n js: 'text/javascript',\n ts: 'text/typescript',\n jsx: 'text/javascript',\n tsx: 'text/typescript',\n py: 'text/x-python',\n java: 'text/x-java',\n cpp: 'text/x-c++src',\n c: 'text/x-csrc',\n cs: 'text/x-csharp',\n php: 'text/x-php',\n rb: 'text/x-ruby',\n go: 'text/x-go',\n rs: 'text/x-rust',\n yaml: 'text/yaml',\n yml: 'text/yaml',\n };\n \n return mimeTypes[ext] || 'application/octet-stream';\n}\n\n/**\n * 标准化文件输入为 PreviewFile 格式\n * 支持三种输入类型:\n * 1. File 对象(原生浏览器 File)\n * 2. PreviewFileLink 对象(包含 name, url, type 等属性)\n * 3. string(HTTP URL)\n */\nexport function normalizeFile(input: PreviewFileInput, index: number = 0): PreviewFile {\n // 情况 1: 原生 File 对象\n if (input instanceof File) {\n return {\n id: `file-${Date.now()}-${index}`,\n name: input.name,\n url: URL.createObjectURL(input),\n type: input.type || inferMimeType(input.name),\n size: input.size,\n };\n }\n \n // 情况 2: 字符串 URL\n if (typeof input === 'string') {\n const fileName = getFileNameFromUrl(input);\n return {\n id: `url-${Date.now()}-${index}`,\n name: fileName,\n url: input,\n type: inferMimeType(fileName),\n };\n }\n \n // 情况 3: PreviewFileLink 对象\n return {\n id: input.id || `link-${Date.now()}-${index}`,\n name: input.name,\n url: input.url,\n type: input.type || inferMimeType(input.name),\n size: input.size,\n };\n}\n\n/**\n * 批量标准化文件输入\n */\nexport function normalizeFiles(inputs: PreviewFileInput[]): PreviewFile[] {\n return inputs.map((input, index) => normalizeFile(input, index));\n}\n\n","import { useState, useEffect, useRef, useCallback } from 'react';\nimport { motion } from 'framer-motion';\n\ninterface ImageRendererProps {\n url: string;\n zoom: number;\n rotation: number;\n onZoomChange?: (zoom: number) => void;\n}\n\nexport const ImageRenderer: React.FC<ImageRendererProps> = ({\n url,\n zoom,\n rotation,\n onZoomChange\n}) => {\n const [loaded, setLoaded] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [position, setPosition] = useState({ x: 0, y: 0 });\n const [isDragging, setIsDragging] = useState(false);\n const [dragStart, setDragStart] = useState({ x: 0, y: 0 });\n const [internalZoom, setInternalZoom] = useState(1); // 内部缩放状态\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setLoaded(false);\n setError(null);\n setPosition({ x: 0, y: 0 });\n setInternalZoom(1);\n }, [url]);\n\n // 当外部 zoom 改变时,同步内部 zoom\n useEffect(() => {\n setInternalZoom(zoom);\n }, [zoom]);\n\n // 重置位置当缩放或旋转改变时\n useEffect(() => {\n setPosition({ x: 0, y: 0 });\n }, [zoom, rotation]);\n\n const handleLoad = () => {\n setLoaded(true);\n };\n\n const handleError = () => {\n setError('图片加载失败');\n setLoaded(true);\n };\n\n const handleDoubleClick = () => {\n // 双击重置位置\n setPosition({ x: 0, y: 0 });\n };\n\n // 鼠标滚轮缩放\n const handleWheel = useCallback((e: React.WheelEvent) => {\n e.preventDefault();\n e.stopPropagation();\n const delta = e.deltaY > 0 ? -0.1 : 0.1;\n setInternalZoom(prev => {\n const newZoom = Math.max(0.01, Math.min(10, prev + delta)); // 限制缩放范围 0.01-10\n // 同步缩放比例到父组件\n if (onZoomChange) {\n onZoomChange(newZoom);\n }\n return newZoom;\n });\n }, [onZoomChange]);\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n if (e.button !== 0) return; // 只响应左键\n setIsDragging(true);\n setDragStart({\n x: e.clientX - position.x,\n y: e.clientY - position.y,\n });\n }, [position]);\n\n const handleMouseMove = useCallback((e: React.MouseEvent) => {\n if (!isDragging) return;\n setPosition({\n x: e.clientX - dragStart.x,\n y: e.clientY - dragStart.y,\n });\n }, [isDragging, dragStart]);\n\n const handleMouseUp = useCallback(() => {\n setIsDragging(false);\n }, []);\n\n return (\n <div\n ref={containerRef}\n className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-overflow-hidden\"\n onWheel={handleWheel}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n onMouseLeave={handleMouseUp}\n style={{ cursor: isDragging ? 'grabbing' : 'grab' }}\n >\n {!loaded && !error && (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center\">\n <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-white/20 rfp-border-t-white rfp-rounded-full rfp-animate-spin\" />\n </div>\n )}\n\n {error && (\n <div className=\"rfp-text-white/70 rfp-text-center\">\n <p className=\"rfp-text-lg\">{error}</p>\n </div>\n )}\n\n <motion.img\n src={url}\n alt=\"Preview\"\n className={`rfp-max-w-none rfp-select-none ${!loaded ? 'rfp-hidden' : ''}`}\n style={{\n transform: `translate(${position.x}px, ${position.y}px) scale(${internalZoom}) rotate(${rotation}deg)`,\n transformOrigin: 'center',\n transition: isDragging ? 'none' : 'transform 0.3s ease-out',\n }}\n onLoad={handleLoad}\n onError={handleError}\n onDoubleClick={handleDoubleClick}\n initial={{ opacity: 0 }}\n animate={{ opacity: loaded ? 1 : 0 }}\n transition={{ duration: 0.3 }}\n draggable={false}\n />\n </div>\n );\n};\n","import { pdfjs } from 'react-pdf';\n\n/**\n * PDF.js Worker 配置选项\n */\nexport interface PdfConfigOptions {\n /**\n * PDF.js worker 文件路径\n * 默认使用 CDN: `https://unpkg.com/pdfjs-dist@${version}/build/pdf.worker.min.mjs`\n */\n workerSrc?: string;\n \n /**\n * CMap 文件目录路径\n * 默认使用 CDN: `https://unpkg.com/pdfjs-dist@${version}/cmaps/`\n */\n cMapUrl?: string;\n \n /**\n * 是否使用压缩的 CMap 文件\n * 默认: true\n */\n cMapPacked?: boolean;\n}\n\n/**\n * 配置 PDF.js\n *\n * @example\n * ```ts\n * // 使用本地静态文件(推荐用于生产环境)\n * configurePdfjs({\n * workerSrc: '/pdfjs/pdf.worker.min.mjs',\n * cMapUrl: '/pdfjs/cmaps/',\n * cMapPacked: true\n * });\n * ```\n *\n * @example\n * ```ts\n * // 使用 CDN(默认配置)\n * configurePdfjs(); // 自动使用 unpkg CDN\n * ```\n */\nexport function configurePdfjs(options?: PdfConfigOptions) {\n if (typeof window === 'undefined') return;\n\n const {\n workerSrc = `https://unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`,\n cMapUrl = `https://unpkg.com/pdfjs-dist@${pdfjs.version}/cmaps/`,\n cMapPacked = true\n } = options || {};\n\n pdfjs.GlobalWorkerOptions.workerSrc = workerSrc;\n // @ts-ignore - cMapUrl 和 cMapPacked 在 react-pdf 的类型定义中不存在,但在运行时可用\n pdfjs.GlobalWorkerOptions.cMapUrl = cMapUrl;\n // @ts-ignore\n pdfjs.GlobalWorkerOptions.cMapPacked = cMapPacked;\n}\n\n// 默认使用 CDN 配置\nconfigurePdfjs();\n\nexport { pdfjs };\n\n","import { useState, useEffect, useRef, useCallback } from 'react';\nimport { Document, Page } from 'react-pdf';\nimport 'react-pdf/dist/esm/Page/AnnotationLayer.css';\nimport 'react-pdf/dist/esm/Page/TextLayer.css';\n\n// 导入 PDF.js 配置\nimport '../utils/pdfConfig';\n\ninterface PdfRendererProps {\n url: string;\n zoom: number;\n currentPage: number;\n onPageChange: (page: number) => void;\n onTotalPagesChange: (total: number) => void;\n}\n\nexport const PdfRenderer: React.FC<PdfRendererProps> = ({\n url,\n zoom,\n currentPage,\n onPageChange,\n onTotalPagesChange,\n}) => {\n const [numPages, setNumPages] = useState<number>(0);\n const [error, setError] = useState<string | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const pageRefs = useRef<Map<number, HTMLDivElement>>(new Map());\n\n useEffect(() => {\n setError(null);\n }, [url]);\n\n const onDocumentLoadSuccess = ({ numPages }: { numPages: number }) => {\n setNumPages(numPages);\n onTotalPagesChange(numPages);\n onPageChange(1);\n };\n\n const onDocumentLoadError = (error: Error) => {\n console.error('PDF 加载错误:', error);\n setError('PDF 文件加载失败');\n };\n\n // 滚动时更新当前页码\n const handleScroll = useCallback(() => {\n if (!containerRef.current) return;\n\n const container = containerRef.current;\n const scrollTop = container.scrollTop;\n const containerHeight = container.clientHeight;\n const scrollCenter = scrollTop + containerHeight / 2;\n\n // 找到当前可见的页面\n let currentVisiblePage = 1;\n let minDistance = Infinity;\n\n pageRefs.current.forEach((pageElement, pageNumber) => {\n const rect = pageElement.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n const pageCenter = rect.top - containerRect.top + rect.height / 2 + scrollTop;\n const distance = Math.abs(pageCenter - scrollCenter);\n\n if (distance < minDistance) {\n minDistance = distance;\n currentVisiblePage = pageNumber;\n }\n });\n\n if (currentVisiblePage !== currentPage) {\n onPageChange(currentVisiblePage);\n }\n }, [currentPage, onPageChange]);\n\n // 监听滚动事件\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n container.addEventListener('scroll', handleScroll);\n return () => container.removeEventListener('scroll', handleScroll);\n }, [handleScroll]);\n\n // 设置页面引用\n const setPageRef = useCallback((pageNumber: number, element: HTMLDivElement | null) => {\n if (element) {\n pageRefs.current.set(pageNumber, element);\n } else {\n pageRefs.current.delete(pageNumber);\n }\n }, []);\n\n return (\n <div\n ref={containerRef}\n className=\"rfp-flex rfp-flex-col rfp-items-center rfp-w-full rfp-h-full rfp-overflow-auto rfp-py-4 md:rfp-py-8 rfp-px-2 md:rfp-px-4\"\n >\n {error && (\n <div className=\"rfp-text-white/70 rfp-text-center\">\n <p className=\"rfp-text-lg\">{error}</p>\n </div>\n )}\n\n {!error && (\n <Document\n file={url}\n onLoadSuccess={onDocumentLoadSuccess}\n onLoadError={onDocumentLoadError}\n loading={\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-min-h-screen\">\n <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-white/20 rfp-border-t-white rfp-rounded-full rfp-animate-spin\" />\n </div>\n }\n >\n <div className=\"rfp-flex rfp-flex-col rfp-gap-4\">\n {Array.from(new Array(numPages), (_, index) => {\n const pageNumber = index + 1;\n return (\n <div\n key={`page_${pageNumber}`}\n ref={(el) => setPageRef(pageNumber, el)}\n className=\"rfp-relative\"\n >\n <Page\n pageNumber={pageNumber}\n scale={zoom}\n loading={\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-p-8 rfp-bg-white/5 rfp-rounded-lg rfp-min-h-[600px]\">\n <div className=\"rfp-w-8 rfp-h-8 rfp-border-4 rfp-border-white/20 rfp-border-t-white rfp-rounded-full rfp-animate-spin\" />\n </div>\n }\n renderTextLayer={true}\n renderAnnotationLayer={true}\n className=\"rfp-shadow-2xl\"\n />\n {/* 页码标签 */}\n <div className=\"rfp-absolute rfp-top-2 rfp-right-2 rfp-bg-black/60 rfp-backdrop-blur-sm rfp-text-white rfp-text-xs rfp-px-3 rfp-py-1 rfp-rounded-full\">\n {pageNumber}\n </div>\n </div>\n );\n })}\n </div>\n </Document>\n )}\n\n {/* 底部页码指示器 */}\n {numPages > 0 && (\n <div className=\"rfp-sticky rfp-bottom-2 md:rfp-bottom-4 rfp-mt-4 md:rfp-mt-8 rfp-bg-black/60 rfp-backdrop-blur-xl rfp-text-white rfp-px-4 rfp-py-2 md:rfp-px-6 md:rfp-py-3 rfp-rounded-full rfp-text-xs md:rfp-text-sm rfp-font-medium rfp-shadow-2xl rfp-border rfp-border-white/10\">\n 第 {currentPage} 页 / 共 {numPages} 页\n </div>\n )}\n </div>\n );\n};\n","import { useState, useEffect } from 'react';\nimport mammoth from 'mammoth';\n\ninterface DocxRendererProps {\n url: string;\n}\n\nexport const DocxRenderer: React.FC<DocxRendererProps> = ({ url }) => {\n const [html, setHtml] = useState<string>('');\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const loadDocx = async () => {\n setLoading(true);\n setError(null);\n setHtml('');\n\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error('文件加载失败');\n }\n\n const arrayBuffer = await response.arrayBuffer();\n const result = await mammoth.convertToHtml({ arrayBuffer });\n setHtml(result.value);\n } catch (err) {\n console.error('Docx 解析错误:', err);\n setError('Word 文档解析失败');\n } finally {\n setLoading(false);\n }\n };\n\n loadDocx();\n }, [url]);\n\n if (loading) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-white/20 rfp-border-t-white rfp-rounded-full rfp-animate-spin\" />\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-text-white/70 rfp-text-center\">\n <p className=\"rfp-text-lg\">{error}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"rfp-w-full rfp-h-full rfp-overflow-auto rfp-p-4 md:rfp-p-8\">\n <div\n className=\"rfp-max-w-full md:rfp-max-w-4xl rfp-mx-auto rfp-bg-white rfp-rounded-lg rfp-shadow-2xl rfp-p-6 md:rfp-p-12\"\n dangerouslySetInnerHTML={{ __html: html }}\n style={{\n fontFamily: 'system-ui, -apple-system, sans-serif',\n lineHeight: '1.6',\n color: '#333',\n }}\n />\n </div>\n );\n};\n","import { useState, useEffect } from 'react';\nimport * as XLSX from 'xlsx';\n\ninterface XlsxRendererProps {\n url: string;\n}\n\nexport const XlsxRenderer: React.FC<XlsxRendererProps> = ({ url }) => {\n const [sheets, setSheets] = useState<{ name: string; data: unknown[] }[]>([]);\n const [activeSheet, setActiveSheet] = useState(0);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const loadXlsx = async () => {\n setLoading(true);\n setError(null);\n setSheets([]);\n\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error('文件加载失败');\n }\n\n const arrayBuffer = await response.arrayBuffer();\n const workbook = XLSX.read(arrayBuffer, { type: 'array' });\n\n const parsedSheets = workbook.SheetNames.map((name) => {\n const worksheet = workbook.Sheets[name];\n const data = XLSX.utils.sheet_to_json(worksheet, { header: 1 });\n return { name, data };\n });\n\n setSheets(parsedSheets);\n setActiveSheet(0);\n } catch (err) {\n console.error('Excel 解析错误:', err);\n setError('Excel 文件解析失败');\n } finally {\n setLoading(false);\n }\n };\n\n loadXlsx();\n }, [url]);\n\n if (loading) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-white/20 rfp-border-t-white rfp-rounded-full rfp-animate-spin\" />\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-text-white/70 rfp-text-center\">\n <p className=\"rfp-text-lg\">{error}</p>\n </div>\n </div>\n );\n }\n\n const currentSheet = sheets[activeSheet];\n\n return (\n <div className=\"rfp-w-full rfp-h-full rfp-flex rfp-flex-col rfp-overflow-hidden\">\n {/* Sheet Tabs */}\n {sheets.length > 1 && (\n <div className=\"rfp-flex rfp-gap-1 md:rfp-gap-2 rfp-p-2 md:rfp-p-4 rfp-bg-black/20 rfp-backdrop-blur-sm rfp-overflow-x-auto rfp-border-b rfp-border-white/10 scrollbar-hide\">\n {sheets.map((sheet, index) => (\n <button\n key={index}\n onClick={() => setActiveSheet(index)}\n className={`rfp-px-3 rfp-py-1.5 md:rfp-px-4 md:rfp-py-2 rfp-rounded-lg rfp-text-xs md:rfp-text-sm rfp-font-medium rfp-transition-all rfp-flex-shrink-0 ${activeSheet === index\n ? 'rfp-bg-gradient-to-r rfp-from-purple-500 rfp-to-pink-500 rfp-text-white rfp-shadow-lg'\n : 'rfp-bg-white/10 rfp-text-white hover:rfp-bg-white/20'\n }`}\n >\n {sheet.name}\n </button>\n ))}\n </div>\n )}\n\n {/* Table */}\n <div className=\"rfp-flex-1 rfp-overflow-auto rfp-p-2 md:rfp-p-8\">\n <div className=\"rfp-inline-block rfp-min-w-full rfp-bg-gradient-to-br rfp-from-gray-800/90 rfp-to-gray-900/90 rfp-backdrop-blur-xl rfp-rounded-xl md:rfp-rounded-2xl rfp-shadow-2xl rfp-overflow-hidden rfp-border rfp-border-white/10\">\n <table className=\"rfp-min-w-full rfp-divide-y rfp-divide-white/10\">\n <tbody className=\"rfp-divide-y rfp-divide-white/10\">\n {currentSheet?.data.map((row, rowIndex) => (\n <tr\n key={rowIndex}\n className={`rfp-transition-colors ${rowIndex === 0\n ? 'rfp-bg-gradient-to-r rfp-from-purple-500/20 rfp-to-pink-500/20 rfp-font-semibold'\n : 'hover:rfp-bg-white/5'\n }`}\n >\n {(row as unknown[]).map((cell, cellIndex) => (\n <td\n key={cellIndex}\n className=\"rfp-px-3 rfp-py-2 md:rfp-px-6 md:rfp-py-4 rfp-whitespace-nowrap rfp-text-xs md:rfp-text-sm rfp-text-gray-200 rfp-border-r rfp-border-white/10\"\n >\n {String(cell ?? '')}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n </div>\n );\n};\n","import { useState, useEffect, useRef, useCallback } from 'react';\nimport { Presentation } from 'lucide-react';\nimport { init } from 'pptx-preview';\n\ninterface PptxRendererProps {\n url: string;\n}\n\nexport const PptxRenderer: React.FC<PptxRendererProps> = ({ url }) => {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const previewerRef = useRef<ReturnType<typeof init> | null>(null);\n const resizeObserverRef = useRef<ResizeObserver | null>(null);\n const arrayBufferRef = useRef<ArrayBuffer | null>(null);\n const resizeTimeoutRef = useRef<number | null>(null);\n const lastDimensionsRef = useRef({ width: 0, height: 0 });\n\n // 计算容器尺寸\n const calculateDimensions = useCallback(() => {\n if (!containerRef.current) return { width: 960, height: 540 };\n\n const containerWidth = containerRef.current.clientWidth;\n // 16:9 比例\n const height = Math.floor(containerWidth * 9 / 16);\n\n console.log('计算尺寸:', { width: containerWidth, height });\n return { width: containerWidth, height };\n }, []);\n\n // 重新初始化预览器\n const reinitializePreviewer = useCallback(async () => {\n if (!containerRef.current || !arrayBufferRef.current) return;\n\n console.log('重新初始化预览器...');\n\n try {\n // 销毁旧的预览器\n if (previewerRef.current) {\n try {\n previewerRef.current.destroy();\n } catch (e) {\n console.error('销毁预览器失败:', e);\n }\n }\n\n // 清空容器\n containerRef.current.innerHTML = '';\n\n // 获取当前容器尺寸\n const currentDimensions = calculateDimensions();\n console.log('重新初始化使用尺寸:', currentDimensions);\n\n // 初始化新的预览器\n const previewer = init(containerRef.current, {\n width: currentDimensions.width,\n height: currentDimensions.height,\n });\n\n previewerRef.current = previewer;\n\n // 重新预览\n await previewer.preview(arrayBufferRef.current);\n console.log('重新初始化成功');\n } catch (e) {\n console.error('重新初始化失败:', e);\n }\n }, [calculateDimensions]);\n\n // 监听容器尺寸变化\n useEffect(() => {\n if (!containerRef.current) return;\n\n let isInitialRender = true;\n\n const updateDimensions = () => {\n // 跳过初始渲染时的尺寸检查\n if (isInitialRender) {\n isInitialRender = false;\n const initialDimensions = calculateDimensions();\n lastDimensionsRef.current = initialDimensions;\n return;\n }\n\n const newDimensions = calculateDimensions();\n\n // 检查尺寸是否真正变化(至少变化10px才触发)\n const lastDimensions = lastDimensionsRef.current;\n const widthDiff = Math.abs(lastDimensions.width - newDimensions.width);\n const heightDiff = Math.abs(lastDimensions.height - newDimensions.height);\n\n if (widthDiff < 10 && heightDiff < 10) {\n console.log('尺寸变化太小,忽略');\n return; // 尺寸变化太小,不做任何操作\n }\n\n console.log('检测到尺寸变化:', {\n old: lastDimensions,\n new: newDimensions,\n diff: { width: widthDiff, height: heightDiff }\n });\n\n // 更新最后的尺寸\n lastDimensionsRef.current = newDimensions;\n\n // 清除之前的定时器\n if (resizeTimeoutRef.current) {\n clearTimeout(resizeTimeoutRef.current);\n }\n\n // 防抖:800ms 后重新初始化预览器\n resizeTimeoutRef.current = window.setTimeout(() => {\n if (previewerRef.current && arrayBufferRef.current) {\n console.log('尺寸变化,准备重新初始化');\n reinitializePreviewer();\n }\n }, 800);\n };\n\n // 创建 ResizeObserver\n resizeObserverRef.current = new ResizeObserver(() => {\n updateDimensions();\n });\n\n // 开始观察容器\n resizeObserverRef.current.observe(containerRef.current);\n\n return () => {\n if (resizeObserverRef.current) {\n resizeObserverRef.current.disconnect();\n }\n if (resizeTimeoutRef.current) {\n clearTimeout(resizeTimeoutRef.current);\n }\n };\n }, [calculateDimensions, reinitializePreviewer]);\n\n useEffect(() => {\n let isMounted = true;\n\n const loadPptx = async () => {\n if (!containerRef.current) {\n console.log('Container ref not ready');\n return;\n }\n\n setLoading(true);\n setError(null);\n\n try {\n console.log('开始加载 PPTX:', url);\n\n // 获取文件\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error('文件加载失败');\n }\n\n const arrayBuffer = await response.arrayBuffer();\n arrayBufferRef.current = arrayBuffer; // 保存到 ref\n console.log('文件加载成功,大小:', arrayBuffer.byteLength);\n\n if (!isMounted) return;\n\n // 清空容器\n if (containerRef.current) {\n containerRef.current.innerHTML = '';\n }\n\n // 获取当前容器尺寸\n const currentDimensions = calculateDimensions();\n console.log('使用尺寸:', currentDimensions);\n\n // 初始化 pptx 预览器\n console.log('初始化预览器...');\n const previewer = init(containerRef.current, {\n width: currentDimensions.width,\n height: currentDimensions.height,\n });\n\n previewerRef.current = previewer;\n\n // 预览 PPTX\n console.log('开始预览...');\n previewer.preview(arrayBuffer)\n .then(() => {\n console.log('预览成功');\n if (isMounted) {\n setLoading(false);\n }\n })\n .catch((previewErr) => {\n console.error('预览失败:', previewErr);\n if (isMounted) {\n setError('PPT 文件预览失败');\n setLoading(false);\n }\n });\n } catch (err) {\n console.error('PPTX 解析错误:', err);\n if (isMounted) {\n setError(err instanceof Error ? err.message : 'PPT 文件解析失败');\n setLoading(false);\n }\n }\n };\n\n // 延迟执行以确保 DOM 已准备好\n const timer = setTimeout(() => {\n loadPptx();\n }, 100);\n\n // 清理函数\n return () => {\n isMounted = false;\n clearTimeout(timer);\n arrayBufferRef.current = null;\n if (previewerRef.current) {\n try {\n previewerRef.current.destroy();\n } catch (e) {\n console.error('销毁预览器失败:', e);\n }\n }\n previewerRef.current = null;\n };\n }, [url, calculateDimensions]);\n\n return (\n <div className=\"rfp-relative rfp-flex rfp-flex-col rfp-items-center rfp-w-full rfp-h-full rfp-pt-2 rfp-px-2 md:rfp-px-4\">\n {/* 加载状态 - 绝对定位覆盖 */}\n {loading && (\n <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-black/50 rfp-backdrop-blur-sm rfp-z-10 rfp-rounded-xl md:rfp-rounded-2xl\">\n <div className=\"rfp-text-center\">\n <div className=\"rfp-w-10 rfp-h-10 md:rfp-w-12 md:rfp-h-12 rfp-mx-auto rfp-mb-3 rfp-border-4 rfp-border-white/20 rfp-border-t-white rfp-rounded-full rfp-animate-spin\" />\n <p className=\"rfp-text-xs md:rfp-text-sm rfp-text-white/70 rfp-font-medium\">加载 PPT 中...</p>\n </div>\n </div>\n )}\n\n {/* 错误状态 - 绝对定位覆盖 */}\n {error && (\n <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-black/50 rfp-backdrop-blur-sm rfp-z-10 rfp-rounded-xl md:rfp-rounded-2xl\">\n <div className=\"rfp-text-center rfp-max-w-sm md:rfp-max-w-md rfp-px-4\">\n <div className=\"rfp-w-24 rfp-h-24 md:rfp-w-32 md:rfp-h-32 rfp-mx-auto rfp-mb-4 md:rfp-mb-6 rfp-rounded-2xl md:rfp-rounded-3xl rfp-bg-gradient-to-br rfp-from-orange-500 rfp-via-red-500 rfp-to-pink-500 rfp-flex rfp-items-center rfp-justify-center rfp-shadow-2xl\">\n <Presentation className=\"rfp-w-12 rfp-h-12 md:rfp-w-16 md:rfp-h-16 rfp-text-white\" />\n </div>\n <p className=\"rfp-text-lg md:rfp-text-xl rfp-text-white/90 rfp-mb-2 md:rfp-mb-3 rfp-font-medium\">PPT 预览</p>\n <p className=\"rfp-text-xs md:rfp-text-sm rfp-text-white/60 rfp-mb-4 md:rfp-mb-6\">\n {error || '浏览器暂不支持直接预览 PPT 文件'}\n </p>\n <a\n href={url}\n download\n className=\"rfp-inline-flex rfp-items-center rfp-gap-2 rfp-px-4 rfp-py-2 md:rfp-px-6 md:rfp-py-3 rfp-bg-gradient-to-r rfp-from-purple-500 rfp-to-pink-500 rfp-text-white rfp-text-sm md:rfp-text-base rfp-rounded-lg md:rfp-rounded-xl hover:rfp-scale-105 rfp-transition-all rfp-shadow-lg\"\n >\n <svg className=\"rfp-w-4 rfp-h-4 md:rfp-w-5 md:rfp-h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\" />\n </svg>\n 下载文件\n </a>\n <p className=\"rfp-text-xs rfp-text-white/40 rfp-mt-3 md:rfp-mt-4\">\n 提示:可以使用 Microsoft PowerPoint 或 WPS 打开\n </p>\n </div>\n </div>\n )}\n\n {/* PPT 容器 - 始终渲染 */}\n <div\n ref={containerRef}\n className=\"pptx-wrapper rfp-w-full rfp-max-w-full md:rfp-max-w-6xl\"\n />\n </div>\n );\n};\n","import { useRef, useEffect, useState } from 'react';\nimport videojs from 'video.js';\nimport 'video.js/dist/video-js.css';\n\ntype VideoJsPlayer = ReturnType<typeof videojs>;\n\ninterface VideoRendererProps {\n url: string;\n}\n\n// 根据 URL 获取视频 MIME 类型\nconst getVideoType = (url: string): string => {\n const ext = url.split('.').pop()?.toLowerCase().split('?')[0] || '';\n const typeMap: Record<string, string> = {\n mp4: 'video/mp4',\n webm: 'video/webm',\n ogg: 'video/ogg',\n ogv: 'video/ogg',\n mov: 'video/quicktime', // MOV 使用 QuickTime MIME 类型\n avi: 'video/x-msvideo',\n mkv: 'video/x-matroska',\n m4v: 'video/mp4',\n '3gp': 'video/3gpp',\n flv: 'video/x-flv',\n };\n return typeMap[ext] || 'video/mp4';\n};\n\nexport const VideoRenderer: React.FC<VideoRendererProps> = ({ url }) => {\n const [error, setError] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const videoRef = useRef<HTMLDivElement>(null);\n const playerRef = useRef<VideoJsPlayer | null>(null);\n\n useEffect(() => {\n // 确保 Video.js 播放器只初始化一次\n if (!playerRef.current && videoRef.current) {\n const videoElement = document.createElement('video-js');\n videoElement.classList.add('vjs-big-play-centered', 'vjs-theme-apple');\n videoRef.current.appendChild(videoElement);\n\n const videoType = getVideoType(url);\n\n // 为 MOV 格式提供多个 MIME 类型作为备用\n const sources = videoType === 'video/quicktime'\n ? [\n { src: url, type: 'video/quicktime' },\n { src: url, type: 'video/mp4' } // 备用方案\n ]\n : [{ src: url, type: videoType }];\n\n const player = videojs(videoElement, {\n controls: true,\n responsive: true,\n fluid: true,\n preload: 'auto',\n controlBar: {\n children: [\n 'playToggle',\n 'volumePanel',\n 'currentTimeDisplay',\n 'timeDivider',\n 'durationDisplay',\n 'progressControl',\n 'remainingTimeDisplay',\n 'fullscreenToggle'\n ],\n volumePanel: {\n inline: false\n }\n },\n html5: {\n vhs: {\n overrideNative: true\n },\n nativeVideoTracks: false,\n nativeAudioTracks: false,\n nativeTextTracks: false\n },\n sources\n });\n\n // 监听加载完成\n player.on('loadeddata', () => {\n setIsLoading(false);\n });\n\n player.on('error', () => {\n const error = player.error();\n console.error('Video.js error:', error);\n setError(`视频加载失败: ${error?.message || '未知错误'}`);\n setIsLoading(false);\n });\n\n playerRef.current = player;\n }\n }, [url]);\n\n // 清理函数\n useEffect(() => {\n const player = playerRef.current;\n\n return () => {\n if (player && !player.isDisposed()) {\n player.dispose();\n playerRef.current = null;\n }\n };\n }, []);\n\n if (error) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-text-center\">\n <div className=\"rfp-w-16 rfp-h-16 rfp-mx-auto rfp-mb-4 rfp-rounded-full rfp-bg-red-500/10 rfp-flex rfp-items-center rfp-justify-center\">\n <svg className=\"rfp-w-8 rfp-h-8 rfp-text-red-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\" />\n </svg>\n </div>\n <p className=\"rfp-text-lg rfp-font-medium rfp-text-white/90 rfp-mb-2\">视频加载失败</p>\n <p className=\"rfp-text-sm rfp-text-white/60\">{error}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-p-4 md:rfp-p-8\">\n <div className=\"rfp-w-full rfp-max-w-full md:rfp-max-w-5xl rfp-relative\">\n {/* 加载状态 */}\n {isLoading && (\n <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-black/20 rfp-backdrop-blur-sm rfp-rounded-2xl rfp-z-10\">\n <div className=\"rfp-text-center\">\n <div className=\"rfp-w-12 rfp-h-12 rfp-mx-auto rfp-mb-3 rfp-border-3 rfp-border-white/20 rfp-border-t-white rfp-rounded-full rfp-animate-spin\" />\n <p className=\"rfp-text-sm rfp-text-white/70 rfp-font-medium\">加载视频中...</p>\n </div>\n </div>\n )}\n\n {/* 视频播放器容器 */}\n <div\n ref={videoRef}\n className=\"rfp-overflow-hidden\"\n style={{\n boxShadow: '0 20px 60px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.05)'\n }}\n />\n </div>\n </div>\n );\n};\n","import { useState, useRef, useEffect } from 'react';\nimport { Music, Play, Pause, Volume2, VolumeX, SkipBack, SkipForward } from 'lucide-react';\n\ninterface AudioRendererProps {\n url: string;\n fileName: string;\n}\n\nexport const AudioRenderer: React.FC<AudioRendererProps> = ({ url, fileName }) => {\n const [error, setError] = useState<string | null>(null);\n const [isPlaying, setIsPlaying] = useState(false);\n const [currentTime, setCurrentTime] = useState(0);\n const [duration, setDuration] = useState(0);\n const [volume, setVolume] = useState(1);\n const [isMuted, setIsMuted] = useState(false);\n const audioRef = useRef<HTMLAudioElement>(null);\n\n useEffect(() => {\n const audio = audioRef.current;\n if (!audio) return;\n\n const updateTime = () => {\n if (!isNaN(audio.currentTime)) {\n setCurrentTime(audio.currentTime);\n }\n };\n\n const updateDuration = () => {\n if (!isNaN(audio.duration) && isFinite(audio.duration)) {\n setDuration(audio.duration);\n }\n };\n\n const handleEnded = () => setIsPlaying(false);\n const handleCanPlay = () => updateDuration();\n\n audio.addEventListener('timeupdate', updateTime);\n audio.addEventListener('loadedmetadata', updateDuration);\n audio.addEventListener('durationchange', updateDuration);\n audio.addEventListener('canplay', handleCanPlay);\n audio.addEventListener('ended', handleEnded);\n\n // 立即尝试获取时长\n if (audio.readyState >= 1) {\n updateDuration();\n }\n\n return () => {\n audio.removeEventListener('timeupdate', updateTime);\n audio.removeEventListener('loadedmetadata', updateDuration);\n audio.removeEventListener('durationchange', updateDuration);\n audio.removeEventListener('canplay', handleCanPlay);\n audio.removeEventListener('ended', handleEnded);\n };\n }, []);\n\n const togglePlay = () => {\n if (audioRef.current) {\n if (isPlaying) {\n audioRef.current.pause();\n } else {\n audioRef.current.play();\n }\n setIsPlaying(!isPlaying);\n }\n };\n\n const handleSeek = (e: React.ChangeEvent<HTMLInputElement>) => {\n const time = parseFloat(e.target.value);\n setCurrentTime(time);\n if (audioRef.current) {\n audioRef.current.currentTime = time;\n }\n };\n\n const handleVolumeChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const vol = parseFloat(e.target.value);\n setVolume(vol);\n if (audioRef.current) {\n audioRef.current.volume = vol;\n }\n if (vol > 0) setIsMuted(false);\n };\n\n const toggleMute = () => {\n if (audioRef.current) {\n audioRef.current.muted = !isMuted;\n setIsMuted(!isMuted);\n }\n };\n\n const skip = (seconds: number) => {\n if (audioRef.current) {\n audioRef.current.currentTime += seconds;\n }\n };\n\n const formatTime = (time: number) => {\n if (!isFinite(time) || isNaN(time) || time < 0) return '0:00';\n const minutes = Math.floor(time / 60);\n const seconds = Math.floor(time % 60);\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n };\n\n const handleError = () => {\n setError('音频加载失败');\n };\n\n if (error) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-text-white/70 rfp-text-center\">\n <p className=\"rfp-text-lg\">{error}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"rfp-flex rfp-flex-col rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-p-4 md:rfp-p-8 rfp-gap-4 md:rfp-gap-8\">\n {/* 音频封面 */}\n <div className=\"rfp-w-48 rfp-h-48 md:rfp-w-64 md:rfp-h-64 rfp-rounded-3xl rfp-bg-gradient-to-br rfp-from-purple-500 rfp-via-pink-500 rfp-to-rose-500 rfp-flex rfp-items-center rfp-justify-center rfp-shadow-2xl rfp-backdrop-blur-xl\">\n <Music className=\"rfp-w-24 rfp-h-24 md:rfp-w-32 md:rfp-h-32 rfp-text-white\" />\n </div>\n\n {/* 文件名 */}\n <div className=\"rfp-text-white rfp-text-center rfp-max-w-sm md:rfp-max-w-md rfp-px-4\">\n <p className=\"rfp-text-xl md:rfp-text-2xl rfp-font-medium rfp-mb-1 rfp-truncate\">{fileName}</p>\n <p className=\"rfp-text-xs md:rfp-text-sm rfp-text-white/60\">音频文件</p>\n </div>\n\n {/* 播放控制器 */}\n <div className=\"rfp-w-full rfp-max-w-sm md:rfp-max-w-md rfp-bg-white/10 rfp-backdrop-blur-xl rfp-rounded-2xl rfp-p-4 md:rfp-p-6 rfp-border rfp-border-white/20\">\n {/* 进度条 */}\n <div className=\"rfp-mb-4\">\n <div className=\"rfp-relative rfp-h-4 rfp-flex rfp-items-center\">\n {/* 进度条背景轨道 */}\n <div className=\"rfp-absolute rfp-w-full rfp-h-[6px] rfp-bg-white/20 rfp-rounded-full\" />\n {/* 已播放进度覆盖层 */}\n <div\n className=\"rfp-absolute rfp-h-[6px] rfp-bg-gradient-to-r rfp-from-purple-500 rfp-to-pink-500 rfp-rounded-full rfp-transition-all rfp-duration-100 rfp-ease-linear rfp-pointer-events-none\"\n style={{\n width: `${duration > 0 ? (currentTime / duration) * 100 : (currentTime > 100 ? 100 : currentTime)}%`\n }}\n />\n {/* 进度条滑块 */}\n <input\n type=\"range\"\n min=\"0\"\n max={duration > 0 ? duration : 100 + (currentTime > 100 ? currentTime % 100 : 0)}\n value={currentTime}\n onChange={handleSeek}\n className=\"audio-slider rfp-absolute rfp-w-full\"\n />\n </div>\n <div className=\"rfp-flex rfp-justify-between rfp-text-xs rfp-text-white/60 rfp-mt-3\">\n <span>{formatTime(currentTime)}</span>\n <span>{formatTime(duration)}</span>\n </div>\n </div>\n\n {/* 控制按钮 */}\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-gap-4 rfp-mb-4\">\n <button\n onClick={() => skip(-10)}\n className=\"rfp-w-10 rfp-h-10 rfp-rounded-full rfp-bg-white/10 hover:rfp-bg-white/20 rfp-flex rfp-items-center rfp-justify-center rfp-text-white rfp-transition-all\"\n >\n <SkipBack className=\"rfp-w-5 rfp-h-5\" />\n </button>\n\n <button\n onClick={togglePlay}\n className=\"rfp-w-14 rfp-h-14 rfp-rounded-full rfp-bg-gradient-to-br rfp-from-purple-500 rfp-to-pink-500 hover:rfp-scale-105 rfp-flex rfp-items-center rfp-justify-center rfp-text-white rfp-transition-all rfp-shadow-lg\"\n >\n {isPlaying ? <Pause className=\"rfp-w-6 rfp-h-6\" /> : <Play className=\"rfp-w-6 rfp-h-6 rfp-ml-1\" />}\n </button>\n\n <button\n onClick={() => skip(10)}\n className=\"rfp-w-10 rfp-h-10 rfp-rounded-full rfp-bg-white/10 hover:rfp-bg-white/20 rfp-flex rfp-items-center rfp-justify-center rfp-text-white rfp-transition-all\"\n >\n <SkipForward className=\"rfp-w-5 rfp-h-5\" />\n </button>\n </div>\n\n {/* 音量控制 */}\n <div className=\"rfp-flex rfp-items-center rfp-gap-3\">\n <button\n onClick={toggleMute}\n className=\"rfp-text-white/80 hover:rfp-text-white rfp-transition-colors\"\n >\n {isMuted || volume === 0 ? <VolumeX className=\"rfp-w-5 rfp-h-5\" /> : <Volume2 className=\"rfp-w-5 rfp-h-5\" />}\n </button>\n <div className=\"rfp-flex-1 rfp-relative rfp-h-3 rfp-flex rfp-items-center\">\n {/* 音量条背景轨道 */}\n <div className=\"rfp-absolute rfp-w-full rfp-h-[4px] rfp-bg-white/20 rfp-rounded-full\" />\n {/* 音量覆盖层 */}\n <div\n className=\"rfp-absolute rfp-h-[4px] rfp-bg-purple-500 rfp-rounded-full rfp-transition-all rfp-duration-100 rfp-pointer-events-none\"\n style={{\n width: `${(isMuted ? 0 : volume) * 100}%`\n }}\n />\n {/* 音量滑块 */}\n <input\n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.01\"\n value={isMuted ? 0 : volume}\n onChange={handleVolumeChange}\n className=\"volume-slider rfp-absolute rfp-w-full\"\n />\n </div>\n </div>\n </div>\n\n {/* 隐藏的 audio 元素 */}\n <audio\n ref={audioRef}\n src={url}\n onError={handleError}\n className=\"rfp-hidden\"\n />\n </div>\n );\n};\n","export default {\n \"pre[class*=\\\"language-\\\"]\": {\n \"color\": \"#d4d4d4\",\n \"fontSize\": \"13px\",\n \"textShadow\": \"none\",\n \"fontFamily\": \"Menlo, Monaco, Consolas, \\\"Andale Mono\\\", \\\"Ubuntu Mono\\\", \\\"Courier New\\\", monospace\",\n \"direction\": \"ltr\",\n \"textAlign\": \"left\",\n \"whiteSpace\": \"pre\",\n \"wordSpacing\": \"normal\",\n \"wordBreak\": \"normal\",\n \"lineHeight\": \"1.5\",\n \"MozTabSize\": \"4\",\n \"OTabSize\": \"4\",\n \"tabSize\": \"4\",\n \"WebkitHyphens\": \"none\",\n \"MozHyphens\": \"none\",\n \"msHyphens\": \"none\",\n \"hyphens\": \"none\",\n \"padding\": \"1em\",\n \"margin\": \".5em 0\",\n \"overflow\": \"auto\",\n \"background\": \"#1e1e1e\"\n },\n \"code[class*=\\\"language-\\\"]\": {\n \"color\": \"#d4d4d4\",\n \"fontSize\": \"13px\",\n \"textShadow\": \"none\",\n \"fontFamily\": \"Menlo, Monaco, Consolas, \\\"Andale Mono\\\", \\\"Ubuntu Mono\\\", \\\"Courier New\\\", monospace\",\n \"direction\": \"ltr\",\n \"textAlign\": \"left\",\n \"whiteSpace\": \"pre\",\n \"wordSpacing\": \"normal\",\n \"wordBreak\": \"normal\",\n \"lineHeight\": \"1.5\",\n \"MozTabSize\": \"4\",\n \"OTabSize\": \"4\",\n \"tabSize\": \"4\",\n \"WebkitHyphens\": \"none\",\n \"MozHyphens\": \"none\",\n \"msHyphens\": \"none\",\n \"hyphens\": \"none\"\n },\n \"pre[class*=\\\"language-\\\"]::selection\": {\n \"textShadow\": \"none\",\n \"background\": \"#264F78\"\n },\n \"code[class*=\\\"language-\\\"]::selection\": {\n \"textShadow\": \"none\",\n \"background\": \"#264F78\"\n },\n \"pre[class*=\\\"language-\\\"] *::selection\": {\n \"textShadow\": \"none\",\n \"background\": \"#264F78\"\n },\n \"code[class*=\\\"language-\\\"] *::selection\": {\n \"textShadow\": \"none\",\n \"background\": \"#264F78\"\n },\n \":not(pre) > code[class*=\\\"language-\\\"]\": {\n \"padding\": \".1em .3em\",\n \"borderRadius\": \".3em\",\n \"color\": \"#db4c69\",\n \"background\": \"#1e1e1e\"\n },\n \".namespace\": {\n \"Opacity\": \".7\"\n },\n \"doctype.doctype-tag\": {\n \"color\": \"#569CD6\"\n },\n \"doctype.name\": {\n \"color\": \"#9cdcfe\"\n },\n \"comment\": {\n \"color\": \"#6a9955\"\n },\n \"prolog\": {\n \"color\": \"#6a9955\"\n },\n \"punctuation\": {\n \"color\": \"#d4d4d4\"\n },\n \".language-html .language-css .token.punctuation\": {\n \"color\": \"#d4d4d4\"\n },\n \".language-html .language-javascript .token.punctuation\": {\n \"color\": \"#d4d4d4\"\n },\n \"property\": {\n \"color\": \"#9cdcfe\"\n },\n \"tag\": {\n \"color\": \"#569cd6\"\n },\n \"boolean\": {\n \"color\": \"#569cd6\"\n },\n \"number\": {\n \"color\": \"#b5cea8\"\n },\n \"constant\": {\n \"color\": \"#9cdcfe\"\n },\n \"symbol\": {\n \"color\": \"#b5cea8\"\n },\n \"inserted\": {\n \"color\": \"#b5cea8\"\n },\n \"unit\": {\n \"color\": \"#b5cea8\"\n },\n \"selector\": {\n \"color\": \"#d7ba7d\"\n },\n \"attr-name\": {\n \"color\": \"#9cdcfe\"\n },\n \"string\": {\n \"color\": \"#ce9178\"\n },\n \"char\": {\n \"color\": \"#ce9178\"\n },\n \"builtin\": {\n \"color\": \"#ce9178\"\n },\n \"deleted\": {\n \"color\": \"#ce9178\"\n },\n \".language-css .token.string.url\": {\n \"textDecoration\": \"underline\"\n },\n \"operator\": {\n \"color\": \"#d4d4d4\"\n },\n \"entity\": {\n \"color\": \"#569cd6\"\n },\n \"operator.arrow\": {\n \"color\": \"#569CD6\"\n },\n \"atrule\": {\n \"color\": \"#ce9178\"\n },\n \"atrule.rule\": {\n \"color\": \"#c586c0\"\n },\n \"atrule.url\": {\n \"color\": \"#9cdcfe\"\n },\n \"atrule.url.function\": {\n \"color\": \"#dcdcaa\"\n },\n \"atrule.url.punctuation\": {\n \"color\": \"#d4d4d4\"\n },\n \"keyword\": {\n \"color\": \"#569CD6\"\n },\n \"keyword.module\": {\n \"color\": \"#c586c0\"\n },\n \"keyword.control-flow\": {\n \"color\": \"#c586c0\"\n },\n \"function\": {\n \"color\": \"#dcdcaa\"\n },\n \"function.maybe-class-name\": {\n \"color\": \"#dcdcaa\"\n },\n \"regex\": {\n \"color\": \"#d16969\"\n },\n \"important\": {\n \"color\": \"#569cd6\"\n },\n \"italic\": {\n \"fontStyle\": \"italic\"\n },\n \"class-name\": {\n \"color\": \"#4ec9b0\"\n },\n \"maybe-class-name\": {\n \"color\": \"#4ec9b0\"\n },\n \"console\": {\n \"color\": \"#9cdcfe\"\n },\n \"parameter\": {\n \"color\": \"#9cdcfe\"\n },\n \"interpolation\": {\n \"color\": \"#9cdcfe\"\n },\n \"punctuation.interpolation-punctuation\": {\n \"color\": \"#569cd6\"\n },\n \"variable\": {\n \"color\": \"#9cdcfe\"\n },\n \"imports.maybe-class-name\": {\n \"color\": \"#9cdcfe\"\n },\n \"exports.maybe-class-name\": {\n \"color\": \"#9cdcfe\"\n },\n \"escape\": {\n \"color\": \"#d7ba7d\"\n },\n \"tag.punctuation\": {\n \"color\": \"#808080\"\n },\n \"cdata\": {\n \"color\": \"#808080\"\n },\n \"attr-value\": {\n \"color\": \"#ce9178\"\n },\n \"attr-value.punctuation\": {\n \"color\": \"#ce9178\"\n },\n \"attr-value.punctuation.attr-equals\": {\n \"color\": \"#d4d4d4\"\n },\n \"namespace\": {\n \"color\": \"#4ec9b0\"\n },\n \"pre[class*=\\\"language-javascript\\\"]\": {\n \"color\": \"#9cdcfe\"\n },\n \"code[class*=\\\"language-javascript\\\"]\": {\n \"color\": \"#9cdcfe\"\n },\n \"pre[class*=\\\"language-jsx\\\"]\": {\n \"color\": \"#9cdcfe\"\n },\n \"code[class*=\\\"language-jsx\\\"]\": {\n \"color\": \"#9cdcfe\"\n },\n \"pre[class*=\\\"language-typescript\\\"]\": {\n \"color\": \"#9cdcfe\"\n },\n \"code[class*=\\\"language-typescript\\\"]\": {\n \"color\": \"#9cdcfe\"\n },\n \"pre[class*=\\\"language-tsx\\\"]\": {\n \"color\": \"#9cdcfe\"\n },\n \"code[class*=\\\"language-tsx\\\"]\": {\n \"color\": \"#9cdcfe\"\n },\n \"pre[class*=\\\"language-css\\\"]\": {\n \"color\": \"#ce9178\"\n },\n \"code[class*=\\\"language-css\\\"]\": {\n \"color\": \"#ce9178\"\n },\n \"pre[class*=\\\"language-html\\\"]\": {\n \"color\": \"#d4d4d4\"\n },\n \"code[class*=\\\"language-html\\\"]\": {\n \"color\": \"#d4d4d4\"\n },\n \".language-regex .token.anchor\": {\n \"color\": \"#dcdcaa\"\n },\n \".language-html .token.punctuation\": {\n \"color\": \"#808080\"\n },\n \"pre[class*=\\\"language-\\\"] > code[class*=\\\"language-\\\"]\": {\n \"position\": \"relative\",\n \"zIndex\": \"1\"\n },\n \".line-highlight.line-highlight\": {\n \"background\": \"#f7ebc6\",\n \"boxShadow\": \"inset 5px 0 0 #f7d87c\",\n \"zIndex\": \"0\"\n }\n};","import { useState, useEffect } from 'react';\nimport ReactMarkdown from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport { vscDarkPlus } from 'react-syntax-highlighter/dist/esm/styles/prism';\n\ninterface MarkdownRendererProps {\n url: string;\n}\n\nexport const MarkdownRenderer: React.FC<MarkdownRendererProps> = ({ url }) => {\n const [content, setContent] = useState<string>('');\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const loadMarkdown = async () => {\n try {\n setLoading(true);\n setError(null);\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error('加载失败');\n }\n const text = await response.text();\n setContent(text);\n } catch (err) {\n setError('Markdown 文件加载失败');\n console.error(err);\n } finally {\n setLoading(false);\n }\n };\n\n loadMarkdown();\n }, [url]);\n\n if (loading) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-white/20 rfp-border-t-white rfp-rounded-full rfp-animate-spin\" />\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-text-white/70 rfp-text-center\">\n <p className=\"rfp-text-lg\">{error}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"rfp-w-full rfp-h-full rfp-overflow-auto rfp-p-4 md:rfp-p-8\">\n <div className=\"rfp-max-w-full md:rfp-max-w-4xl rfp-mx-auto rfp-bg-white/5 rfp-backdrop-blur-sm rfp-rounded-2xl rfp-p-4 md:rfp-p-8 rfp-border rfp-border-white/10\">\n <div className=\"rfp-max-w-none\">\n <ReactMarkdown\n remarkPlugins={[remarkGfm]}\n components={{\n code({ node, inline, className, children, ...props }: any) {\n const match = /language-(\\w+)/.exec(className || '');\n return !inline && match ? (\n <SyntaxHighlighter\n style={vscDarkPlus}\n language={match[1]}\n PreTag=\"div\"\n className=\"rfp-rounded-lg\"\n {...props}\n >\n {String(children).replace(/\\n$/, '')}\n </SyntaxHighlighter>\n ) : (\n <code className=\"rfp-bg-white/10 rfp-px-1.5 rfp-py-0.5 rfp-rounded rfp-text-sm\" {...props}>\n {children}\n </code>\n );\n },\n h1: ({ children }) => (\n <h1 className=\"rfp-text-4xl rfp-font-bold rfp-mb-4 rfp-text-white rfp-border-b rfp-border-white/20 rfp-pb-2\">\n {children}\n </h1>\n ),\n h2: ({ children }) => (\n <h2 className=\"rfp-text-3xl rfp-font-bold rfp-mb-3 rfp-text-white rfp-mt-8\">{children}</h2>\n ),\n h3: ({ children }) => (\n <h3 className=\"rfp-text-2xl rfp-font-bold rfp-mb-2 rfp-text-white rfp-mt-6\">{children}</h3>\n ),\n p: ({ children }) => <p className=\"rfp-text-white/90 rfp-mb-4 rfp-leading-relaxed\">{children}</p>,\n a: ({ href, children }) => (\n <a\n href={href}\n className=\"rfp-text-blue-400 hover:rfp-text-blue-300 rfp-underline\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {children}\n </a>\n ),\n ul: ({ children }) => <ul className=\"rfp-list-disc rfp-list-inside rfp-mb-4 rfp-text-white/90\">{children}</ul>,\n ol: ({ children }) => <ol className=\"rfp-list-decimal rfp-list-inside rfp-mb-4 rfp-text-white/90\">{children}</ol>,\n li: ({ children }) => <li className=\"rfp-mb-1\">{children}</li>,\n blockquote: ({ children }) => (\n <blockquote className=\"rfp-border-l-4 rfp-border-blue-500 rfp-pl-4 rfp-italic rfp-text-white/80 rfp-my-4\">\n {children}\n </blockquote>\n ),\n table: ({ children }) => (\n <div className=\"rfp-overflow-x-auto rfp-my-4\">\n <table className=\"rfp-min-w-full rfp-border rfp-border-white/20\">{children}</table>\n </div>\n ),\n th: ({ children }) => (\n <th className=\"rfp-border rfp-border-white/20 rfp-px-4 rfp-py-2 rfp-bg-white/10 rfp-text-white rfp-font-semibold\">\n {children}\n </th>\n ),\n td: ({ children }) => (\n <td className=\"rfp-border rfp-border-white/20 rfp-px-4 rfp-py-2 rfp-text-white/90\">{children}</td>\n ),\n hr: () => <hr className=\"rfp-border-white/20 rfp-my-6\" />,\n img: ({ src, alt }) => (\n <img src={src} alt={alt} className=\"rfp-rounded-lg rfp-max-w-full rfp-h-auto rfp-my-4\" />\n ),\n }}\n >\n {content}\n </ReactMarkdown>\n </div>\n </div>\n </div>\n );\n};\n","import { useState, useEffect } from 'react';\nimport { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport { vscDarkPlus } from 'react-syntax-highlighter/dist/esm/styles/prism';\nimport { FileText } from 'lucide-react';\n\ninterface TextRendererProps {\n url: string;\n fileName: string;\n}\n\nconst getLanguageFromFileName = (fileName: string): string => {\n const ext = fileName.split('.').pop()?.toLowerCase() || '';\n const languageMap: Record<string, string> = {\n js: 'javascript',\n jsx: 'jsx',\n ts: 'typescript',\n tsx: 'tsx',\n py: 'python',\n java: 'java',\n cpp: 'cpp',\n c: 'c',\n cs: 'csharp',\n php: 'php',\n rb: 'ruby',\n go: 'go',\n rs: 'rust',\n swift: 'swift',\n kt: 'kotlin',\n scala: 'scala',\n sh: 'bash',\n bash: 'bash',\n zsh: 'bash',\n json: 'json',\n xml: 'xml',\n html: 'html',\n css: 'css',\n scss: 'scss',\n sass: 'sass',\n less: 'less',\n sql: 'sql',\n yaml: 'yaml',\n yml: 'yaml',\n toml: 'toml',\n ini: 'ini',\n conf: 'nginx',\n md: 'markdown',\n txt: 'text',\n };\n return languageMap[ext] || 'text';\n};\n\nexport const TextRenderer: React.FC<TextRendererProps> = ({ url, fileName }) => {\n const [content, setContent] = useState<string>('');\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const language = getLanguageFromFileName(fileName);\n\n useEffect(() => {\n const loadText = async () => {\n try {\n setLoading(true);\n setError(null);\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error('加载失败');\n }\n const text = await response.text();\n setContent(text);\n } catch (err) {\n setError('文本文件加载失败');\n console.error(err);\n } finally {\n setLoading(false);\n }\n };\n\n loadText();\n }, [url]);\n\n if (loading) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-white/20 rfp-border-t-white rfp-rounded-full rfp-animate-spin\" />\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-text-white/70 rfp-text-center\">\n <p className=\"rfp-text-lg\">{error}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"rfp-w-full rfp-h-full rfp-overflow-auto rfp-p-4 md:rfp-p-8\">\n <div className=\"rfp-max-w-full md:rfp-max-w-6xl rfp-mx-auto rfp-bg-white/5 rfp-backdrop-blur-sm rfp-rounded-2xl rfp-border rfp-border-white/10 rfp-overflow-hidden\">\n {/* 文件头部 */}\n <div className=\"rfp-flex rfp-items-center rfp-gap-2 md:rfp-gap-3 rfp-px-4 rfp-py-3 md:rfp-px-6 md:rfp-py-4 rfp-bg-white/5 rfp-border-b rfp-border-white/10\">\n <FileText className=\"rfp-w-4 rfp-h-4 md:rfp-w-5 md:rfp-h-5 rfp-text-white/70 rfp-flex-shrink-0\" />\n <span className=\"rfp-text-white rfp-font-medium rfp-text-sm md:rfp-text-base rfp-truncate\">{fileName}</span>\n <span className=\"rfp-ml-auto rfp-text-xs rfp-text-white/50 rfp-uppercase rfp-flex-shrink-0\">{language}</span>\n </div>\n\n {/* 代码内容 */}\n <div className=\"rfp-text-sm\">\n {language === 'text' ? (\n <pre className=\"rfp-p-6 rfp-text-white/90 rfp-font-mono rfp-whitespace-pre-wrap rfp-break-words\">\n {content}\n </pre>\n ) : (\n <SyntaxHighlighter\n language={language}\n style={vscDarkPlus}\n showLineNumbers\n customStyle={{\n margin: 0,\n padding: '1.5rem',\n background: 'transparent',\n fontSize: '0.875rem',\n }}\n lineNumberStyle={{\n minWidth: '3em',\n paddingRight: '1em',\n color: 'rgba(255, 255, 255, 0.3)',\n userSelect: 'none',\n }}\n >\n {content}\n </SyntaxHighlighter>\n )}\n </div>\n </div>\n </div>\n );\n};\n","import { FileQuestion, Download } from 'lucide-react';\n\ninterface UnsupportedRendererProps {\n fileName: string;\n fileType: string;\n onDownload: () => void;\n}\n\nexport const UnsupportedRenderer: React.FC<UnsupportedRendererProps> = ({\n fileName,\n fileType,\n onDownload,\n}) => {\n return (\n <div className=\"rfp-flex rfp-flex-col rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-p-8 rfp-gap-6\">\n <div className=\"rfp-w-32 rfp-h-32 rfp-rounded-full rfp-bg-white/10 rfp-flex rfp-items-center rfp-justify-center\">\n <FileQuestion className=\"rfp-w-16 rfp-h-16 rfp-text-white/70\" />\n </div>\n\n <div className=\"rfp-text-white rfp-text-center\">\n <p className=\"rfp-text-xl rfp-font-medium rfp-mb-2\">{fileName}</p>\n <p className=\"rfp-text-white/70\">不支持预览此文件类型 ({fileType})</p>\n </div>\n\n <button\n onClick={onDownload}\n className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-px-6 rfp-py-3 rfp-bg-white/10 hover:rfp-bg-white/20 rfp-backdrop-blur-sm rfp-rounded-lg rfp-text-white rfp-font-medium rfp-transition-all\"\n >\n <Download className=\"rfp-w-5 rfp-h-5\" />\n 下载文件查看\n </button>\n </div>\n );\n};\n","import { useState, useEffect, useCallback, useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport {\n X,\n ZoomIn,\n ZoomOut,\n RotateCw,\n RotateCcw,\n Download,\n ChevronLeft,\n ChevronRight,\n Maximize2,\n Minimize2,\n RefreshCw,\n} from 'lucide-react';\nimport { PreviewFile, PreviewFileInput, FileType, CustomRenderer } from './types';\nimport { normalizeFiles } from './utils/fileNormalizer';\nimport { ImageRenderer } from './renderers/ImageRenderer';\nimport { PdfRenderer } from './renderers/PdfRenderer';\nimport { DocxRenderer } from './renderers/DocxRenderer';\nimport { XlsxRenderer } from './renderers/XlsxRenderer';\nimport { PptxRenderer } from './renderers/PptxRenderer';\nimport { VideoRenderer } from './renderers/VideoRenderer';\nimport { AudioRenderer } from './renderers/AudioRenderer';\nimport { MarkdownRenderer } from './renderers/MarkdownRenderer';\nimport { TextRenderer } from './renderers/TextRenderer';\nimport { UnsupportedRenderer } from './renderers/UnsupportedRenderer';\n\ninterface FilePreviewModalProps {\n files: PreviewFileInput[];\n currentIndex: number;\n isOpen: boolean;\n onClose: () => void;\n onNavigate?: (index: number) => void;\n customRenderers?: CustomRenderer[];\n}\n\nconst getFileType = (file: PreviewFile): FileType => {\n const ext = file.name.split('.').pop()?.toLowerCase() || '';\n const mimeType = file.type.toLowerCase();\n\n if (mimeType.startsWith('image/') || ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg'].includes(ext)) {\n return 'image';\n }\n if (mimeType.includes('pdf') || ext === 'pdf') {\n return 'pdf';\n }\n if (mimeType.includes('wordprocessingml') || ext === 'docx') {\n return 'docx';\n }\n if (mimeType.includes('spreadsheetml') || ext === 'xlsx') {\n return 'xlsx';\n }\n if (mimeType.includes('presentationml') || ext === 'pptx' || ext === 'ppt') {\n return 'pptx';\n }\n if (mimeType.startsWith('video/') || ['mp4', 'webm', 'ogg', 'ogv', 'mov', 'avi', 'mkv', 'm4v', '3gp', 'flv'].includes(ext)) {\n return 'video';\n }\n if (mimeType.startsWith('audio/') || ['mp3', 'wav', 'ogg', 'm4a', 'flac', 'aac'].includes(ext)) {\n return 'audio';\n }\n if (ext === 'md' || ext === 'markdown') {\n return 'markdown';\n }\n // 文本文件和代码文件\n const textExtensions = [\n 'txt', 'log', 'csv',\n 'js', 'jsx', 'ts', 'tsx', 'json',\n 'py', 'java', 'cpp', 'c', 'h', 'cs', 'php', 'rb', 'go', 'rs', 'swift', 'kt',\n 'html', 'css', 'scss', 'sass', 'less',\n 'xml', 'yaml', 'yml', 'toml', 'ini', 'conf',\n 'sh', 'bash', 'zsh', 'sql',\n ];\n if (mimeType.startsWith('text/') || textExtensions.includes(ext)) {\n return 'text';\n }\n return 'unsupported';\n};\n\nexport const FilePreviewModal: React.FC<FilePreviewModalProps> = ({\n files,\n currentIndex,\n isOpen,\n onClose,\n onNavigate,\n customRenderers = [],\n}) => {\n const [zoom, setZoom] = useState(1);\n const [rotation, setRotation] = useState(0);\n const [currentPage, setCurrentPage] = useState(1);\n const [, setTotalPages] = useState(1); // PDF 总页数,由 PdfRenderer 更新\n\n // 滑动手势状态\n const [touchStart, setTouchStart] = useState<number | null>(null);\n const [touchEnd, setTouchEnd] = useState<number | null>(null);\n const minSwipeDistance = 50;\n\n // 标准化文件输入\n const normalizedFiles = useMemo(() => normalizeFiles(files), [files]);\n\n const currentFile = normalizedFiles[currentIndex];\n\n // 检查是否有自定义渲染器匹配当前文件\n const customRenderer = useMemo(() => {\n if (!currentFile) return null;\n return customRenderers.find(renderer => renderer.test(currentFile));\n }, [currentFile, customRenderers]);\n\n const fileType = currentFile ? getFileType(currentFile) : 'unsupported';\n\n // 重置状态当文件改变时\n useEffect(() => {\n setZoom(1);\n setRotation(0);\n setCurrentPage(1);\n setTotalPages(1);\n }, [currentIndex]);\n\n // 键盘导航\n // 锁定 body 滚动\n useEffect(() => {\n if (isOpen) {\n // 保存原始的 overflow 值\n const originalOverflow = document.body.style.overflow;\n const originalPaddingRight = document.body.style.paddingRight;\n\n // 获取滚动条宽度\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n\n // 锁定滚动并补偿滚动条宽度\n document.body.style.overflow = 'hidden';\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n }\n\n return () => {\n // 恢复原始值\n document.body.style.overflow = originalOverflow;\n document.body.style.paddingRight = originalPaddingRight;\n };\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (!isOpen) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onClose();\n } else if (e.key === 'ArrowLeft' && currentIndex > 0) {\n onNavigate?.(currentIndex - 1);\n } else if (e.key === 'ArrowRight' && currentIndex < normalizedFiles.length - 1) {\n onNavigate?.(currentIndex + 1);\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, currentIndex, normalizedFiles.length, onClose, onNavigate]);\n\n const handleZoomIn = useCallback(() => {\n setZoom((prev) => Math.min(prev + 0.25, 10));\n }, []);\n\n const handleZoomOut = useCallback(() => {\n setZoom((prev) => Math.max(prev - 0.25, 0.01));\n }, []);\n\n const handleRotate = useCallback(() => {\n setRotation((prev) => prev + 90);\n }, []);\n\n const handleRotateLeft = useCallback(() => {\n setRotation((prev) => prev - 90);\n }, []);\n\n const handleFitToWidth = useCallback(() => {\n setZoom(1);\n setRotation(0);\n }, []);\n\n const handleOriginalSize = useCallback(() => {\n setZoom(1);\n }, []);\n\n const handleZoomChange = useCallback((newZoom: number) => {\n setZoom(newZoom);\n }, []);\n\n const handleReset = useCallback(() => {\n setZoom(1);\n setRotation(0);\n }, []);\n\n const handleDownload = useCallback(() => {\n if (!currentFile) return;\n const link = document.createElement('a');\n link.href = currentFile.url;\n link.download = currentFile.name;\n link.click();\n }, [currentFile]);\n\n // 滑动手势处理\n const handleTouchStart = useCallback((e: React.TouchEvent) => {\n setTouchEnd(null);\n setTouchStart(e.targetTouches[0].clientX);\n }, []);\n\n const handleTouchMove = useCallback((e: React.TouchEvent) => {\n setTouchEnd(e.targetTouches[0].clientX);\n }, []);\n\n const handleTouchEnd = useCallback(() => {\n if (!touchStart || !touchEnd) return;\n const distance = touchStart - touchEnd;\n const isLeftSwipe = distance > minSwipeDistance;\n const isRightSwipe = distance < -minSwipeDistance;\n\n if (isLeftSwipe && currentIndex < normalizedFiles.length - 1) {\n onNavigate?.(currentIndex + 1);\n }\n if (isRightSwipe && currentIndex > 0) {\n onNavigate?.(currentIndex - 1);\n }\n }, [touchStart, touchEnd, minSwipeDistance, currentIndex, normalizedFiles.length, onNavigate]);\n\n if (!isOpen || !currentFile) return null;\n\n const showZoomControls = fileType === 'image' || fileType === 'pdf';\n const showRotateControl = fileType === 'image';\n\n const modalContent = (\n <div className=\"rfp-root\">\n <AnimatePresence>\n {isOpen && (\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"rfp-fixed rfp-inset-0 rfp-z-[9999] rfp-flex rfp-items-center rfp-justify-center rfp-bg-black/80 rfp-backdrop-blur-md rfp-overflow-hidden\"\n onClick={onClose}\n onWheel={(e) => e.stopPropagation()}\n >\n {/* 主内容区域 */}\n <div\n className=\"rfp-relative rfp-w-full rfp-h-full rfp-flex rfp-flex-col rfp-overflow-hidden\"\n onClick={(e) => e.stopPropagation()}\n >\n {/* 顶部工具栏 */}\n <motion.div\n initial={{ y: -100 }}\n animate={{ y: 0 }}\n exit={{ y: -100 }}\n className=\"rfp-absolute rfp-top-0 rfp-left-0 rfp-right-0 rfp-z-10 rfp-p-4\"\n >\n <div className=\"rfp-max-w-7xl rfp-mx-auto rfp-flex rfp-flex-col md:rfp-flex-row md:rfp-items-center md:rfp-justify-between rfp-bg-black/40 rfp-backdrop-blur-xl rfp-rounded-2xl rfp-px-3 md:rfp-px-6 rfp-py-3 md:rfp-py-4 rfp-shadow-2xl rfp-border rfp-border-white/10 rfp-gap-2 md:rfp-gap-0\">\n {/* 第一行:文件名 + 关闭按钮(移动端) */}\n <div className=\"rfp-flex rfp-items-center rfp-justify-between md:rfp-flex-1 md:rfp-min-w-0 md:rfp-mr-4\">\n <div className=\"rfp-flex-1 rfp-min-w-0\">\n <h2 className=\"rfp-text-white rfp-font-medium rfp-text-sm md:rfp-text-lg rfp-truncate\">\n {currentFile.name}\n </h2>\n <p className=\"rfp-text-white/60 rfp-text-xs md:rfp-text-sm\">\n {currentIndex + 1} / {normalizedFiles.length}\n </p>\n </div>\n {/* 移动端关闭按钮 */}\n <div className=\"md:rfp-hidden rfp-ml-2\">\n <ToolbarButton\n icon={<X className=\"rfp-w-5 rfp-h-5\" />}\n label=\"关闭\"\n onClick={onClose}\n />\n </div>\n </div>\n\n {/* 第二行:工具按钮 - 支持水平滚动 */}\n <div className=\"rfp-flex rfp-items-center rfp-gap-1 md:rfp-gap-2 rfp-overflow-x-auto scrollbar-hide rfp-flex-shrink-0\">\n {showZoomControls && (\n <>\n <ToolbarButton\n icon={<ZoomOut className=\"rfp-w-5 rfp-h-5\" />}\n label=\"缩小\"\n onClick={handleZoomOut}\n disabled={zoom <= 0.01}\n />\n <span className=\"rfp-text-white/70 rfp-text-sm rfp-min-w-[4rem] rfp-text-center rfp-font-medium\">\n {Math.round(zoom * 100)}%\n </span>\n <ToolbarButton\n icon={<ZoomIn className=\"rfp-w-5 rfp-h-5\" />}\n label=\"放大\"\n onClick={handleZoomIn}\n disabled={zoom >= 10}\n />\n <div className=\"rfp-w-px rfp-h-6 rfp-bg-white/20 rfp-mx-2\" />\n <ToolbarButton\n icon={<Minimize2 className=\"rfp-w-5 rfp-h-5\" />}\n label=\"适应窗口\"\n onClick={handleFitToWidth}\n />\n <ToolbarButton\n icon={<Maximize2 className=\"rfp-w-5 rfp-h-5\" />}\n label=\"原始尺寸\"\n onClick={handleOriginalSize}\n />\n <div className=\"rfp-w-px rfp-h-6 rfp-bg-white/20 rfp-mx-2\" />\n </>\n )}\n\n {showRotateControl && (\n <>\n <ToolbarButton\n icon={<RotateCcw className=\"rfp-w-5 rfp-h-5\" />}\n label=\"向左旋转\"\n onClick={handleRotateLeft}\n />\n <ToolbarButton\n icon={<RotateCw className=\"rfp-w-5 rfp-h-5\" />}\n label=\"向右旋转\"\n onClick={handleRotate}\n />\n <div className=\"rfp-w-px rfp-h-6 rfp-bg-white/20 rfp-mx-2\" />\n </>\n )}\n\n {(showZoomControls || showRotateControl) && (\n <>\n <ToolbarButton\n icon={<RefreshCw className=\"rfp-w-5 rfp-h-5\" />}\n label=\"复原\"\n onClick={handleReset}\n />\n <div className=\"rfp-w-px rfp-h-6 rfp-bg-white/20 rfp-mx-2\" />\n </>\n )}\n\n <ToolbarButton\n icon={<Download className=\"rfp-w-5 rfp-h-5\" />}\n label=\"下载\"\n onClick={handleDownload}\n />\n\n {/* 桌面端关闭按钮 */}\n <div className=\"rfp-hidden md:rfp-flex rfp-items-center\">\n <div className=\"rfp-w-px rfp-h-6 rfp-bg-white/20 rfp-mx-2\" />\n <ToolbarButton\n icon={<X className=\"rfp-w-5 rfp-h-5\" />}\n label=\"关闭\"\n onClick={onClose}\n />\n </div>\n </div>\n </div>\n </motion.div>\n\n {/* 内容区域 */}\n <div\n className=\"rfp-flex-1 rfp-flex rfp-items-center rfp-justify-center rfp-pt-32 md:rfp-pt-24 rfp-pb-4 md:rfp-pb-8 rfp-overflow-auto\"\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n >\n {customRenderer ? (\n // 使用自定义渲染器\n customRenderer.render(currentFile)\n ) : (\n <>\n {fileType === 'image' && (\n <ImageRenderer\n url={currentFile.url}\n zoom={zoom}\n rotation={rotation}\n onZoomChange={handleZoomChange}\n />\n )}\n {fileType === 'pdf' && (\n <PdfRenderer\n url={currentFile.url}\n zoom={zoom}\n currentPage={currentPage}\n onPageChange={setCurrentPage}\n onTotalPagesChange={setTotalPages}\n />\n )}\n {fileType === 'docx' && <DocxRenderer url={currentFile.url} />}\n {fileType === 'xlsx' && <XlsxRenderer url={currentFile.url} />}\n {fileType === 'pptx' && <PptxRenderer url={currentFile.url} />}\n {fileType === 'video' && <VideoRenderer url={currentFile.url} />}\n {fileType === 'audio' && (\n <AudioRenderer url={currentFile.url} fileName={currentFile.name} />\n )}\n {fileType === 'markdown' && <MarkdownRenderer url={currentFile.url} />}\n {fileType === 'text' && (\n <TextRenderer url={currentFile.url} fileName={currentFile.name} />\n )}\n {fileType === 'unsupported' && (\n <UnsupportedRenderer\n fileName={currentFile.name}\n fileType={currentFile.type}\n onDownload={handleDownload}\n />\n )}\n </>\n )}\n </div>\n\n {/* 左右导航箭头 */}\n {normalizedFiles.length > 1 && (\n <>\n {currentIndex > 0 && (\n <motion.button\n initial={{ x: -100, opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: -100, opacity: 0 }}\n onClick={() => onNavigate?.(currentIndex - 1)}\n className=\"rfp-absolute rfp-left-2 md:rfp-left-4 rfp-top-1/2 -rfp-translate-y-1/2 rfp-w-10 rfp-h-10 md:rfp-w-12 md:rfp-h-12 rfp-rounded-full rfp-bg-black/40 rfp-backdrop-blur-xl rfp-border rfp-border-white/10 rfp-flex rfp-items-center rfp-justify-center rfp-text-white hover:rfp-bg-black/60 rfp-transition-all rfp-shadow-2xl\"\n >\n <ChevronLeft className=\"rfp-w-5 rfp-h-5 md:rfp-w-6 md:rfp-h-6\" />\n </motion.button>\n )}\n\n {currentIndex < normalizedFiles.length - 1 && (\n <motion.button\n initial={{ x: 100, opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: 100, opacity: 0 }}\n onClick={() => onNavigate?.(currentIndex + 1)}\n className=\"rfp-absolute rfp-right-2 md:rfp-right-4 rfp-top-1/2 -rfp-translate-y-1/2 rfp-w-10 rfp-h-10 md:rfp-w-12 md:rfp-h-12 rfp-rounded-full rfp-bg-black/40 rfp-backdrop-blur-xl rfp-border rfp-border-white/10 rfp-flex rfp-items-center rfp-justify-center rfp-text-white hover:rfp-bg-black/60 rfp-transition-all rfp-shadow-2xl\"\n >\n <ChevronRight className=\"rfp-w-5 rfp-h-5 md:rfp-w-6 md:rfp-h-6\" />\n </motion.button>\n )}\n </>\n )}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n\n // 使用 Portal 将模态框渲染到 document.body\n return createPortal(modalContent, document.body);\n};\n\n// 工具栏按钮组件\ninterface ToolbarButtonProps {\n icon: React.ReactNode;\n label: string;\n onClick: () => void;\n disabled?: boolean;\n}\n\nconst ToolbarButton: React.FC<ToolbarButtonProps> = ({ icon, label, onClick, disabled }) => {\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n title={label}\n className={`rfp-p-2 rfp-rounded-lg rfp-transition-all ${disabled\n ? 'rfp-text-white/30 rfp-cursor-not-allowed'\n : 'rfp-text-white hover:rfp-bg-white/10 active:rfp-bg-white/20'\n }`}\n >\n {icon}\n </button>\n );\n};\n","// 导入样式\nimport './index.css';\n\n// 导入版本号\nimport packageJson from '../package.json';\n\n// 导出版本号\nexport const VERSION = packageJson.version;\n\n// 导出主组件\nexport { FilePreviewModal } from './FilePreviewModal';\n\n// 导出类型定义\nexport type {\n PreviewFile,\n PreviewFileLink,\n PreviewFileInput,\n FileType,\n ToolbarAction,\n PreviewState,\n CustomRenderer,\n} from './types';\n\n// 导出工具函数\nexport { normalizeFile, normalizeFiles } from './utils/fileNormalizer';\n\n// 导出 PDF.js 配置函数和类型\nexport { configurePdfjs, pdfjs } from './utils/pdfConfig';\nexport type { PdfConfigOptions } from './utils/pdfConfig';\n\n"],"names":["getFileNameFromUrl","url","fileName","inferMimeType","ext","_a","normalizeFile","input","index","normalizeFiles","inputs","ImageRenderer","zoom","rotation","onZoomChange","loaded","setLoaded","useState","error","setError","position","setPosition","isDragging","setIsDragging","dragStart","setDragStart","internalZoom","setInternalZoom","containerRef","useRef","useEffect","handleLoad","handleError","handleDoubleClick","handleWheel","useCallback","e","delta","prev","newZoom","handleMouseDown","handleMouseMove","handleMouseUp","jsxs","jsx","motion","configurePdfjs","options","workerSrc","pdfjs","cMapUrl","cMapPacked","PdfRenderer","currentPage","onPageChange","onTotalPagesChange","numPages","setNumPages","pageRefs","onDocumentLoadSuccess","onDocumentLoadError","handleScroll","container","scrollTop","containerHeight","scrollCenter","currentVisiblePage","minDistance","pageElement","pageNumber","rect","containerRect","pageCenter","distance","setPageRef","element","Document","_","el","Page","DocxRenderer","html","setHtml","loading","setLoading","response","arrayBuffer","result","mammoth","err","XlsxRenderer","sheets","setSheets","activeSheet","setActiveSheet","workbook","XLSX","parsedSheets","name","worksheet","data","currentSheet","sheet","row","rowIndex","cell","cellIndex","PptxRenderer","previewerRef","resizeObserverRef","arrayBufferRef","resizeTimeoutRef","lastDimensionsRef","calculateDimensions","containerWidth","height","reinitializePreviewer","currentDimensions","previewer","init","isInitialRender","updateDimensions","initialDimensions","newDimensions","lastDimensions","widthDiff","heightDiff","isMounted","loadPptx","previewErr","timer","Presentation","getVideoType","VideoRenderer","isLoading","setIsLoading","videoRef","playerRef","videoElement","videoType","player","videojs","AudioRenderer","isPlaying","setIsPlaying","currentTime","setCurrentTime","duration","setDuration","volume","setVolume","isMuted","setIsMuted","audioRef","audio","updateTime","updateDuration","handleEnded","handleCanPlay","togglePlay","handleSeek","time","handleVolumeChange","vol","toggleMute","skip","seconds","formatTime","minutes","Music","SkipBack","Pause","Play","SkipForward","VolumeX","Volume2","vscDarkPlus","MarkdownRenderer","content","setContent","text","ReactMarkdown","remarkGfm","node","inline","className","children","props","match","SyntaxHighlighter","href","src","alt","getLanguageFromFileName","TextRenderer","language","FileText","UnsupportedRenderer","fileType","onDownload","FileQuestion","Download","getFileType","file","mimeType","textExtensions","FilePreviewModal","files","currentIndex","isOpen","onClose","onNavigate","customRenderers","setZoom","setRotation","setCurrentPage","setTotalPages","touchStart","setTouchStart","touchEnd","setTouchEnd","minSwipeDistance","normalizedFiles","useMemo","currentFile","customRenderer","renderer","originalOverflow","originalPaddingRight","scrollbarWidth","handleKeyDown","handleZoomIn","handleZoomOut","handleRotate","handleRotateLeft","handleFitToWidth","handleOriginalSize","handleZoomChange","handleReset","handleDownload","link","handleTouchStart","handleTouchMove","handleTouchEnd","isLeftSwipe","isRightSwipe","showZoomControls","showRotateControl","modalContent","AnimatePresence","ToolbarButton","X","Fragment","ZoomOut","ZoomIn","Minimize2","Maximize2","RotateCcw","RotateCw","RefreshCw","ChevronLeft","ChevronRight","createPortal","icon","label","onClick","disabled","VERSION","packageJson"],"mappings":"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L,QAAS+B,EACT,UAAU,YAAA,CAAA,CACZ,EACF,CAEJ,EClOAgJ,EAAe,CACb,0BAA6B,CAC3B,MAAS,UACT,SAAY,OACZ,WAAc,OACd,WAAc,kFACd,UAAa,MACb,UAAa,OACb,WAAc,MACd,YAAe,SACf,UAAa,SACb,WAAc,MACd,WAAc,IACd,SAAY,IACZ,QAAW,IACX,cAAiB,OACjB,WAAc,OACd,UAAa,OACb,QAAW,OACX,QAAW,MACX,OAAU,SACV,SAAY,OACZ,WAAc,SAClB,EACE,2BAA8B,CAC5B,MAAS,UACT,SAAY,OACZ,WAAc,OACd,WAAc,kFACd,UAAa,MACb,UAAa,OACb,WAAc,MACd,YAAe,SACf,UAAa,SACb,WAAc,MACd,WAAc,IACd,SAAY,IACZ,QAAW,IACX,cAAiB,OACjB,WAAc,OACd,UAAa,OACb,QAAW,MACf,EACE,qCAAwC,CACtC,WAAc,OACd,WAAc,SAClB,EACE,sCAAyC,CACvC,WAAc,OACd,WAAc,SAClB,EACE,uCAA0C,CACxC,WAAc,OACd,WAAc,SAClB,EACE,wCAA2C,CACzC,WAAc,OACd,WAAc,SAClB,EACE,uCAA0C,CACxC,QAAW,YACX,aAAgB,OAChB,MAAS,UACT,WAAc,SAClB,EACE,aAAc,CACZ,QAAW,IACf,EACE,sBAAuB,CACrB,MAAS,SACb,EACE,eAAgB,CACd,MAAS,SACb,EACE,QAAW,CACT,MAAS,SACb,EACE,OAAU,CACR,MAAS,SACb,EACE,YAAe,CACb,MAAS,SACb,EACE,kDAAmD,CACjD,MAAS,SACb,EACE,yDAA0D,CACxD,MAAS,SACb,EACE,SAAY,CACV,MAAS,SACb,EACE,IAAO,CACL,MAAS,SACb,EACE,QAAW,CACT,MAAS,SACb,EACE,OAAU,CACR,MAAS,SACb,EACE,SAAY,CACV,MAAS,SACb,EACE,OAAU,CACR,MAAS,SACb,EACE,SAAY,CACV,MAAS,SACb,EACE,KAAQ,CACN,MAAS,SACb,EACE,SAAY,CACV,MAAS,SACb,EACE,YAAa,CACX,MAAS,SACb,EACE,OAAU,CACR,MAAS,SACb,EACE,KAAQ,CACN,MAAS,SACb,EACE,QAAW,CACT,MAAS,SACb,EACE,QAAW,CACT,MAAS,SACb,EACE,kCAAmC,CACjC,eAAkB,WACtB,EACE,SAAY,CACV,MAAS,SACb,EACE,OAAU,CACR,MAAS,SACb,EACE,iBAAkB,CAChB,MAAS,SACb,EACE,OAAU,CACR,MAAS,SACb,EACE,cAAe,CACb,MAAS,SACb,EACE,aAAc,CACZ,MAAS,SACb,EACE,sBAAuB,CACrB,MAAS,SACb,EACE,yBAA0B,CACxB,MAAS,SACb,EACE,QAAW,CACT,MAAS,SACb,EACE,iBAAkB,CAChB,MAAS,SACb,EACE,uBAAwB,CACtB,MAAS,SACb,EACE,SAAY,CACV,MAAS,SACb,EACE,4BAA6B,CAC3B,MAAS,SACb,EACE,MAAS,CACP,MAAS,SACb,EACE,UAAa,CACX,MAAS,SACb,EACE,OAAU,CACR,UAAa,QACjB,EACE,aAAc,CACZ,MAAS,SACb,EACE,mBAAoB,CAClB,MAAS,SACb,EACE,QAAW,CACT,MAAS,SACb,EACE,UAAa,CACX,MAAS,SACb,EACE,cAAiB,CACf,MAAS,SACb,EACE,wCAAyC,CACvC,MAAS,SACb,EACE,SAAY,CACV,MAAS,SACb,EACE,2BAA4B,CAC1B,MAAS,SACb,EACE,2BAA4B,CAC1B,MAAS,SACb,EACE,OAAU,CACR,MAAS,SACb,EACE,kBAAmB,CACjB,MAAS,SACb,EACE,MAAS,CACP,MAAS,SACb,EACE,aAAc,CACZ,MAAS,SACb,EACE,yBAA0B,CACxB,MAAS,SACb,EACE,qCAAsC,CACpC,MAAS,SACb,EACE,UAAa,CACX,MAAS,SACb,EACE,oCAAuC,CACrC,MAAS,SACb,EACE,qCAAwC,CACtC,MAAS,SACb,EACE,6BAAgC,CAC9B,MAAS,SACb,EACE,8BAAiC,CAC/B,MAAS,SACb,EACE,oCAAuC,CACrC,MAAS,SACb,EACE,qCAAwC,CACtC,MAAS,SACb,EACE,6BAAgC,CAC9B,MAAS,SACb,EACE,8BAAiC,CAC/B,MAAS,SACb,EACE,6BAAgC,CAC9B,MAAS,SACb,EACE,8BAAiC,CAC/B,MA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","x_google_ignoreList":[9]}
1
+ {"version":3,"file":"index.cjs","sources":["../src/utils/fileNormalizer.ts","../src/renderers/ImageRenderer.tsx","../src/utils/pdfConfig.ts","../src/renderers/PdfRenderer.tsx","../src/renderers/DocxRenderer.tsx","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/element.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/alphabet.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/cell_range.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/selector.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/scroll.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/history.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/clipboard.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/auto_filter.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/merge.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/helper.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/row.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/col.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/locale/en.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/locale/locale.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/validator.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/validation.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/data_proxy.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/event.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/config.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/resizer.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/scrollbar.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/selector.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/suggest.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/icon.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/calendar.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/datepicker.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/editor.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/button.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/canvas/draw.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/font.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/cell.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/formula.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/core/format.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/table.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/print.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/contextmenu.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/tooltip.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/item.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/dropdown_item.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_align.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/align.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/valign.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/toggle_item.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/autofilter.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/bold.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/italic.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/strike.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/underline.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/color_palette.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_color.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_linetype.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/border_palette.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_border.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/border.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/icon_item.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/clearformat.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/paintformat.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/text_color.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/fill_color.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_fontsize.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/font_size.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_font.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/font.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_format.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/format.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/dropdown_formula.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/formula.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/freeze.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/merge.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/redo.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/undo.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/print.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/textwrap.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/more.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/toolbar/index.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/modal.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/form_input.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/form_select.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/form_field.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/modal_validation.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/sort_filter.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/message.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/sheet.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/component/bottombar.js","../../../node_modules/.pnpm/x-data-spreadsheet@1.1.9/node_modules/x-data-spreadsheet/src/index.js","../src/utils/excelDataConverter.ts","../src/renderers/XlsxRenderer.tsx","../src/renderers/PptxRenderer.tsx","../../../node_modules/.pnpm/@kenjiuno+msgreader@1.28.0/node_modules/@kenjiuno/msgreader/lib/utils.js","../../../node_modules/.pnpm/@kenjiuno+msgreader@1.28.0/node_modules/@kenjiuno/msgreader/lib/const.js","../../../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js","../../../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js","../../../node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.js","../../../node_modules/.pnpm/safer-buffer@2.1.2/node_modules/safer-buffer/safer.js","../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/lib/bom-handling.js","../../../node_modules/.pnpm/safe-buffer@5.1.2/node_modules/safe-buffer/index.js","../../../node_modules/.pnpm/string_decoder@1.1.1/node_modules/string_decoder/lib/string_decoder.js","../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/internal.js","../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/utf32.js","../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/utf16.js","../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/utf7.js","../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/sbcs-codec.js","../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/sbcs-data.js","../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/sbcs-data-generated.js","../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/dbcs-codec.js","../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/dbcs-data.js","../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/encodings/index.js","../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/lib/streams.js","../__vite-browser-external","../../../node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/lib/index.js","../../../node_modules/.pnpm/@kenjiuno+msgreader@1.28.0/node_modules/@kenjiuno/msgreader/lib/DataStream.js","../../../node_modules/.pnpm/@kenjiuno+msgreader@1.28.0/node_modules/@kenjiuno/msgreader/lib/Reader.js","../../../node_modules/.pnpm/@kenjiuno+msgreader@1.28.0/node_modules/@kenjiuno/msgreader/lib/Burner.js","../../../node_modules/.pnpm/@kenjiuno+msgreader@1.28.0/node_modules/@kenjiuno/msgreader/lib/EntryStreamParser.js","../../../node_modules/.pnpm/@kenjiuno+msgreader@1.28.0/node_modules/@kenjiuno/msgreader/lib/VerbStreamParser.js","../../../node_modules/.pnpm/@kenjiuno+msgreader@1.28.0/node_modules/@kenjiuno/msgreader/lib/TZDEFINITIONParser.js","../../../node_modules/.pnpm/@kenjiuno+msgreader@1.28.0/node_modules/@kenjiuno/msgreader/lib/TZREGParser.js","../../../node_modules/.pnpm/@kenjiuno+msgreader@1.28.0/node_modules/@kenjiuno/msgreader/lib/AppointmentRecurParser.js","../../../node_modules/.pnpm/@kenjiuno+msgreader@1.28.0/node_modules/@kenjiuno/msgreader/lib/MsgReader.js","../../../node_modules/.pnpm/@kenjiuno+msgreader@1.28.0/node_modules/@kenjiuno/msgreader/lib/index.js","../src/renderers/MsgRenderer.tsx","../src/renderers/VideoRenderer.tsx","../src/renderers/hooks/useAudioPlayer.ts","../src/renderers/AudioRenderer.tsx","../../../node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@18.3.1/node_modules/react-syntax-highlighter/dist/esm/styles/prism/ghcolors.js","../../../node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@18.3.1/node_modules/react-syntax-highlighter/dist/esm/styles/prism/vsc-dark-plus.js","../src/renderers/MarkdownRenderer.tsx","../src/renderers/TextRenderer.tsx","../src/renderers/UnsupportedRenderer.tsx","../src/FilePreviewModal.tsx","../src/index.ts"],"sourcesContent":["import { PreviewFile, PreviewFileInput } from '../types';\n\n/**\n * 从 URL 字符串中提取文件名\n */\nfunction getFileNameFromUrl(url: string): string {\n try {\n const urlObj = new URL(url);\n const pathname = urlObj.pathname;\n const fileName = pathname.split('/').pop() || 'file';\n return decodeURIComponent(fileName);\n } catch {\n // 如果不是有效的 URL,尝试从路径中提取\n const fileName = url.split('/').pop() || 'file';\n return decodeURIComponent(fileName);\n }\n}\n\n/**\n * 从文件名中推断 MIME 类型\n */\nfunction inferMimeType(fileName: string): string {\n const ext = fileName.split('.').pop()?.toLowerCase() || '';\n \n const mimeTypes: Record<string, string> = {\n // 图片\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n png: 'image/png',\n gif: 'image/gif',\n webp: 'image/webp',\n svg: 'image/svg+xml',\n bmp: 'image/bmp',\n ico: 'image/x-icon',\n \n // 视频\n mp4: 'video/mp4',\n webm: 'video/webm',\n ogg: 'video/ogg',\n ogv: 'video/ogg',\n mov: 'video/quicktime',\n avi: 'video/x-msvideo',\n mkv: 'video/x-matroska',\n m4v: 'video/x-m4v',\n '3gp': 'video/3gpp',\n flv: 'video/x-flv',\n \n // 音频\n mp3: 'audio/mpeg',\n wav: 'audio/wav',\n m4a: 'audio/mp4',\n aac: 'audio/aac',\n flac: 'audio/flac',\n \n // 文档\n pdf: 'application/pdf',\n docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n ppt: 'application/vnd.ms-powerpoint',\n msg: 'application/vnd.ms-outlook',\n \n // 文本\n txt: 'text/plain',\n md: 'text/markdown',\n markdown: 'text/markdown',\n json: 'application/json',\n xml: 'application/xml',\n html: 'text/html',\n css: 'text/css',\n js: 'text/javascript',\n ts: 'text/typescript',\n jsx: 'text/javascript',\n tsx: 'text/typescript',\n py: 'text/x-python',\n java: 'text/x-java',\n cpp: 'text/x-c++src',\n c: 'text/x-csrc',\n cs: 'text/x-csharp',\n php: 'text/x-php',\n rb: 'text/x-ruby',\n go: 'text/x-go',\n rs: 'text/x-rust',\n yaml: 'text/yaml',\n yml: 'text/yaml',\n };\n \n return mimeTypes[ext] || 'application/octet-stream';\n}\n\n/**\n * 标准化文件输入为 PreviewFile 格式\n * 支持三种输入类型:\n * 1. File 对象(原生浏览器 File)\n * 2. PreviewFileLink 对象(包含 name, url, type 等属性)\n * 3. string(HTTP URL)\n */\nexport function normalizeFile(input: PreviewFileInput, index: number = 0): PreviewFile {\n // 情况 1: 原生 File 对象\n if (input instanceof File) {\n return {\n id: `file-${Date.now()}-${index}`,\n name: input.name,\n url: URL.createObjectURL(input),\n type: input.type || inferMimeType(input.name),\n size: input.size,\n };\n }\n \n // 情况 2: 字符串 URL\n if (typeof input === 'string') {\n const fileName = getFileNameFromUrl(input);\n return {\n id: `url-${Date.now()}-${index}`,\n name: fileName,\n url: input,\n type: inferMimeType(fileName),\n };\n }\n \n // 情况 3: PreviewFileLink 对象\n return {\n id: input.id || `link-${Date.now()}-${index}`,\n name: input.name,\n url: input.url,\n type: input.type || inferMimeType(input.name),\n size: input.size,\n };\n}\n\n/**\n * 批量标准化文件输入\n */\nexport function normalizeFiles(inputs: PreviewFileInput[]): PreviewFile[] {\n return inputs.map((input, index) => normalizeFile(input, index));\n}\n\n","import { useState, useEffect, useRef, useCallback } from 'react';\nimport { motion } from 'framer-motion';\n\ninterface ImageRendererProps {\n url: string;\n zoom: number;\n rotation: number;\n onZoomChange?: (zoom: number) => void;\n onNaturalWidthChange?: (width: number) => void;\n onNaturalHeightChange?: (height: number) => void;\n}\n\nexport const ImageRenderer: React.FC<ImageRendererProps> = ({\n url,\n zoom,\n rotation,\n onZoomChange,\n onNaturalWidthChange,\n onNaturalHeightChange\n}) => {\n const [loaded, setLoaded] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [position, setPosition] = useState({ x: 0, y: 0 });\n const [isDragging, setIsDragging] = useState(false);\n const [dragStart, setDragStart] = useState({ x: 0, y: 0 });\n const [internalZoom, setInternalZoom] = useState(1); // 内部缩放状态\n const imgRef = useRef<HTMLImageElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setLoaded(false);\n setError(null);\n setPosition({ x: 0, y: 0 });\n setInternalZoom(1);\n }, [url]);\n\n // 当外部 zoom 改变时,同步内部 zoom\n useEffect(() => {\n setInternalZoom(zoom);\n }, [zoom]);\n\n // 重置位置当缩放或旋转改变时\n useEffect(() => {\n setPosition({ x: 0, y: 0 });\n }, [zoom, rotation]);\n\n const handleLoad = (e: React.SyntheticEvent<HTMLImageElement>) => {\n setLoaded(true);\n const img = e.currentTarget;\n onNaturalWidthChange?.(img.naturalWidth);\n onNaturalHeightChange?.(img.naturalHeight);\n };\n\n const handleError = () => {\n setError('图片加载失败');\n setLoaded(true);\n };\n\n const handleDoubleClick = () => {\n // 双击重置位置\n setPosition({ x: 0, y: 0 });\n };\n\n // 鼠标滚轮缩放\n const handleWheel = useCallback((e: React.WheelEvent) => {\n e.preventDefault();\n e.stopPropagation();\n const delta = e.deltaY > 0 ? -0.05 : 0.05;\n setInternalZoom(prev => {\n const newZoom = Math.max(0.01, Math.min(10, prev + delta)); // 限制缩放范围 0.01-10\n // 同步缩放比例到父组件\n if (onZoomChange) {\n onZoomChange(newZoom);\n }\n return newZoom;\n });\n }, [onZoomChange]);\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n if (e.button !== 0) return; // 只响应左键\n setIsDragging(true);\n setDragStart({\n x: e.clientX - position.x,\n y: e.clientY - position.y,\n });\n }, [position]);\n\n const handleMouseMove = useCallback((e: React.MouseEvent) => {\n if (!isDragging) return;\n setPosition({\n x: e.clientX - dragStart.x,\n y: e.clientY - dragStart.y,\n });\n }, [isDragging, dragStart]);\n\n const handleMouseUp = useCallback(() => {\n setIsDragging(false);\n }, []);\n\n return (\n <div\n ref={containerRef}\n className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-overflow-hidden\"\n onWheel={handleWheel}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n onMouseLeave={handleMouseUp}\n style={{ cursor: isDragging ? 'grabbing' : 'grab' }}\n >\n {!loaded && !error && (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center\">\n <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-white/20 rfp-border-t-white rfp-rounded-full rfp-animate-spin\" />\n </div>\n )}\n\n {error && (\n <div className=\"rfp-text-white/70 rfp-text-center\">\n <p className=\"rfp-text-lg\">{error}</p>\n </div>\n )}\n\n <motion.img\n ref={imgRef}\n src={url}\n alt=\"Preview\"\n className={`rfp-max-w-none rfp-select-none ${!loaded ? 'rfp-hidden' : ''}`}\n style={{\n transform: `translate(${position.x}px, ${position.y}px) scale(${internalZoom}) rotate(${rotation}deg)`,\n transformOrigin: 'center',\n transition: isDragging ? 'none' : 'transform 0.3s ease-out',\n }}\n onLoad={handleLoad}\n onError={handleError}\n onDoubleClick={handleDoubleClick}\n initial={{ opacity: 0 }}\n animate={{ opacity: loaded ? 1 : 0 }}\n transition={{ duration: 0.3 }}\n draggable={false}\n />\n </div>\n );\n};\n","import { pdfjs } from 'react-pdf';\n\n/**\n * PDF.js Worker 配置选项\n */\nexport interface PdfConfigOptions {\n /**\n * PDF.js worker 文件路径\n * 默认使用 CDN: `https://unpkg.com/pdfjs-dist@${version}/build/pdf.worker.min.mjs`\n */\n workerSrc?: string;\n \n /**\n * CMap 文件目录路径\n * 默认使用 CDN: `https://unpkg.com/pdfjs-dist@${version}/cmaps/`\n */\n cMapUrl?: string;\n \n /**\n * 是否使用压缩的 CMap 文件\n * 默认: true\n */\n cMapPacked?: boolean;\n}\n\n/**\n * 配置 PDF.js\n *\n * @example\n * ```ts\n * // 使用本地静态文件(推荐用于生产环境)\n * configurePdfjs({\n * workerSrc: '/pdfjs/pdf.worker.min.mjs',\n * cMapUrl: '/pdfjs/cmaps/',\n * cMapPacked: true\n * });\n * ```\n *\n * @example\n * ```ts\n * // 使用 CDN(默认配置)\n * configurePdfjs(); // 自动使用 unpkg CDN\n * ```\n */\nexport function configurePdfjs(options?: PdfConfigOptions) {\n if (typeof window === 'undefined') return;\n\n const {\n workerSrc = `https://unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`,\n cMapUrl = `https://unpkg.com/pdfjs-dist@${pdfjs.version}/cmaps/`,\n cMapPacked = true\n } = options || {};\n\n pdfjs.GlobalWorkerOptions.workerSrc = workerSrc;\n // @ts-ignore - cMapUrl 和 cMapPacked 在 react-pdf 的类型定义中不存在,但在运行时可用\n pdfjs.GlobalWorkerOptions.cMapUrl = cMapUrl;\n // @ts-ignore\n pdfjs.GlobalWorkerOptions.cMapPacked = cMapPacked;\n}\n\n// 默认使用 CDN 配置\nconfigurePdfjs();\n\nexport { pdfjs };\n\n","import { useState, useEffect, useRef, useCallback } from 'react';\nimport { Document, Page } from 'react-pdf';\nimport 'react-pdf/dist/esm/Page/AnnotationLayer.css';\nimport 'react-pdf/dist/esm/Page/TextLayer.css';\n\n// 导入 PDF.js 配置\nimport '../utils/pdfConfig';\n\ninterface PdfRendererProps {\n url: string;\n zoom: number;\n currentPage: number;\n onPageChange: (page: number) => void;\n onTotalPagesChange: (total: number) => void;\n onPageWidthChange?: (width: number) => void;\n}\n\nexport const PdfRenderer: React.FC<PdfRendererProps> = ({\n url,\n zoom,\n currentPage,\n onPageChange,\n onTotalPagesChange,\n onPageWidthChange,\n}) => {\n const [numPages, setNumPages] = useState<number>(0);\n const [error, setError] = useState<string | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const pageRefs = useRef<Map<number, HTMLDivElement>>(new Map());\n\n useEffect(() => {\n setError(null);\n }, [url]);\n\n const onDocumentLoadSuccess = ({ numPages }: { numPages: number }) => {\n setNumPages(numPages);\n onTotalPagesChange(numPages);\n onPageChange(1);\n };\n\n const onDocumentLoadError = (error: Error) => {\n console.error('PDF 加载错误:', error);\n setError('PDF 文件加载失败');\n };\n\n // 滚动时更新当前页码\n const handleScroll = useCallback(() => {\n if (!containerRef.current) return;\n\n const container = containerRef.current;\n const scrollTop = container.scrollTop;\n const containerHeight = container.clientHeight;\n const scrollCenter = scrollTop + containerHeight / 2;\n\n // 找到当前可见的页面\n let currentVisiblePage = 1;\n let minDistance = Infinity;\n\n pageRefs.current.forEach((pageElement, pageNumber) => {\n const rect = pageElement.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n const pageCenter = rect.top - containerRect.top + rect.height / 2 + scrollTop;\n const distance = Math.abs(pageCenter - scrollCenter);\n\n if (distance < minDistance) {\n minDistance = distance;\n currentVisiblePage = pageNumber;\n }\n });\n\n if (currentVisiblePage !== currentPage) {\n onPageChange(currentVisiblePage);\n }\n }, [currentPage, onPageChange]);\n\n // 监听滚动事件\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n container.addEventListener('scroll', handleScroll);\n return () => container.removeEventListener('scroll', handleScroll);\n }, [handleScroll]);\n\n // 设置页面引用\n const setPageRef = useCallback((pageNumber: number, element: HTMLDivElement | null) => {\n if (element) {\n pageRefs.current.set(pageNumber, element);\n } else {\n pageRefs.current.delete(pageNumber);\n }\n }, []);\n\n return (\n <div\n ref={containerRef}\n className=\"rfp-flex rfp-flex-col rfp-items-center rfp-w-full rfp-h-full rfp-overflow-auto rfp-py-4 md:rfp-py-8 rfp-px-2 md:rfp-px-4\"\n >\n {error && (\n <div className=\"rfp-text-white/70 rfp-text-center\">\n <p className=\"rfp-text-lg\">{error}</p>\n </div>\n )}\n\n {!error && (\n <Document\n file={url}\n onLoadSuccess={onDocumentLoadSuccess}\n onLoadError={onDocumentLoadError}\n loading={\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-min-h-screen\">\n <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-white/20 rfp-border-t-white rfp-rounded-full rfp-animate-spin\" />\n </div>\n }\n >\n <div className=\"rfp-flex rfp-flex-col rfp-gap-4\">\n {Array.from(new Array(numPages), (_, index) => {\n const pageNumber = index + 1;\n return (\n <div\n key={`page_${pageNumber}`}\n ref={(el) => setPageRef(pageNumber, el)}\n className=\"rfp-relative\"\n >\n <Page\n pageNumber={pageNumber}\n scale={zoom}\n loading={\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-p-8 rfp-bg-white/5 rfp-rounded-lg rfp-min-h-[600px]\">\n <div className=\"rfp-w-8 rfp-h-8 rfp-border-4 rfp-border-white/20 rfp-border-t-white rfp-rounded-full rfp-animate-spin\" />\n </div>\n }\n renderTextLayer={true}\n renderAnnotationLayer={true}\n className=\"rfp-shadow-2xl\"\n onRenderSuccess={(page) => {\n if (pageNumber === 1 && onPageWidthChange) {\n // 上报 scale=1 时的原始页面宽度\n onPageWidthChange(page.originalWidth || page.width / zoom);\n }\n }}\n />\n {/* 页码标签 */}\n <div className=\"rfp-absolute rfp-top-2 rfp-right-2 rfp-bg-black/60 rfp-backdrop-blur-sm rfp-text-white rfp-text-xs rfp-px-3 rfp-py-1 rfp-rounded-full\">\n {pageNumber}\n </div>\n </div>\n );\n })}\n </div>\n </Document>\n )}\n\n {/* 底部页码指示器 */}\n {numPages > 0 && (\n <div className=\"rfp-sticky rfp-bottom-2 md:rfp-bottom-4 rfp-mt-4 md:rfp-mt-8 rfp-bg-black/60 rfp-backdrop-blur-xl rfp-text-white rfp-px-4 rfp-py-2 md:rfp-px-6 md:rfp-py-3 rfp-rounded-full rfp-text-xs md:rfp-text-sm rfp-font-medium rfp-shadow-2xl rfp-border rfp-border-white/10\">\n 第 {currentPage} 页 / 共 {numPages} 页\n </div>\n )}\n </div>\n );\n};\n","import { useState, useEffect, useRef, useCallback } from 'react';\nimport mammoth from 'mammoth';\n\ninterface DocxRendererProps {\n url: string;\n}\n\n// A4 page dimensions (96dpi)\nconst PAGE_HEIGHT = 1123;\nconst PAGE_PADDING_Y = 60;\nconst PAGE_PADDING_X = 50;\nconst PAGE_CONTENT_HEIGHT = PAGE_HEIGHT - PAGE_PADDING_Y * 2;\nconst PAGE_GAP = 24;\n\nconst contentStyle: React.CSSProperties = {\n fontFamily: 'system-ui, -apple-system, sans-serif',\n lineHeight: '1.8',\n color: '#333',\n};\n\nexport const DocxRenderer: React.FC<DocxRendererProps> = ({ url }) => {\n const [html, setHtml] = useState<string>('');\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [pages, setPages] = useState<string[]>([]);\n const measureRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const loadDocx = async () => {\n setLoading(true);\n setError(null);\n setHtml('');\n\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error('文件加载失败');\n }\n\n const arrayBuffer = await response.arrayBuffer();\n const result = await mammoth.convertToHtml({ arrayBuffer });\n setHtml(result.value);\n } catch (err) {\n console.error('Docx 解析错误:', err);\n setError('Word 文档解析失败');\n } finally {\n setLoading(false);\n }\n };\n\n loadDocx();\n }, [url]);\n\n const paginate = useCallback(() => {\n const container = measureRef.current;\n if (!container || !html) return;\n\n const children = Array.from(container.children) as HTMLElement[];\n if (children.length === 0) {\n setPages([html]);\n return;\n }\n\n const result: string[][] = [[]];\n let currentPageUsed = 0;\n\n for (const child of children) {\n const h = child.offsetHeight;\n\n // If adding this block would exceed page content area and page isn't empty,\n // start a new page\n if (currentPageUsed > 0 && currentPageUsed + h > PAGE_CONTENT_HEIGHT) {\n result.push([]);\n currentPageUsed = 0;\n }\n\n result[result.length - 1].push(child.outerHTML);\n currentPageUsed += h;\n }\n\n // At least one page\n if (result.length === 0) result.push([]);\n\n setPages(result.map(blocks => blocks.join('')));\n }, [html]);\n\n useEffect(() => {\n if (!html || !measureRef.current) return;\n requestAnimationFrame(() => {\n paginate();\n });\n }, [html, paginate]);\n\n if (loading) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-white/20 rfp-border-t-white rfp-rounded-full rfp-animate-spin\" />\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-text-white/70 rfp-text-center\">\n <p className=\"rfp-text-lg\">{error}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div\n className=\"rfp-w-full rfp-h-full rfp-overflow-auto\"\n style={{ background: 'rgba(0, 0, 0, 0.15)' }}\n >\n {/* Hidden measurement div — same width as page content area */}\n <div\n ref={measureRef}\n dangerouslySetInnerHTML={{ __html: html }}\n style={{\n ...contentStyle,\n position: 'absolute',\n visibility: 'hidden',\n width: `${794 - PAGE_PADDING_X * 2}px`,\n pointerEvents: 'none',\n }}\n />\n\n {/* Visible pages */}\n <div\n className=\"rfp-py-6 md:rfp-py-10 rfp-flex rfp-flex-col rfp-items-center\"\n style={{ gap: `${PAGE_GAP}px` }}\n >\n {(pages.length > 0 ? pages : ['']).map((pageHtml, i) => (\n <div\n key={i}\n style={{\n width: '100%',\n maxWidth: '794px',\n minHeight: `${PAGE_HEIGHT}px`,\n background: 'white',\n boxShadow: '0 2px 12px rgba(0, 0, 0, 0.15)',\n flexShrink: 0,\n padding: `${PAGE_PADDING_Y}px ${PAGE_PADDING_X}px`,\n }}\n >\n <div\n dangerouslySetInnerHTML={{ __html: pageHtml }}\n style={contentStyle}\n />\n </div>\n ))}\n </div>\n </div>\n );\n};\n","/* global document */\n/* global window */\nclass Element {\n constructor(tag, className = '') {\n if (typeof tag === 'string') {\n this.el = document.createElement(tag);\n this.el.className = className;\n } else {\n this.el = tag;\n }\n this.data = {};\n }\n\n data(key, value) {\n if (value !== undefined) {\n this.data[key] = value;\n return this;\n }\n return this.data[key];\n }\n\n on(eventNames, handler) {\n const [fen, ...oen] = eventNames.split('.');\n let eventName = fen;\n if (eventName === 'mousewheel' && /Firefox/i.test(window.navigator.userAgent)) {\n eventName = 'DOMMouseScroll';\n }\n this.el.addEventListener(eventName, (evt) => {\n handler(evt);\n for (let i = 0; i < oen.length; i += 1) {\n const k = oen[i];\n if (k === 'left' && evt.button !== 0) {\n return;\n }\n if (k === 'right' && evt.button !== 2) {\n return;\n }\n if (k === 'stop') {\n evt.stopPropagation();\n }\n }\n });\n return this;\n }\n\n offset(value) {\n if (value !== undefined) {\n Object.keys(value).forEach((k) => {\n this.css(k, `${value[k]}px`);\n });\n return this;\n }\n const {\n offsetTop, offsetLeft, offsetHeight, offsetWidth,\n } = this.el;\n return {\n top: offsetTop,\n left: offsetLeft,\n height: offsetHeight,\n width: offsetWidth,\n };\n }\n\n scroll(v) {\n const { el } = this;\n if (v !== undefined) {\n if (v.left !== undefined) {\n el.scrollLeft = v.left;\n }\n if (v.top !== undefined) {\n el.scrollTop = v.top;\n }\n }\n return { left: el.scrollLeft, top: el.scrollTop };\n }\n\n box() {\n return this.el.getBoundingClientRect();\n }\n\n parent() {\n return new Element(this.el.parentNode);\n }\n\n children(...eles) {\n if (arguments.length === 0) {\n return this.el.childNodes;\n }\n eles.forEach(ele => this.child(ele));\n return this;\n }\n\n removeChild(el) {\n this.el.removeChild(el);\n }\n\n /*\n first() {\n return this.el.firstChild;\n }\n\n last() {\n return this.el.lastChild;\n }\n\n remove(ele) {\n return this.el.removeChild(ele);\n }\n\n prepend(ele) {\n const { el } = this;\n if (el.children.length > 0) {\n el.insertBefore(ele, el.firstChild);\n } else {\n el.appendChild(ele);\n }\n return this;\n }\n\n prev() {\n return this.el.previousSibling;\n }\n\n next() {\n return this.el.nextSibling;\n }\n */\n\n child(arg) {\n let ele = arg;\n if (typeof arg === 'string') {\n ele = document.createTextNode(arg);\n } else if (arg instanceof Element) {\n ele = arg.el;\n }\n this.el.appendChild(ele);\n return this;\n }\n\n contains(ele) {\n return this.el.contains(ele);\n }\n\n className(v) {\n if (v !== undefined) {\n this.el.className = v;\n return this;\n }\n return this.el.className;\n }\n\n addClass(name) {\n this.el.classList.add(name);\n return this;\n }\n\n hasClass(name) {\n return this.el.classList.contains(name);\n }\n\n removeClass(name) {\n this.el.classList.remove(name);\n return this;\n }\n\n toggle(cls = 'active') {\n return this.toggleClass(cls);\n }\n\n toggleClass(name) {\n return this.el.classList.toggle(name);\n }\n\n active(flag = true, cls = 'active') {\n if (flag) this.addClass(cls);\n else this.removeClass(cls);\n return this;\n }\n\n checked(flag = true) {\n this.active(flag, 'checked');\n return this;\n }\n\n disabled(flag = true) {\n if (flag) this.addClass('disabled');\n else this.removeClass('disabled');\n return this;\n }\n\n // key, value\n // key\n // {k, v}...\n attr(key, value) {\n if (value !== undefined) {\n this.el.setAttribute(key, value);\n } else {\n if (typeof key === 'string') {\n return this.el.getAttribute(key);\n }\n Object.keys(key).forEach((k) => {\n this.el.setAttribute(k, key[k]);\n });\n }\n return this;\n }\n\n removeAttr(key) {\n this.el.removeAttribute(key);\n return this;\n }\n\n html(content) {\n if (content !== undefined) {\n this.el.innerHTML = content;\n return this;\n }\n return this.el.innerHTML;\n }\n\n val(v) {\n if (v !== undefined) {\n this.el.value = v;\n return this;\n }\n return this.el.value;\n }\n\n focus() {\n this.el.focus();\n }\n\n cssRemoveKeys(...keys) {\n keys.forEach(k => this.el.style.removeProperty(k));\n return this;\n }\n\n // css( propertyName )\n // css( propertyName, value )\n // css( properties )\n css(name, value) {\n if (value === undefined && typeof name !== 'string') {\n Object.keys(name).forEach((k) => {\n this.el.style[k] = name[k];\n });\n return this;\n }\n if (value !== undefined) {\n this.el.style[name] = value;\n return this;\n }\n return this.el.style[name];\n }\n\n computedStyle() {\n return window.getComputedStyle(this.el, null);\n }\n\n show() {\n this.css('display', 'block');\n return this;\n }\n\n hide() {\n this.css('display', 'none');\n return this;\n }\n}\n\nconst h = (tag, className = '') => new Element(tag, className);\n\nexport {\n Element,\n h,\n};\n","import './_.prototypes';\n\nconst alphabets = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];\n\n/** index number 2 letters\n * @example stringAt(26) ==> 'AA'\n * @date 2019-10-10\n * @export\n * @param {number} index\n * @returns {string}\n */\nexport function stringAt(index) {\n let str = '';\n let cindex = index;\n while (cindex >= alphabets.length) {\n cindex /= alphabets.length;\n cindex -= 1;\n str += alphabets[parseInt(cindex, 10) % alphabets.length];\n }\n const last = index % alphabets.length;\n str += alphabets[last];\n return str;\n}\n\n/** translate letter in A1-tag to number\n * @date 2019-10-10\n * @export\n * @param {string} str \"AA\" in A1-tag \"AA1\"\n * @returns {number}\n */\nexport function indexAt(str) {\n let ret = 0;\n for (let i = 0; i < str.length - 1; i += 1) {\n const cindex = str.charCodeAt(i) - 65;\n const exponet = str.length - 1 - i;\n ret += (alphabets.length ** exponet) + (alphabets.length * cindex);\n }\n ret += str.charCodeAt(str.length - 1) - 65;\n return ret;\n}\n\n// B10 => x,y\n/** translate A1-tag to XY-tag\n * @date 2019-10-10\n * @export\n * @param {tagA1} src\n * @returns {tagXY}\n */\nexport function expr2xy(src) {\n let x = '';\n let y = '';\n for (let i = 0; i < src.length; i += 1) {\n if (src.charAt(i) >= '0' && src.charAt(i) <= '9') {\n y += src.charAt(i);\n } else {\n x += src.charAt(i);\n }\n }\n return [indexAt(x), parseInt(y, 10) - 1];\n}\n\n/** translate XY-tag to A1-tag\n * @example x,y => B10\n * @date 2019-10-10\n * @export\n * @param {number} x\n * @param {number} y\n * @returns {tagA1}\n */\nexport function xy2expr(x, y) {\n return `${stringAt(x)}${y + 1}`;\n}\n\n/** translate A1-tag src by (xn, yn)\n * @date 2019-10-10\n * @export\n * @param {tagA1} src\n * @param {number} xn\n * @param {number} yn\n * @returns {tagA1}\n */\nexport function expr2expr(src, xn, yn, condition = () => true) {\n if (xn === 0 && yn === 0) return src;\n const [x, y] = expr2xy(src);\n if (!condition(x, y)) return src;\n return xy2expr(x + xn, y + yn);\n}\n\nexport default {\n stringAt,\n indexAt,\n expr2xy,\n xy2expr,\n expr2expr,\n};\n","import { xy2expr, expr2xy } from './alphabet';\n\nclass CellRange {\n constructor(sri, sci, eri, eci, w = 0, h = 0) {\n this.sri = sri;\n this.sci = sci;\n this.eri = eri;\n this.eci = eci;\n this.w = w;\n this.h = h;\n }\n\n set(sri, sci, eri, eci) {\n this.sri = sri;\n this.sci = sci;\n this.eri = eri;\n this.eci = eci;\n }\n\n multiple() {\n return this.eri - this.sri > 0 || this.eci - this.sci > 0;\n }\n\n // cell-index: ri, ci\n // cell-ref: A10\n includes(...args) {\n let [ri, ci] = [0, 0];\n if (args.length === 1) {\n [ci, ri] = expr2xy(args[0]);\n } else if (args.length === 2) {\n [ri, ci] = args;\n }\n const {\n sri, sci, eri, eci,\n } = this;\n return sri <= ri && ri <= eri && sci <= ci && ci <= eci;\n }\n\n each(cb, rowFilter = () => true) {\n const {\n sri, sci, eri, eci,\n } = this;\n for (let i = sri; i <= eri; i += 1) {\n if (rowFilter(i)) {\n for (let j = sci; j <= eci; j += 1) {\n cb(i, j);\n }\n }\n }\n }\n\n contains(other) {\n return this.sri <= other.sri\n && this.sci <= other.sci\n && this.eri >= other.eri\n && this.eci >= other.eci;\n }\n\n // within\n within(other) {\n return this.sri >= other.sri\n && this.sci >= other.sci\n && this.eri <= other.eri\n && this.eci <= other.eci;\n }\n\n // disjoint\n disjoint(other) {\n return this.sri > other.eri\n || this.sci > other.eci\n || other.sri > this.eri\n || other.sci > this.eci;\n }\n\n // intersects\n intersects(other) {\n return this.sri <= other.eri\n && this.sci <= other.eci\n && other.sri <= this.eri\n && other.sci <= this.eci;\n }\n\n // union\n union(other) {\n const {\n sri, sci, eri, eci,\n } = this;\n return new CellRange(\n other.sri < sri ? other.sri : sri,\n other.sci < sci ? other.sci : sci,\n other.eri > eri ? other.eri : eri,\n other.eci > eci ? other.eci : eci,\n );\n }\n\n // intersection\n // intersection(other) {}\n\n // Returns Array<CellRange> that represents that part of this that does not intersect with other\n // difference\n difference(other) {\n const ret = [];\n const addRet = (sri, sci, eri, eci) => {\n ret.push(new CellRange(sri, sci, eri, eci));\n };\n const {\n sri, sci, eri, eci,\n } = this;\n const dsr = other.sri - sri;\n const dsc = other.sci - sci;\n const der = eri - other.eri;\n const dec = eci - other.eci;\n if (dsr > 0) {\n addRet(sri, sci, other.sri - 1, eci);\n if (der > 0) {\n addRet(other.eri + 1, sci, eri, eci);\n if (dsc > 0) {\n addRet(other.sri, sci, other.eri, other.sci - 1);\n }\n if (dec > 0) {\n addRet(other.sri, other.eci + 1, other.eri, eci);\n }\n } else {\n if (dsc > 0) {\n addRet(other.sri, sci, eri, other.sci - 1);\n }\n if (dec > 0) {\n addRet(other.sri, other.eci + 1, eri, eci);\n }\n }\n } else if (der > 0) {\n addRet(other.eri + 1, sci, eri, eci);\n if (dsc > 0) {\n addRet(sri, sci, other.eri, other.sci - 1);\n }\n if (dec > 0) {\n addRet(sri, other.eci + 1, other.eri, eci);\n }\n }\n if (dsc > 0) {\n addRet(sri, sci, eri, other.sci - 1);\n if (dec > 0) {\n addRet(sri, other.eri + 1, eri, eci);\n if (dsr > 0) {\n addRet(sri, other.sci, other.sri - 1, other.eci);\n }\n if (der > 0) {\n addRet(other.sri + 1, other.sci, eri, other.eci);\n }\n } else {\n if (dsr > 0) {\n addRet(sri, other.sci, other.sri - 1, eci);\n }\n if (der > 0) {\n addRet(other.sri + 1, other.sci, eri, eci);\n }\n }\n } else if (dec > 0) {\n addRet(eri, other.eci + 1, eri, eci);\n if (dsr > 0) {\n addRet(sri, sci, other.sri - 1, other.eci);\n }\n if (der > 0) {\n addRet(other.eri + 1, sci, eri, other.eci);\n }\n }\n return ret;\n }\n\n size() {\n return [\n this.eri - this.sri + 1,\n this.eci - this.sci + 1,\n ];\n }\n\n toString() {\n const {\n sri, sci, eri, eci,\n } = this;\n let ref = xy2expr(sci, sri);\n if (this.multiple()) {\n ref = `${ref}:${xy2expr(eci, eri)}`;\n }\n return ref;\n }\n\n clone() {\n const {\n sri, sci, eri, eci, w, h,\n } = this;\n return new CellRange(sri, sci, eri, eci, w, h);\n }\n\n /*\n toJSON() {\n return this.toString();\n }\n */\n\n equals(other) {\n return this.eri === other.eri\n && this.eci === other.eci\n && this.sri === other.sri\n && this.sci === other.sci;\n }\n\n static valueOf(ref) {\n // B1:B8, B1 => 1 x 1 cell range\n const refs = ref.split(':');\n const [sci, sri] = expr2xy(refs[0]);\n let [eri, eci] = [sri, sci];\n if (refs.length > 1) {\n [eci, eri] = expr2xy(refs[1]);\n }\n return new CellRange(sri, sci, eri, eci);\n }\n}\n\nexport default CellRange;\n\nexport {\n CellRange,\n};\n","import { CellRange } from './cell_range';\n\nexport default class Selector {\n constructor() {\n this.range = new CellRange(0, 0, 0, 0);\n this.ri = 0;\n this.ci = 0;\n }\n\n multiple() {\n return this.range.multiple();\n }\n\n setIndexes(ri, ci) {\n this.ri = ri;\n this.ci = ci;\n }\n\n size() {\n return this.range.size();\n }\n}\n","export default class Scroll {\n constructor() {\n this.x = 0; // left\n this.y = 0; // top\n this.ri = 0; // cell row-index\n this.ci = 0; // cell col-index\n }\n}\n","// import helper from '../helper';\n\nexport default class History {\n constructor() {\n this.undoItems = [];\n this.redoItems = [];\n }\n\n add(data) {\n this.undoItems.push(JSON.stringify(data));\n this.redoItems = [];\n }\n\n canUndo() {\n return this.undoItems.length > 0;\n }\n\n canRedo() {\n return this.redoItems.length > 0;\n }\n\n undo(currentd, cb) {\n const { undoItems, redoItems } = this;\n if (this.canUndo()) {\n redoItems.push(JSON.stringify(currentd));\n cb(JSON.parse(undoItems.pop()));\n }\n }\n\n redo(currentd, cb) {\n const { undoItems, redoItems } = this;\n if (this.canRedo()) {\n undoItems.push(JSON.stringify(currentd));\n cb(JSON.parse(redoItems.pop()));\n }\n }\n}\n","export default class Clipboard {\n constructor() {\n this.range = null; // CellRange\n this.state = 'clear';\n }\n\n copy(cellRange) {\n this.range = cellRange;\n this.state = 'copy';\n return this;\n }\n\n cut(cellRange) {\n this.range = cellRange;\n this.state = 'cut';\n return this;\n }\n\n isCopy() {\n return this.state === 'copy';\n }\n\n isCut() {\n return this.state === 'cut';\n }\n\n isClear() {\n return this.state === 'clear';\n }\n\n clear() {\n this.range = null;\n this.state = 'clear';\n }\n}\n","import { CellRange } from './cell_range';\n// operator: all|eq|neq|gt|gte|lt|lte|in|be\n// value:\n// in => []\n// be => [min, max]\nclass Filter {\n constructor(ci, operator, value) {\n this.ci = ci;\n this.operator = operator;\n this.value = value;\n }\n\n set(operator, value) {\n this.operator = operator;\n this.value = value;\n }\n\n includes(v) {\n const { operator, value } = this;\n if (operator === 'all') {\n return true;\n }\n if (operator === 'in') {\n return value.includes(v);\n }\n return false;\n }\n\n vlength() {\n const { operator, value } = this;\n if (operator === 'in') {\n return value.length;\n }\n return 0;\n }\n\n getData() {\n const { ci, operator, value } = this;\n return { ci, operator, value };\n }\n}\n\nclass Sort {\n constructor(ci, order) {\n this.ci = ci;\n this.order = order;\n }\n\n asc() {\n return this.order === 'asc';\n }\n\n desc() {\n return this.order === 'desc';\n }\n}\n\nexport default class AutoFilter {\n constructor() {\n this.ref = null;\n this.filters = [];\n this.sort = null;\n }\n\n setData({ ref, filters, sort }) {\n if (ref != null) {\n this.ref = ref;\n this.filters = filters.map(it => new Filter(it.ci, it.operator, it.value));\n if (sort) {\n this.sort = new Sort(sort.ci, sort.order);\n }\n }\n }\n\n getData() {\n if (this.active()) {\n const { ref, filters, sort } = this;\n return { ref, filters: filters.map(it => it.getData()), sort };\n }\n return {};\n }\n\n addFilter(ci, operator, value) {\n const filter = this.getFilter(ci);\n if (filter == null) {\n this.filters.push(new Filter(ci, operator, value));\n } else {\n filter.set(operator, value);\n }\n }\n\n setSort(ci, order) {\n this.sort = order ? new Sort(ci, order) : null;\n }\n\n includes(ri, ci) {\n if (this.active()) {\n return this.hrange().includes(ri, ci);\n }\n return false;\n }\n\n getSort(ci) {\n const { sort } = this;\n if (sort && sort.ci === ci) {\n return sort;\n }\n return null;\n }\n\n getFilter(ci) {\n const { filters } = this;\n for (let i = 0; i < filters.length; i += 1) {\n if (filters[i].ci === ci) {\n return filters[i];\n }\n }\n return null;\n }\n\n filteredRows(getCell) {\n // const ary = [];\n // let lastri = 0;\n const rset = new Set();\n const fset = new Set();\n if (this.active()) {\n const { sri, eri } = this.range();\n const { filters } = this;\n for (let ri = sri + 1; ri <= eri; ri += 1) {\n for (let i = 0; i < filters.length; i += 1) {\n const filter = filters[i];\n const cell = getCell(ri, filter.ci);\n const ctext = cell ? cell.text : '';\n if (!filter.includes(ctext)) {\n rset.add(ri);\n break;\n } else {\n fset.add(ri);\n }\n }\n }\n }\n return { rset, fset };\n }\n\n items(ci, getCell) {\n const m = {};\n if (this.active()) {\n const { sri, eri } = this.range();\n for (let ri = sri + 1; ri <= eri; ri += 1) {\n const cell = getCell(ri, ci);\n if (cell !== null && !/^\\s*$/.test(cell.text)) {\n const key = cell.text;\n const cnt = (m[key] || 0) + 1;\n m[key] = cnt;\n } else {\n m[''] = (m[''] || 0) + 1;\n }\n }\n }\n return m;\n }\n\n range() {\n return CellRange.valueOf(this.ref);\n }\n\n hrange() {\n const r = this.range();\n r.eri = r.sri;\n return r;\n }\n\n clear() {\n this.ref = null;\n this.filters = [];\n this.sort = null;\n }\n\n active() {\n return this.ref !== null;\n }\n}\n","import { CellRange } from './cell_range';\n\nclass Merges {\n constructor(d = []) {\n this._ = d;\n }\n\n forEach(cb) {\n this._.forEach(cb);\n }\n\n deleteWithin(cr) {\n this._ = this._.filter(it => !it.within(cr));\n }\n\n getFirstIncludes(ri, ci) {\n for (let i = 0; i < this._.length; i += 1) {\n const it = this._[i];\n if (it.includes(ri, ci)) {\n return it;\n }\n }\n return null;\n }\n\n filterIntersects(cellRange) {\n return new Merges(this._.filter(it => it.intersects(cellRange)));\n }\n\n intersects(cellRange) {\n for (let i = 0; i < this._.length; i += 1) {\n const it = this._[i];\n if (it.intersects(cellRange)) {\n // console.log('intersects');\n return true;\n }\n }\n return false;\n }\n\n union(cellRange) {\n let cr = cellRange;\n this._.forEach((it) => {\n if (it.intersects(cr)) {\n cr = it.union(cr);\n }\n });\n return cr;\n }\n\n add(cr) {\n this.deleteWithin(cr);\n this._.push(cr);\n }\n\n // type: row | column\n shift(type, index, n, cbWithin) {\n this._.forEach((cellRange) => {\n const {\n sri, sci, eri, eci,\n } = cellRange;\n const range = cellRange;\n if (type === 'row') {\n if (sri >= index) {\n range.sri += n;\n range.eri += n;\n } else if (sri < index && index <= eri) {\n range.eri += n;\n cbWithin(sri, sci, n, 0);\n }\n } else if (type === 'column') {\n if (sci >= index) {\n range.sci += n;\n range.eci += n;\n } else if (sci < index && index <= eci) {\n range.eci += n;\n cbWithin(sri, sci, 0, n);\n }\n }\n });\n }\n\n move(cellRange, rn, cn) {\n this._.forEach((it1) => {\n const it = it1;\n if (it.within(cellRange)) {\n it.eri += rn;\n it.sri += rn;\n it.sci += cn;\n it.eci += cn;\n }\n });\n }\n\n setData(merges) {\n this._ = merges.map(merge => CellRange.valueOf(merge));\n return this;\n }\n\n getData() {\n return this._.map(merge => merge.toString());\n }\n}\n\nexport default {};\nexport {\n Merges,\n};\n","/* eslint-disable no-param-reassign */\nfunction cloneDeep(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\n\nconst mergeDeep = (object = {}, ...sources) => {\n sources.forEach((source) => {\n Object.keys(source).forEach((key) => {\n const v = source[key];\n // console.log('k:', key, ', v:', source[key], typeof v, v instanceof Object);\n if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {\n object[key] = v;\n } else if (typeof v !== 'function' && !Array.isArray(v) && v instanceof Object) {\n object[key] = object[key] || {};\n mergeDeep(object[key], v);\n } else {\n object[key] = v;\n }\n });\n });\n // console.log('::', object);\n return object;\n};\n\nfunction equals(obj1, obj2) {\n const keys = Object.keys(obj1);\n if (keys.length !== Object.keys(obj2).length) return false;\n for (let i = 0; i < keys.length; i += 1) {\n const k = keys[i];\n const v1 = obj1[k];\n const v2 = obj2[k];\n if (v2 === undefined) return false;\n if (typeof v1 === 'string' || typeof v1 === 'number' || typeof v1 === 'boolean') {\n if (v1 !== v2) return false;\n } else if (Array.isArray(v1)) {\n if (v1.length !== v2.length) return false;\n for (let ai = 0; ai < v1.length; ai += 1) {\n if (!equals(v1[ai], v2[ai])) return false;\n }\n } else if (typeof v1 !== 'function' && !Array.isArray(v1) && v1 instanceof Object) {\n if (!equals(v1, v2)) return false;\n }\n }\n return true;\n}\n\n/*\n objOrAry: obejct or Array\n cb: (value, index | key) => { return value }\n*/\nconst sum = (objOrAry, cb = value => value) => {\n let total = 0;\n let size = 0;\n Object.keys(objOrAry).forEach((key) => {\n total += cb(objOrAry[key], key);\n size += 1;\n });\n return [total, size];\n};\n\nfunction deleteProperty(obj, property) {\n const oldv = obj[`${property}`];\n delete obj[`${property}`];\n return oldv;\n}\n\nfunction rangeReduceIf(min, max, inits, initv, ifv, getv) {\n let s = inits;\n let v = initv;\n let i = min;\n for (; i < max; i += 1) {\n if (s > ifv) break;\n v = getv(i);\n s += v;\n }\n return [i, s - v, v];\n}\n\nfunction rangeSum(min, max, getv) {\n let s = 0;\n for (let i = min; i < max; i += 1) {\n s += getv(i);\n }\n return s;\n}\n\nfunction rangeEach(min, max, cb) {\n for (let i = min; i < max; i += 1) {\n cb(i);\n }\n}\n\nfunction arrayEquals(a1, a2) {\n if (a1.length === a2.length) {\n for (let i = 0; i < a1.length; i += 1) {\n if (a1[i] !== a2[i]) return false;\n }\n } else return false;\n return true;\n}\n\nfunction digits(a) {\n const v = `${a}`;\n let ret = 0;\n let flag = false;\n for (let i = 0; i < v.length; i += 1) {\n if (flag === true) ret += 1;\n if (v.charAt(i) === '.') flag = true;\n }\n return ret;\n}\n\nexport function numberCalc(type, a1, a2) {\n if (Number.isNaN(a1) || Number.isNaN(a2)) {\n return a1 + type + a2;\n }\n const al1 = digits(a1);\n const al2 = digits(a2);\n const num1 = Number(a1);\n const num2 = Number(a2);\n let ret = 0;\n if (type === '-') {\n ret = num1 - num2;\n } else if (type === '+') {\n ret = num1 + num2;\n } else if (type === '*') {\n ret = num1 * num2;\n } else if (type === '/') {\n ret = num1 / num2;\n if (digits(ret) > 5) return ret.toFixed(2);\n return ret;\n }\n return ret.toFixed(Math.max(al1, al2));\n}\n\nexport default {\n cloneDeep,\n merge: (...sources) => mergeDeep({}, ...sources),\n equals,\n arrayEquals,\n sum,\n rangeEach,\n rangeSum,\n rangeReduceIf,\n deleteProperty,\n numberCalc,\n};\n","import helper from './helper';\nimport { expr2expr } from './alphabet';\n\nclass Rows {\n constructor({ len, height }) {\n this._ = {};\n this.len = len;\n // default row height\n this.height = height;\n }\n\n getHeight(ri) {\n if (this.isHide(ri)) return 0;\n const row = this.get(ri);\n if (row && row.height) {\n return row.height;\n }\n return this.height;\n }\n\n setHeight(ri, v) {\n const row = this.getOrNew(ri);\n row.height = v;\n }\n\n unhide(idx) {\n let index = idx;\n while (index > 0) {\n index -= 1;\n if (this.isHide(index)) {\n this.setHide(index, false);\n } else break;\n }\n }\n\n isHide(ri) {\n const row = this.get(ri);\n return row && row.hide;\n }\n\n setHide(ri, v) {\n const row = this.getOrNew(ri);\n if (v === true) row.hide = true;\n else delete row.hide;\n }\n\n setStyle(ri, style) {\n const row = this.getOrNew(ri);\n row.style = style;\n }\n\n sumHeight(min, max, exceptSet) {\n return helper.rangeSum(min, max, (i) => {\n if (exceptSet && exceptSet.has(i)) return 0;\n return this.getHeight(i);\n });\n }\n\n totalHeight() {\n return this.sumHeight(0, this.len);\n }\n\n get(ri) {\n return this._[ri];\n }\n\n getOrNew(ri) {\n this._[ri] = this._[ri] || { cells: {} };\n return this._[ri];\n }\n\n getCell(ri, ci) {\n const row = this.get(ri);\n if (row !== undefined && row.cells !== undefined && row.cells[ci] !== undefined) {\n return row.cells[ci];\n }\n return null;\n }\n\n getCellMerge(ri, ci) {\n const cell = this.getCell(ri, ci);\n if (cell && cell.merge) return cell.merge;\n return [0, 0];\n }\n\n getCellOrNew(ri, ci) {\n const row = this.getOrNew(ri);\n row.cells[ci] = row.cells[ci] || {};\n return row.cells[ci];\n }\n\n // what: all | text | format\n setCell(ri, ci, cell, what = 'all') {\n const row = this.getOrNew(ri);\n if (what === 'all') {\n row.cells[ci] = cell;\n } else if (what === 'text') {\n row.cells[ci] = row.cells[ci] || {};\n row.cells[ci].text = cell.text;\n } else if (what === 'format') {\n row.cells[ci] = row.cells[ci] || {};\n row.cells[ci].style = cell.style;\n if (cell.merge) row.cells[ci].merge = cell.merge;\n }\n }\n\n setCellText(ri, ci, text) {\n const cell = this.getCellOrNew(ri, ci);\n if (cell.editable !== false) cell.text = text;\n }\n\n // what: all | format | text\n copyPaste(srcCellRange, dstCellRange, what, autofill = false, cb = () => {}) {\n const {\n sri, sci, eri, eci,\n } = srcCellRange;\n const dsri = dstCellRange.sri;\n const dsci = dstCellRange.sci;\n const deri = dstCellRange.eri;\n const deci = dstCellRange.eci;\n const [rn, cn] = srcCellRange.size();\n const [drn, dcn] = dstCellRange.size();\n // console.log(srcIndexes, dstIndexes);\n let isAdd = true;\n let dn = 0;\n if (deri < sri || deci < sci) {\n isAdd = false;\n if (deri < sri) dn = drn;\n else dn = dcn;\n }\n for (let i = sri; i <= eri; i += 1) {\n if (this._[i]) {\n for (let j = sci; j <= eci; j += 1) {\n if (this._[i].cells && this._[i].cells[j]) {\n for (let ii = dsri; ii <= deri; ii += rn) {\n for (let jj = dsci; jj <= deci; jj += cn) {\n const nri = ii + (i - sri);\n const nci = jj + (j - sci);\n const ncell = helper.cloneDeep(this._[i].cells[j]);\n // ncell.text\n if (autofill && ncell && ncell.text && ncell.text.length > 0) {\n const { text } = ncell;\n let n = (jj - dsci) + (ii - dsri) + 2;\n if (!isAdd) {\n n -= dn + 1;\n }\n if (text[0] === '=') {\n ncell.text = text.replace(/[a-zA-Z]{1,3}\\d+/g, (word) => {\n let [xn, yn] = [0, 0];\n if (sri === dsri) {\n xn = n - 1;\n // if (isAdd) xn -= 1;\n } else {\n yn = n - 1;\n }\n if (/^\\d+$/.test(word)) return word;\n return expr2expr(word, xn, yn);\n });\n } else if ((rn <= 1 && cn > 1 && (dsri > eri || deri < sri))\n || (cn <= 1 && rn > 1 && (dsci > eci || deci < sci))\n || (rn <= 1 && cn <= 1)) {\n const result = /[\\\\.\\d]+$/.exec(text);\n // console.log('result:', result);\n if (result !== null) {\n const index = Number(result[0]) + n - 1;\n ncell.text = text.substring(0, result.index) + index;\n }\n }\n }\n this.setCell(nri, nci, ncell, what);\n cb(nri, nci, ncell);\n }\n }\n }\n }\n }\n }\n }\n\n cutPaste(srcCellRange, dstCellRange) {\n const ncellmm = {};\n this.each((ri) => {\n this.eachCells(ri, (ci) => {\n let nri = parseInt(ri, 10);\n let nci = parseInt(ci, 10);\n if (srcCellRange.includes(ri, ci)) {\n nri = dstCellRange.sri + (nri - srcCellRange.sri);\n nci = dstCellRange.sci + (nci - srcCellRange.sci);\n }\n ncellmm[nri] = ncellmm[nri] || { cells: {} };\n ncellmm[nri].cells[nci] = this._[ri].cells[ci];\n });\n });\n this._ = ncellmm;\n }\n\n // src: Array<Array<String>>\n paste(src, dstCellRange) {\n if (src.length <= 0) return;\n const { sri, sci } = dstCellRange;\n src.forEach((row, i) => {\n const ri = sri + i;\n row.forEach((cell, j) => {\n const ci = sci + j;\n this.setCellText(ri, ci, cell);\n });\n });\n }\n\n insert(sri, n = 1) {\n const ndata = {};\n this.each((ri, row) => {\n let nri = parseInt(ri, 10);\n if (nri >= sri) {\n nri += n;\n this.eachCells(ri, (ci, cell) => {\n if (cell.text && cell.text[0] === '=') {\n cell.text = cell.text.replace(/[a-zA-Z]{1,3}\\d+/g, word => expr2expr(word, 0, n, (x, y) => y >= sri));\n }\n });\n }\n ndata[nri] = row;\n });\n this._ = ndata;\n this.len += n;\n }\n\n delete(sri, eri) {\n const n = eri - sri + 1;\n const ndata = {};\n this.each((ri, row) => {\n const nri = parseInt(ri, 10);\n if (nri < sri) {\n ndata[nri] = row;\n } else if (ri > eri) {\n ndata[nri - n] = row;\n this.eachCells(ri, (ci, cell) => {\n if (cell.text && cell.text[0] === '=') {\n cell.text = cell.text.replace(/[a-zA-Z]{1,3}\\d+/g, word => expr2expr(word, 0, -n, (x, y) => y > eri));\n }\n });\n }\n });\n this._ = ndata;\n this.len -= n;\n }\n\n insertColumn(sci, n = 1) {\n this.each((ri, row) => {\n const rndata = {};\n this.eachCells(ri, (ci, cell) => {\n let nci = parseInt(ci, 10);\n if (nci >= sci) {\n nci += n;\n if (cell.text && cell.text[0] === '=') {\n cell.text = cell.text.replace(/[a-zA-Z]{1,3}\\d+/g, word => expr2expr(word, n, 0, x => x >= sci));\n }\n }\n rndata[nci] = cell;\n });\n row.cells = rndata;\n });\n }\n\n deleteColumn(sci, eci) {\n const n = eci - sci + 1;\n this.each((ri, row) => {\n const rndata = {};\n this.eachCells(ri, (ci, cell) => {\n const nci = parseInt(ci, 10);\n if (nci < sci) {\n rndata[nci] = cell;\n } else if (nci > eci) {\n rndata[nci - n] = cell;\n if (cell.text && cell.text[0] === '=') {\n cell.text = cell.text.replace(/[a-zA-Z]{1,3}\\d+/g, word => expr2expr(word, -n, 0, x => x > eci));\n }\n }\n });\n row.cells = rndata;\n });\n }\n\n // what: all | text | format | merge\n deleteCells(cellRange, what = 'all') {\n cellRange.each((i, j) => {\n this.deleteCell(i, j, what);\n });\n }\n\n // what: all | text | format | merge\n deleteCell(ri, ci, what = 'all') {\n const row = this.get(ri);\n if (row !== null) {\n const cell = this.getCell(ri, ci);\n if (cell !== null && cell.editable !== false) {\n if (what === 'all') {\n delete row.cells[ci];\n } else if (what === 'text') {\n if (cell.text) delete cell.text;\n if (cell.value) delete cell.value;\n } else if (what === 'format') {\n if (cell.style !== undefined) delete cell.style;\n if (cell.merge) delete cell.merge;\n } else if (what === 'merge') {\n if (cell.merge) delete cell.merge;\n }\n }\n }\n }\n\n maxCell() {\n const keys = Object.keys(this._);\n const ri = keys[keys.length - 1];\n const col = this._[ri];\n if (col) {\n const { cells } = col;\n const ks = Object.keys(cells);\n const ci = ks[ks.length - 1];\n return [parseInt(ri, 10), parseInt(ci, 10)];\n }\n return [0, 0];\n }\n\n each(cb) {\n Object.entries(this._).forEach(([ri, row]) => {\n cb(ri, row);\n });\n }\n\n eachCells(ri, cb) {\n if (this._[ri] && this._[ri].cells) {\n Object.entries(this._[ri].cells).forEach(([ci, cell]) => {\n cb(ci, cell);\n });\n }\n }\n\n setData(d) {\n if (d.len) {\n this.len = d.len;\n delete d.len;\n }\n this._ = d;\n }\n\n getData() {\n const { len } = this;\n return Object.assign({ len }, this._);\n }\n}\n\nexport default {};\nexport {\n Rows,\n};\n","import helper from './helper';\n\nclass Cols {\n constructor({\n len, width, indexWidth, minWidth,\n }) {\n this._ = {};\n this.len = len;\n this.width = width;\n this.indexWidth = indexWidth;\n this.minWidth = minWidth;\n }\n\n setData(d) {\n if (d.len) {\n this.len = d.len;\n delete d.len;\n }\n this._ = d;\n }\n\n getData() {\n const { len } = this;\n return Object.assign({ len }, this._);\n }\n\n getWidth(i) {\n if (this.isHide(i)) return 0;\n const col = this._[i];\n if (col && col.width) {\n return col.width;\n }\n return this.width;\n }\n\n getOrNew(ci) {\n this._[ci] = this._[ci] || {};\n return this._[ci];\n }\n\n setWidth(ci, width) {\n const col = this.getOrNew(ci);\n col.width = width;\n }\n\n unhide(idx) {\n let index = idx;\n while (index > 0) {\n index -= 1;\n if (this.isHide(index)) {\n this.setHide(index, false);\n } else break;\n }\n }\n\n isHide(ci) {\n const col = this._[ci];\n return col && col.hide;\n }\n\n setHide(ci, v) {\n const col = this.getOrNew(ci);\n if (v === true) col.hide = true;\n else delete col.hide;\n }\n\n setStyle(ci, style) {\n const col = this.getOrNew(ci);\n col.style = style;\n }\n\n sumWidth(min, max) {\n return helper.rangeSum(min, max, i => this.getWidth(i));\n }\n\n totalWidth() {\n return this.sumWidth(0, this.len);\n }\n}\n\nexport default {};\nexport {\n Cols,\n};\n","export default {\n toolbar: {\n undo: 'Undo',\n redo: 'Redo',\n print: 'Print',\n paintformat: 'Paint format',\n clearformat: 'Clear format',\n format: 'Format',\n fontName: 'Font',\n fontSize: 'Font size',\n fontBold: 'Font bold',\n fontItalic: 'Font italic',\n underline: 'Underline',\n strike: 'Strike',\n color: 'Text color',\n bgcolor: 'Fill color',\n border: 'Borders',\n merge: 'Merge cells',\n align: 'Horizontal align',\n valign: 'Vertical align',\n textwrap: 'Text wrapping',\n freeze: 'Freeze cell',\n autofilter: 'Filter',\n formula: 'Functions',\n more: 'More',\n },\n contextmenu: {\n copy: 'Copy',\n cut: 'Cut',\n paste: 'Paste',\n pasteValue: 'Paste values only',\n pasteFormat: 'Paste format only',\n hide: 'Hide',\n insertRow: 'Insert row',\n insertColumn: 'Insert column',\n deleteSheet: 'Delete',\n deleteRow: 'Delete row',\n deleteColumn: 'Delete column',\n deleteCell: 'Delete cell',\n deleteCellText: 'Delete cell text',\n validation: 'Data validations',\n cellprintable: 'Enable export',\n cellnonprintable: 'Disable export',\n celleditable: 'Enable editing',\n cellnoneditable: 'Disable editing',\n },\n print: {\n size: 'Paper size',\n orientation: 'Page orientation',\n orientations: ['Landscape', 'Portrait'],\n },\n format: {\n normal: 'Normal',\n text: 'Plain Text',\n number: 'Number',\n percent: 'Percent',\n rmb: 'RMB',\n usd: 'USD',\n eur: 'EUR',\n date: 'Date',\n time: 'Time',\n datetime: 'Date time',\n duration: 'Duration',\n },\n formula: {\n sum: 'Sum',\n average: 'Average',\n max: 'Max',\n min: 'Min',\n _if: 'IF',\n and: 'AND',\n or: 'OR',\n concat: 'Concat',\n },\n validation: {\n required: 'it must be required',\n notMatch: 'it not match its validation rule',\n between: 'it is between {} and {}',\n notBetween: 'it is not between {} and {}',\n notIn: 'it is not in list',\n equal: 'it equal to {}',\n notEqual: 'it not equal to {}',\n lessThan: 'it less than {}',\n lessThanEqual: 'it less than or equal to {}',\n greaterThan: 'it greater than {}',\n greaterThanEqual: 'it greater than or equal to {}',\n },\n error: {\n pasteForMergedCell: 'Unable to do this for merged cells',\n },\n calendar: {\n weeks: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n },\n button: {\n next: 'Next',\n cancel: 'Cancel',\n remove: 'Remove',\n save: 'Save',\n ok: 'OK',\n },\n sort: {\n desc: 'Sort Z -> A',\n asc: 'Sort A -> Z',\n },\n filter: {\n empty: 'empty',\n },\n dataValidation: {\n mode: 'Mode',\n range: 'Cell Range',\n criteria: 'Criteria',\n modeType: {\n cell: 'Cell',\n column: 'Colun',\n row: 'Row',\n },\n type: {\n list: 'List',\n number: 'Number',\n date: 'Date',\n phone: 'Phone',\n email: 'Email',\n },\n operator: {\n be: 'between',\n nbe: 'not betwwen',\n lt: 'less than',\n lte: 'less than or equal to',\n gt: 'greater than',\n gte: 'greater than or equal to',\n eq: 'equal to',\n neq: 'not equal to',\n },\n },\n};\n","/* global window */\nimport en from './en';\n\n// Defines the fallback language as English\nlet $languages = ['en'];\nconst $messages = {\n en,\n};\n\nfunction translate(key, messages) {\n if (messages) {\n // Return the translation from the first language in the languages array\n // that has a value for the provided key.\n for (const lang of $languages) {\n if (!messages[lang]) break;\n\n let message = messages[lang];\n\n // Splits the key at '.' except where escaped as '\\.'\n const keys = key.match(/(?:\\\\.|[^.])+/g);\n\n for (let i = 0; i < keys.length; i += 1) {\n const property = keys[i];\n const value = message[property];\n\n // If value doesn't exist, try next language\n if (!value) break;\n\n if (i === keys.length - 1) return value;\n\n // Move down to the next level of the messages object\n message = value;\n }\n }\n }\n\n return undefined;\n}\n\nfunction t(key) {\n let v = translate(key, $messages);\n if (!v && window && window.x_spreadsheet && window.x_spreadsheet.$messages) {\n v = translate(key, window.x_spreadsheet.$messages);\n }\n return v || '';\n}\n\nfunction tf(key) {\n return () => t(key);\n}\n\n// If clearLangList is set to false, lang will be added to the front of the\n// languages array. The languages in the language array are searched in order\n// to find a translation. This allows the use of other languages as a fallback\n// if lang is missing some keys. The language array is preloaded with English.\n// To set the languages array to only include lang, set clearLangList to true.\nfunction locale(lang, message, clearLangList = false) {\n if (clearLangList) {\n $languages = [lang];\n } else {\n // Append to front of array.\n // Translation method will use the first language in the list that has a\n // matching key.\n $languages.unshift(lang);\n }\n\n if (message) {\n $messages[lang] = message;\n }\n}\n\nexport default {\n t,\n};\n\nexport {\n locale,\n t,\n tf,\n};\n","import { t } from '../locale/locale';\nimport helper from './helper';\n\nconst rules = {\n phone: /^[1-9]\\d{10}$/,\n email: /w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/,\n};\n\nfunction returnMessage(flag, key, ...arg) {\n let message = '';\n if (!flag) {\n message = t(`validation.${key}`, ...arg);\n }\n return [flag, message];\n}\n\nexport default class Validator {\n // operator: b|nb|eq|neq|lt|lte|gt|gte\n // type: date|number|list|phone|email\n constructor(type, required, value, operator) {\n this.required = required;\n this.value = value;\n this.type = type;\n this.operator = operator;\n this.message = '';\n }\n\n parseValue(v) {\n const { type } = this;\n if (type === 'date') {\n return new Date(v);\n }\n if (type === 'number') {\n return Number(v);\n }\n return v;\n }\n\n equals(other) {\n let flag = this.type === other.type\n && this.required === other.required\n && this.operator === other.operator;\n if (flag) {\n if (Array.isArray(this.value)) {\n flag = helper.arrayEquals(this.value, other.value);\n } else {\n flag = this.value === other.value;\n }\n }\n return flag;\n }\n\n values() {\n return this.value.split(',');\n }\n\n validate(v) {\n const {\n required, operator, value, type,\n } = this;\n if (required && /^\\s*$/.test(v)) {\n return returnMessage(false, 'required');\n }\n if (/^\\s*$/.test(v)) return [true];\n if (rules[type] && !rules[type].test(v)) {\n return returnMessage(false, 'notMatch');\n }\n if (type === 'list') {\n return returnMessage(this.values().includes(v), 'notIn');\n }\n if (operator) {\n const v1 = this.parseValue(v);\n if (operator === 'be') {\n const [min, max] = value;\n return returnMessage(\n v1 >= this.parseValue(min) && v1 <= this.parseValue(max),\n 'between',\n min,\n max,\n );\n }\n if (operator === 'nbe') {\n const [min, max] = value;\n return returnMessage(\n v1 < this.parseValue(min) || v1 > this.parseValue(max),\n 'notBetween',\n min,\n max,\n );\n }\n if (operator === 'eq') {\n return returnMessage(\n v1 === this.parseValue(value),\n 'equal',\n value,\n );\n }\n if (operator === 'neq') {\n return returnMessage(\n v1 !== this.parseValue(value),\n 'notEqual',\n value,\n );\n }\n if (operator === 'lt') {\n return returnMessage(\n v1 < this.parseValue(value),\n 'lessThan',\n value,\n );\n }\n if (operator === 'lte') {\n return returnMessage(\n v1 <= this.parseValue(value),\n 'lessThanEqual',\n value,\n );\n }\n if (operator === 'gt') {\n return returnMessage(\n v1 > this.parseValue(value),\n 'greaterThan',\n value,\n );\n }\n if (operator === 'gte') {\n return returnMessage(\n v1 >= this.parseValue(value),\n 'greaterThanEqual',\n value,\n );\n }\n }\n return [true];\n }\n}\n","import Validator from './validator';\nimport { CellRange } from './cell_range';\n\nclass Validation {\n constructor(mode, refs, validator) {\n this.refs = refs;\n this.mode = mode; // cell\n this.validator = validator;\n }\n\n includes(ri, ci) {\n const { refs } = this;\n for (let i = 0; i < refs.length; i += 1) {\n const cr = CellRange.valueOf(refs[i]);\n if (cr.includes(ri, ci)) return true;\n }\n return false;\n }\n\n addRef(ref) {\n this.remove(CellRange.valueOf(ref));\n this.refs.push(ref);\n }\n\n remove(cellRange) {\n const nrefs = [];\n this.refs.forEach((it) => {\n const cr = CellRange.valueOf(it);\n if (cr.intersects(cellRange)) {\n const crs = cr.difference(cellRange);\n crs.forEach(it1 => nrefs.push(it1.toString()));\n } else {\n nrefs.push(it);\n }\n });\n this.refs = nrefs;\n }\n\n getData() {\n const { refs, mode, validator } = this;\n const {\n type, required, operator, value,\n } = validator;\n return {\n refs, mode, type, required, operator, value,\n };\n }\n\n static valueOf({\n refs, mode, type, required, operator, value,\n }) {\n return new Validation(mode, refs, new Validator(type, required, value, operator));\n }\n}\nclass Validations {\n constructor() {\n this._ = [];\n // ri_ci: errMessage\n this.errors = new Map();\n }\n\n getError(ri, ci) {\n return this.errors.get(`${ri}_${ci}`);\n }\n\n validate(ri, ci, text) {\n const v = this.get(ri, ci);\n const key = `${ri}_${ci}`;\n const { errors } = this;\n if (v !== null) {\n const [flag, message] = v.validator.validate(text);\n if (!flag) {\n errors.set(key, message);\n } else {\n errors.delete(key);\n }\n } else {\n errors.delete(key);\n }\n return true;\n }\n\n // type: date|number|phone|email|list\n // validator: { required, value, operator }\n add(mode, ref, {\n type, required, value, operator,\n }) {\n const validator = new Validator(\n type, required, value, operator,\n );\n const v = this.getByValidator(validator);\n if (v !== null) {\n v.addRef(ref);\n } else {\n this._.push(new Validation(mode, [ref], validator));\n }\n }\n\n getByValidator(validator) {\n for (let i = 0; i < this._.length; i += 1) {\n const v = this._[i];\n if (v.validator.equals(validator)) {\n return v;\n }\n }\n return null;\n }\n\n get(ri, ci) {\n for (let i = 0; i < this._.length; i += 1) {\n const v = this._[i];\n if (v.includes(ri, ci)) return v;\n }\n return null;\n }\n\n remove(cellRange) {\n this.each((it) => {\n it.remove(cellRange);\n });\n }\n\n each(cb) {\n this._.forEach(it => cb(it));\n }\n\n getData() {\n return this._.filter(it => it.refs.length > 0).map(it => it.getData());\n }\n\n setData(d) {\n this._ = d.map(it => Validation.valueOf(it));\n }\n}\n\nexport default {};\nexport {\n Validations,\n};\n","/* global document */\n\nimport Selector from './selector';\nimport Scroll from './scroll';\nimport History from './history';\nimport Clipboard from './clipboard';\nimport AutoFilter from './auto_filter';\nimport { Merges } from './merge';\nimport helper from './helper';\nimport { Rows } from './row';\nimport { Cols } from './col';\nimport { Validations } from './validation';\nimport { CellRange } from './cell_range';\nimport { expr2xy, xy2expr } from './alphabet';\nimport { t } from '../locale/locale';\n\n// private methods\n/*\n * {\n * name: ''\n * freeze: [0, 0],\n * formats: [],\n * styles: [\n * {\n * bgcolor: '',\n * align: '',\n * valign: '',\n * textwrap: false,\n * strike: false,\n * underline: false,\n * color: '',\n * format: 1,\n * border: {\n * left: [style, color],\n * right: [style, color],\n * top: [style, color],\n * bottom: [style, color],\n * },\n * font: {\n * name: 'Helvetica',\n * size: 10,\n * bold: false,\n * italic: false,\n * }\n * }\n * ],\n * merges: [\n * 'A1:F11',\n * ...\n * ],\n * rows: {\n * 1: {\n * height: 50,\n * style: 1,\n * cells: {\n * 1: {\n * style: 2,\n * type: 'string',\n * text: '',\n * value: '', // cal result\n * }\n * }\n * },\n * ...\n * },\n * cols: {\n * 2: { width: 100, style: 1 }\n * }\n * }\n */\nconst defaultSettings = {\n mode: 'edit', // edit | read\n view: {\n height: () => document.documentElement.clientHeight,\n width: () => document.documentElement.clientWidth,\n },\n showGrid: true,\n showToolbar: true,\n showContextmenu: true,\n showBottomBar: true,\n row: {\n len: 100,\n height: 25,\n },\n col: {\n len: 26,\n width: 100,\n indexWidth: 60,\n minWidth: 60,\n },\n style: {\n bgcolor: '#ffffff',\n align: 'left',\n valign: 'middle',\n textwrap: false,\n strike: false,\n underline: false,\n color: '#0a0a0a',\n font: {\n name: 'Arial',\n size: 10,\n bold: false,\n italic: false,\n },\n format: 'normal',\n },\n};\n\nconst toolbarHeight = 41;\nconst bottombarHeight = 41;\n\n\n// Utility functions\nconst hasOwnProperty = (obj, name) => Object.prototype.hasOwnProperty.call(obj, name);\n\n\n// src: cellRange\n// dst: cellRange\nfunction canPaste(src, dst, error = () => {}) {\n const { merges } = this;\n const cellRange = dst.clone();\n const [srn, scn] = src.size();\n const [drn, dcn] = dst.size();\n if (srn > drn) {\n cellRange.eri = dst.sri + srn - 1;\n }\n if (scn > dcn) {\n cellRange.eci = dst.sci + scn - 1;\n }\n if (merges.intersects(cellRange)) {\n error(t('error.pasteForMergedCell'));\n return false;\n }\n return true;\n}\nfunction copyPaste(srcCellRange, dstCellRange, what, autofill = false) {\n const { rows, merges } = this;\n // delete dest merge\n if (what === 'all' || what === 'format') {\n rows.deleteCells(dstCellRange, what);\n merges.deleteWithin(dstCellRange);\n }\n rows.copyPaste(srcCellRange, dstCellRange, what, autofill, (ri, ci, cell) => {\n if (cell && cell.merge) {\n // console.log('cell:', ri, ci, cell);\n const [rn, cn] = cell.merge;\n if (rn <= 0 && cn <= 0) return;\n merges.add(new CellRange(ri, ci, ri + rn, ci + cn));\n }\n });\n}\n\nfunction cutPaste(srcCellRange, dstCellRange) {\n const { clipboard, rows, merges } = this;\n rows.cutPaste(srcCellRange, dstCellRange);\n merges.move(srcCellRange,\n dstCellRange.sri - srcCellRange.sri,\n dstCellRange.sci - srcCellRange.sci);\n clipboard.clear();\n}\n\n// bss: { top, bottom, left, right }\nfunction setStyleBorder(ri, ci, bss) {\n const { styles, rows } = this;\n const cell = rows.getCellOrNew(ri, ci);\n let cstyle = {};\n if (cell.style !== undefined) {\n cstyle = helper.cloneDeep(styles[cell.style]);\n }\n cstyle = helper.merge(cstyle, { border: bss });\n cell.style = this.addStyle(cstyle);\n}\n\nfunction setStyleBorders({ mode, style, color }) {\n const { styles, selector, rows } = this;\n const {\n sri, sci, eri, eci,\n } = selector.range;\n const multiple = !this.isSignleSelected();\n if (!multiple) {\n if (mode === 'inside' || mode === 'horizontal' || mode === 'vertical') {\n return;\n }\n }\n if (mode === 'outside' && !multiple) {\n setStyleBorder.call(this, sri, sci, {\n top: [style, color], bottom: [style, color], left: [style, color], right: [style, color],\n });\n } else if (mode === 'none') {\n selector.range.each((ri, ci) => {\n const cell = rows.getCell(ri, ci);\n if (cell && cell.style !== undefined) {\n const ns = helper.cloneDeep(styles[cell.style]);\n delete ns.border;\n // ['bottom', 'top', 'left', 'right'].forEach((prop) => {\n // if (ns[prop]) delete ns[prop];\n // });\n cell.style = this.addStyle(ns);\n }\n });\n } else if (mode === 'all' || mode === 'inside' || mode === 'outside'\n || mode === 'horizontal' || mode === 'vertical') {\n const merges = [];\n for (let ri = sri; ri <= eri; ri += 1) {\n for (let ci = sci; ci <= eci; ci += 1) {\n // jump merges -- start\n const mergeIndexes = [];\n for (let ii = 0; ii < merges.length; ii += 1) {\n const [mri, mci, rn, cn] = merges[ii];\n if (ri === mri + rn + 1) mergeIndexes.push(ii);\n if (mri <= ri && ri <= mri + rn) {\n if (ci === mci) {\n ci += cn + 1;\n break;\n }\n }\n }\n mergeIndexes.forEach(it => merges.splice(it, 1));\n if (ci > eci) break;\n // jump merges -- end\n const cell = rows.getCell(ri, ci);\n let [rn, cn] = [0, 0];\n if (cell && cell.merge) {\n [rn, cn] = cell.merge;\n merges.push([ri, ci, rn, cn]);\n }\n const mrl = rn > 0 && ri + rn === eri;\n const mcl = cn > 0 && ci + cn === eci;\n let bss = {};\n if (mode === 'all') {\n bss = {\n bottom: [style, color],\n top: [style, color],\n left: [style, color],\n right: [style, color],\n };\n } else if (mode === 'inside') {\n if (!mcl && ci < eci) bss.right = [style, color];\n if (!mrl && ri < eri) bss.bottom = [style, color];\n } else if (mode === 'horizontal') {\n if (!mrl && ri < eri) bss.bottom = [style, color];\n } else if (mode === 'vertical') {\n if (!mcl && ci < eci) bss.right = [style, color];\n } else if (mode === 'outside' && multiple) {\n if (sri === ri) bss.top = [style, color];\n if (mrl || eri === ri) bss.bottom = [style, color];\n if (sci === ci) bss.left = [style, color];\n if (mcl || eci === ci) bss.right = [style, color];\n }\n if (Object.keys(bss).length > 0) {\n setStyleBorder.call(this, ri, ci, bss);\n }\n ci += cn;\n }\n }\n } else if (mode === 'top' || mode === 'bottom') {\n for (let ci = sci; ci <= eci; ci += 1) {\n if (mode === 'top') {\n setStyleBorder.call(this, sri, ci, { top: [style, color] });\n ci += rows.getCellMerge(sri, ci)[1];\n }\n if (mode === 'bottom') {\n setStyleBorder.call(this, eri, ci, { bottom: [style, color] });\n ci += rows.getCellMerge(eri, ci)[1];\n }\n }\n } else if (mode === 'left' || mode === 'right') {\n for (let ri = sri; ri <= eri; ri += 1) {\n if (mode === 'left') {\n setStyleBorder.call(this, ri, sci, { left: [style, color] });\n ri += rows.getCellMerge(ri, sci)[0];\n }\n if (mode === 'right') {\n setStyleBorder.call(this, ri, eci, { right: [style, color] });\n ri += rows.getCellMerge(ri, eci)[0];\n }\n }\n }\n}\n\nfunction getCellRowByY(y, scrollOffsety) {\n const { rows } = this;\n const fsh = this.freezeTotalHeight();\n // console.log('y:', y, ', fsh:', fsh);\n let inits = rows.height;\n if (fsh + rows.height < y) inits -= scrollOffsety;\n\n // handle ri in autofilter\n const frset = this.exceptRowSet;\n\n let ri = 0;\n let top = inits;\n let { height } = rows;\n for (; ri < rows.len; ri += 1) {\n if (top > y) break;\n if (!frset.has(ri)) {\n height = rows.getHeight(ri);\n top += height;\n }\n }\n top -= height;\n // console.log('ri:', ri, ', top:', top, ', height:', height);\n\n if (top <= 0) {\n return { ri: -1, top: 0, height };\n }\n\n return { ri: ri - 1, top, height };\n}\n\nfunction getCellColByX(x, scrollOffsetx) {\n const { cols } = this;\n const fsw = this.freezeTotalWidth();\n let inits = cols.indexWidth;\n if (fsw + cols.indexWidth < x) inits -= scrollOffsetx;\n const [ci, left, width] = helper.rangeReduceIf(\n 0,\n cols.len,\n inits,\n cols.indexWidth,\n x,\n i => cols.getWidth(i),\n );\n if (left <= 0) {\n return { ci: -1, left: 0, width: cols.indexWidth };\n }\n return { ci: ci - 1, left, width };\n}\n\nexport default class DataProxy {\n constructor(name, settings) {\n this.settings = helper.merge(defaultSettings, settings || {});\n // save data begin\n this.name = name || 'sheet';\n this.freeze = [0, 0];\n this.styles = []; // Array<Style>\n this.merges = new Merges(); // [CellRange, ...]\n this.rows = new Rows(this.settings.row);\n this.cols = new Cols(this.settings.col);\n this.validations = new Validations();\n this.hyperlinks = {};\n this.comments = {};\n // save data end\n\n // don't save object\n this.selector = new Selector();\n this.scroll = new Scroll();\n this.history = new History();\n this.clipboard = new Clipboard();\n this.autoFilter = new AutoFilter();\n this.change = () => {};\n this.exceptRowSet = new Set();\n this.sortedRowMap = new Map();\n this.unsortedRowMap = new Map();\n }\n\n addValidation(mode, ref, validator) {\n // console.log('mode:', mode, ', ref:', ref, ', validator:', validator);\n this.changeData(() => {\n this.validations.add(mode, ref, validator);\n });\n }\n\n removeValidation() {\n const { range } = this.selector;\n this.changeData(() => {\n this.validations.remove(range);\n });\n }\n\n getSelectedValidator() {\n const { ri, ci } = this.selector;\n const v = this.validations.get(ri, ci);\n return v ? v.validator : null;\n }\n\n getSelectedValidation() {\n const { ri, ci, range } = this.selector;\n const v = this.validations.get(ri, ci);\n const ret = { ref: range.toString() };\n if (v !== null) {\n ret.mode = v.mode;\n ret.validator = v.validator;\n }\n return ret;\n }\n\n canUndo() {\n return this.history.canUndo();\n }\n\n canRedo() {\n return this.history.canRedo();\n }\n\n undo() {\n this.history.undo(this.getData(), (d) => {\n this.setData(d);\n });\n }\n\n redo() {\n this.history.redo(this.getData(), (d) => {\n this.setData(d);\n });\n }\n\n copy() {\n this.clipboard.copy(this.selector.range);\n }\n\n copyToSystemClipboard() {\n /* global navigator */\n if (navigator.clipboard === undefined) {\n return;\n }\n let copyText = '';\n const rowData = this.rows.getData();\n for (let ri = this.selector.range.sri; ri <= this.selector.range.eri; ri += 1) {\n if (hasOwnProperty(rowData, ri)) {\n for (let ci = this.selector.range.sci; ci <= this.selector.range.eci; ci += 1) {\n if (ci > this.selector.range.sci) {\n copyText += '\\t';\n }\n if (hasOwnProperty(rowData[ri].cells, ci)) {\n const cellText = String(rowData[ri].cells[ci].text);\n if ((cellText.indexOf(`\\n`) === -1) && (cellText.indexOf(`\\t`) === -1) && (cellText.indexOf(`\"`) === -1)) {\n copyText += cellText;\n } else {\n copyText += `\"${cellText}\"`;\n }\n }\n }\n } else {\n for (let ci = this.selector.range.sci; ci <= this.selector.range.eci; ci += 1) {\n copyText += '\\t';\n }\n }\n copyText += '\\n';\n }\n navigator.clipboard.writeText(copyText).then(() => {}, (err) => {\n console.log('text copy to the system clipboard error ', copyText, err);\n });\n }\n\n cut() {\n this.clipboard.cut(this.selector.range);\n }\n\n // what: all | text | format\n paste(what = 'all', error = () => {}) {\n // console.log('sIndexes:', sIndexes);\n const { clipboard, selector } = this;\n if (clipboard.isClear()) return false;\n if (!canPaste.call(this, clipboard.range, selector.range, error)) return false;\n\n this.changeData(() => {\n if (clipboard.isCopy()) {\n copyPaste.call(this, clipboard.range, selector.range, what);\n } else if (clipboard.isCut()) {\n cutPaste.call(this, clipboard.range, selector.range);\n }\n });\n return true;\n }\n\n pasteFromText(txt) {\n const lines = txt.split('\\r\\n').map(it => it.replace(/\"/g, '').split('\\t'));\n if (lines.length > 0) lines.length -= 1;\n const { rows, selector } = this;\n this.changeData(() => {\n rows.paste(lines, selector.range);\n });\n }\n\n autofill(cellRange, what, error = () => {}) {\n const srcRange = this.selector.range;\n if (!canPaste.call(this, srcRange, cellRange, error)) return false;\n this.changeData(() => {\n copyPaste.call(this, srcRange, cellRange, what, true);\n });\n return true;\n }\n\n clearClipboard() {\n this.clipboard.clear();\n }\n\n calSelectedRangeByEnd(ri, ci) {\n const {\n selector, rows, cols, merges,\n } = this;\n let {\n sri, sci, eri, eci,\n } = selector.range;\n const cri = selector.ri;\n const cci = selector.ci;\n let [nri, nci] = [ri, ci];\n if (ri < 0) nri = rows.len - 1;\n if (ci < 0) nci = cols.len - 1;\n if (nri > cri) [sri, eri] = [cri, nri];\n else [sri, eri] = [nri, cri];\n if (nci > cci) [sci, eci] = [cci, nci];\n else [sci, eci] = [nci, cci];\n selector.range = merges.union(new CellRange(\n sri, sci, eri, eci,\n ));\n selector.range = merges.union(selector.range);\n // console.log('selector.range:', selector.range);\n return selector.range;\n }\n\n calSelectedRangeByStart(ri, ci) {\n const {\n selector, rows, cols, merges,\n } = this;\n let cellRange = merges.getFirstIncludes(ri, ci);\n // console.log('cellRange:', cellRange, ri, ci, merges);\n if (cellRange === null) {\n cellRange = new CellRange(ri, ci, ri, ci);\n if (ri === -1) {\n cellRange.sri = 0;\n cellRange.eri = rows.len - 1;\n }\n if (ci === -1) {\n cellRange.sci = 0;\n cellRange.eci = cols.len - 1;\n }\n }\n selector.range = cellRange;\n return cellRange;\n }\n\n setSelectedCellAttr(property, value) {\n this.changeData(() => {\n const { selector, styles, rows } = this;\n if (property === 'merge') {\n if (value) this.merge();\n else this.unmerge();\n } else if (property === 'border') {\n setStyleBorders.call(this, value);\n } else if (property === 'formula') {\n // console.log('>>>', selector.multiple());\n const { ri, ci, range } = selector;\n if (selector.multiple()) {\n const [rn, cn] = selector.size();\n const {\n sri, sci, eri, eci,\n } = range;\n if (rn > 1) {\n for (let i = sci; i <= eci; i += 1) {\n const cell = rows.getCellOrNew(eri + 1, i);\n cell.text = `=${value}(${xy2expr(i, sri)}:${xy2expr(i, eri)})`;\n }\n } else if (cn > 1) {\n const cell = rows.getCellOrNew(ri, eci + 1);\n cell.text = `=${value}(${xy2expr(sci, ri)}:${xy2expr(eci, ri)})`;\n }\n } else {\n const cell = rows.getCellOrNew(ri, ci);\n cell.text = `=${value}()`;\n }\n } else {\n selector.range.each((ri, ci) => {\n const cell = rows.getCellOrNew(ri, ci);\n let cstyle = {};\n if (cell.style !== undefined) {\n cstyle = helper.cloneDeep(styles[cell.style]);\n }\n if (property === 'format') {\n cstyle.format = value;\n cell.style = this.addStyle(cstyle);\n } else if (property === 'font-bold' || property === 'font-italic'\n || property === 'font-name' || property === 'font-size') {\n const nfont = {};\n nfont[property.split('-')[1]] = value;\n cstyle.font = Object.assign(cstyle.font || {}, nfont);\n cell.style = this.addStyle(cstyle);\n } else if (property === 'strike' || property === 'textwrap'\n || property === 'underline'\n || property === 'align' || property === 'valign'\n || property === 'color' || property === 'bgcolor') {\n cstyle[property] = value;\n cell.style = this.addStyle(cstyle);\n } else {\n cell[property] = value;\n }\n });\n }\n });\n }\n\n // state: input | finished\n setSelectedCellText(text, state = 'input') {\n const { autoFilter, selector, rows } = this;\n const { ri, ci } = selector;\n let nri = ri;\n if (this.unsortedRowMap.has(ri)) {\n nri = this.unsortedRowMap.get(ri);\n }\n const oldCell = rows.getCell(nri, ci);\n const oldText = oldCell ? oldCell.text : '';\n this.setCellText(nri, ci, text, state);\n // replace filter.value\n if (autoFilter.active()) {\n const filter = autoFilter.getFilter(ci);\n if (filter) {\n const vIndex = filter.value.findIndex(v => v === oldText);\n if (vIndex >= 0) {\n filter.value.splice(vIndex, 1, text);\n }\n // console.log('filter:', filter, oldCell);\n }\n }\n // this.resetAutoFilter();\n }\n\n getSelectedCell() {\n const { ri, ci } = this.selector;\n let nri = ri;\n if (this.unsortedRowMap.has(ri)) {\n nri = this.unsortedRowMap.get(ri);\n }\n return this.rows.getCell(nri, ci);\n }\n\n xyInSelectedRect(x, y) {\n const {\n left, top, width, height,\n } = this.getSelectedRect();\n const x1 = x - this.cols.indexWidth;\n const y1 = y - this.rows.height;\n // console.log('x:', x, ',y:', y, 'left:', left, 'top:', top);\n return x1 > left && x1 < (left + width)\n && y1 > top && y1 < (top + height);\n }\n\n getSelectedRect() {\n return this.getRect(this.selector.range);\n }\n\n getClipboardRect() {\n const { clipboard } = this;\n if (!clipboard.isClear()) {\n return this.getRect(clipboard.range);\n }\n return { left: -100, top: -100 };\n }\n\n getRect(cellRange) {\n const {\n scroll, rows, cols, exceptRowSet,\n } = this;\n const {\n sri, sci, eri, eci,\n } = cellRange;\n // console.log('sri:', sri, ',sci:', sci, ', eri:', eri, ', eci:', eci);\n // no selector\n if (sri < 0 && sci < 0) {\n return {\n left: 0, l: 0, top: 0, t: 0, scroll,\n };\n }\n const left = cols.sumWidth(0, sci);\n const top = rows.sumHeight(0, sri, exceptRowSet);\n const height = rows.sumHeight(sri, eri + 1, exceptRowSet);\n const width = cols.sumWidth(sci, eci + 1);\n // console.log('sri:', sri, ', sci:', sci, ', eri:', eri, ', eci:', eci);\n let left0 = left - scroll.x;\n let top0 = top - scroll.y;\n const fsh = this.freezeTotalHeight();\n const fsw = this.freezeTotalWidth();\n if (fsw > 0 && fsw > left) {\n left0 = left;\n }\n if (fsh > 0 && fsh > top) {\n top0 = top;\n }\n return {\n l: left,\n t: top,\n left: left0,\n top: top0,\n height,\n width,\n scroll,\n };\n }\n\n getCellRectByXY(x, y) {\n const {\n scroll, merges, rows, cols,\n } = this;\n let { ri, top, height } = getCellRowByY.call(this, y, scroll.y);\n let { ci, left, width } = getCellColByX.call(this, x, scroll.x);\n if (ci === -1) {\n width = cols.totalWidth();\n }\n if (ri === -1) {\n height = rows.totalHeight();\n }\n if (ri >= 0 || ci >= 0) {\n const merge = merges.getFirstIncludes(ri, ci);\n if (merge) {\n ri = merge.sri;\n ci = merge.sci;\n ({\n left, top, width, height,\n } = this.cellRect(ri, ci));\n }\n }\n return {\n ri, ci, left, top, width, height,\n };\n }\n\n isSignleSelected() {\n const {\n sri, sci, eri, eci,\n } = this.selector.range;\n const cell = this.getCell(sri, sci);\n if (cell && cell.merge) {\n const [rn, cn] = cell.merge;\n if (sri + rn === eri && sci + cn === eci) return true;\n }\n return !this.selector.multiple();\n }\n\n canUnmerge() {\n const {\n sri, sci, eri, eci,\n } = this.selector.range;\n const cell = this.getCell(sri, sci);\n if (cell && cell.merge) {\n const [rn, cn] = cell.merge;\n if (sri + rn === eri && sci + cn === eci) return true;\n }\n return false;\n }\n\n merge() {\n const { selector, rows } = this;\n if (this.isSignleSelected()) return;\n const [rn, cn] = selector.size();\n // console.log('merge:', rn, cn);\n if (rn > 1 || cn > 1) {\n const { sri, sci } = selector.range;\n this.changeData(() => {\n const cell = rows.getCellOrNew(sri, sci);\n cell.merge = [rn - 1, cn - 1];\n this.merges.add(selector.range);\n // delete merge cells\n this.rows.deleteCells(selector.range);\n // console.log('cell:', cell, this.d);\n this.rows.setCell(sri, sci, cell);\n });\n }\n }\n\n unmerge() {\n const { selector } = this;\n if (!this.isSignleSelected()) return;\n const { sri, sci } = selector.range;\n this.changeData(() => {\n this.rows.deleteCell(sri, sci, 'merge');\n this.merges.deleteWithin(selector.range);\n });\n }\n\n canAutofilter() {\n return !this.autoFilter.active();\n }\n\n autofilter() {\n const { autoFilter, selector } = this;\n this.changeData(() => {\n if (autoFilter.active()) {\n autoFilter.clear();\n this.exceptRowSet = new Set();\n this.sortedRowMap = new Map();\n this.unsortedRowMap = new Map();\n } else {\n autoFilter.ref = selector.range.toString();\n }\n });\n }\n\n setAutoFilter(ci, order, operator, value) {\n const { autoFilter } = this;\n autoFilter.addFilter(ci, operator, value);\n autoFilter.setSort(ci, order);\n this.resetAutoFilter();\n }\n\n resetAutoFilter() {\n const { autoFilter, rows } = this;\n if (!autoFilter.active()) return;\n const { sort } = autoFilter;\n const { rset, fset } = autoFilter.filteredRows((r, c) => rows.getCell(r, c));\n const fary = Array.from(fset);\n const oldAry = Array.from(fset);\n if (sort) {\n fary.sort((a, b) => {\n if (sort.order === 'asc') return a - b;\n if (sort.order === 'desc') return b - a;\n return 0;\n });\n }\n this.exceptRowSet = rset;\n this.sortedRowMap = new Map();\n this.unsortedRowMap = new Map();\n fary.forEach((it, index) => {\n this.sortedRowMap.set(oldAry[index], it);\n this.unsortedRowMap.set(it, oldAry[index]);\n });\n }\n\n deleteCell(what = 'all') {\n const { selector } = this;\n this.changeData(() => {\n this.rows.deleteCells(selector.range, what);\n if (what === 'all' || what === 'format') {\n this.merges.deleteWithin(selector.range);\n }\n });\n }\n\n // type: row | column\n insert(type, n = 1) {\n this.changeData(() => {\n const { sri, sci } = this.selector.range;\n const { rows, merges, cols } = this;\n let si = sri;\n if (type === 'row') {\n rows.insert(sri, n);\n } else if (type === 'column') {\n rows.insertColumn(sci, n);\n si = sci;\n cols.len += 1;\n }\n merges.shift(type, si, n, (ri, ci, rn, cn) => {\n const cell = rows.getCell(ri, ci);\n cell.merge[0] += rn;\n cell.merge[1] += cn;\n });\n });\n }\n\n // type: row | column\n delete(type) {\n this.changeData(() => {\n const {\n rows, merges, selector, cols,\n } = this;\n const { range } = selector;\n const {\n sri, sci, eri, eci,\n } = selector.range;\n const [rsize, csize] = selector.range.size();\n let si = sri;\n let size = rsize;\n if (type === 'row') {\n rows.delete(sri, eri);\n } else if (type === 'column') {\n rows.deleteColumn(sci, eci);\n si = range.sci;\n size = csize;\n cols.len -= 1;\n }\n // console.log('type:', type, ', si:', si, ', size:', size);\n merges.shift(type, si, -size, (ri, ci, rn, cn) => {\n // console.log('ri:', ri, ', ci:', ci, ', rn:', rn, ', cn:', cn);\n const cell = rows.getCell(ri, ci);\n cell.merge[0] += rn;\n cell.merge[1] += cn;\n if (cell.merge[0] === 0 && cell.merge[1] === 0) {\n delete cell.merge;\n }\n });\n });\n }\n\n scrollx(x, cb) {\n const { scroll, freeze, cols } = this;\n const [, fci] = freeze;\n const [\n ci, left, width,\n ] = helper.rangeReduceIf(fci, cols.len, 0, 0, x, i => cols.getWidth(i));\n // console.log('fci:', fci, ', ci:', ci);\n let x1 = left;\n if (x > 0) x1 += width;\n if (scroll.x !== x1) {\n scroll.ci = x > 0 ? ci : 0;\n scroll.x = x1;\n cb();\n }\n }\n\n scrolly(y, cb) {\n const { scroll, freeze, rows } = this;\n const [fri] = freeze;\n const [\n ri, top, height,\n ] = helper.rangeReduceIf(fri, rows.len, 0, 0, y, i => rows.getHeight(i));\n let y1 = top;\n if (y > 0) y1 += height;\n // console.log('ri:', ri, ' ,y:', y1);\n if (scroll.y !== y1) {\n scroll.ri = y > 0 ? ri : 0;\n scroll.y = y1;\n cb();\n }\n }\n\n cellRect(ri, ci) {\n const { rows, cols } = this;\n const left = cols.sumWidth(0, ci);\n const top = rows.sumHeight(0, ri);\n const cell = rows.getCell(ri, ci);\n let width = cols.getWidth(ci);\n let height = rows.getHeight(ri);\n if (cell !== null) {\n if (cell.merge) {\n const [rn, cn] = cell.merge;\n // console.log('cell.merge:', cell.merge);\n if (rn > 0) {\n for (let i = 1; i <= rn; i += 1) {\n height += rows.getHeight(ri + i);\n }\n }\n if (cn > 0) {\n for (let i = 1; i <= cn; i += 1) {\n width += cols.getWidth(ci + i);\n }\n }\n }\n }\n // console.log('data:', this.d);\n return {\n left, top, width, height, cell,\n };\n }\n\n getCell(ri, ci) {\n return this.rows.getCell(ri, ci);\n }\n\n getCellTextOrDefault(ri, ci) {\n const cell = this.getCell(ri, ci);\n return (cell && cell.text) ? cell.text : '';\n }\n\n getCellStyle(ri, ci) {\n const cell = this.getCell(ri, ci);\n if (cell && cell.style !== undefined) {\n return this.styles[cell.style];\n }\n return null;\n }\n\n getCellStyleOrDefault(ri, ci) {\n const { styles, rows } = this;\n const cell = rows.getCell(ri, ci);\n const cellStyle = (cell && cell.style !== undefined) ? styles[cell.style] : {};\n return helper.merge(this.defaultStyle(), cellStyle);\n }\n\n getSelectedCellStyle() {\n const { ri, ci } = this.selector;\n return this.getCellStyleOrDefault(ri, ci);\n }\n\n // state: input | finished\n setCellText(ri, ci, text, state) {\n const { rows, history, validations } = this;\n if (state === 'finished') {\n rows.setCellText(ri, ci, '');\n history.add(this.getData());\n rows.setCellText(ri, ci, text);\n } else {\n rows.setCellText(ri, ci, text);\n this.change(this.getData());\n }\n // validator\n validations.validate(ri, ci, text);\n }\n\n freezeIsActive() {\n const [ri, ci] = this.freeze;\n return ri > 0 || ci > 0;\n }\n\n setFreeze(ri, ci) {\n this.changeData(() => {\n this.freeze = [ri, ci];\n });\n }\n\n freezeTotalWidth() {\n return this.cols.sumWidth(0, this.freeze[1]);\n }\n\n freezeTotalHeight() {\n return this.rows.sumHeight(0, this.freeze[0]);\n }\n\n setRowHeight(ri, height) {\n this.changeData(() => {\n this.rows.setHeight(ri, height);\n });\n }\n\n setColWidth(ci, width) {\n this.changeData(() => {\n this.cols.setWidth(ci, width);\n });\n }\n\n viewHeight() {\n const { view, showToolbar, showBottomBar } = this.settings;\n let h = view.height();\n if (showBottomBar) {\n h -= bottombarHeight;\n }\n if (showToolbar) {\n h -= toolbarHeight;\n }\n return h;\n }\n\n viewWidth() {\n return this.settings.view.width();\n }\n\n freezeViewRange() {\n const [ri, ci] = this.freeze;\n return new CellRange(0, 0, ri - 1, ci - 1, this.freezeTotalWidth(), this.freezeTotalHeight());\n }\n\n contentRange() {\n const { rows, cols } = this;\n const [ri, ci] = rows.maxCell();\n const h = rows.sumHeight(0, ri + 1);\n const w = cols.sumWidth(0, ci + 1);\n return new CellRange(0, 0, ri, ci, w, h);\n }\n\n exceptRowTotalHeight(sri, eri) {\n const { exceptRowSet, rows } = this;\n const exceptRows = Array.from(exceptRowSet);\n let exceptRowTH = 0;\n exceptRows.forEach((ri) => {\n if (ri < sri || ri > eri) {\n const height = rows.getHeight(ri);\n exceptRowTH += height;\n }\n });\n return exceptRowTH;\n }\n\n viewRange() {\n const {\n scroll, rows, cols, freeze, exceptRowSet,\n } = this;\n // console.log('scroll:', scroll, ', freeze:', freeze)\n let { ri, ci } = scroll;\n if (ri <= 0) [ri] = freeze;\n if (ci <= 0) [, ci] = freeze;\n\n let [x, y] = [0, 0];\n let [eri, eci] = [rows.len, cols.len];\n for (let i = ri; i < rows.len; i += 1) {\n if (!exceptRowSet.has(i)) {\n y += rows.getHeight(i);\n eri = i;\n }\n if (y > this.viewHeight()) break;\n }\n for (let j = ci; j < cols.len; j += 1) {\n x += cols.getWidth(j);\n eci = j;\n if (x > this.viewWidth()) break;\n }\n // console.log(ri, ci, eri, eci, x, y);\n return new CellRange(ri, ci, eri, eci, x, y);\n }\n\n eachMergesInView(viewRange, cb) {\n this.merges.filterIntersects(viewRange)\n .forEach(it => cb(it));\n }\n\n hideRowsOrCols() {\n const { rows, cols, selector } = this;\n const [rlen, clen] = selector.size();\n const {\n sri, sci, eri, eci,\n } = selector.range;\n if (rlen === rows.len) {\n for (let ci = sci; ci <= eci; ci += 1) {\n cols.setHide(ci, true);\n }\n } else if (clen === cols.len) {\n for (let ri = sri; ri <= eri; ri += 1) {\n rows.setHide(ri, true);\n }\n }\n }\n\n // type: row | col\n // index row-index | col-index\n unhideRowsOrCols(type, index) {\n this[`${type}s`].unhide(index);\n }\n\n rowEach(min, max, cb) {\n let y = 0;\n const { rows } = this;\n const frset = this.exceptRowSet;\n const frary = [...frset];\n let offset = 0;\n for (let i = 0; i < frary.length; i += 1) {\n if (frary[i] < min) {\n offset += 1;\n }\n }\n // console.log('min:', min, ', max:', max, ', scroll:', scroll);\n for (let i = min + offset; i <= max + offset; i += 1) {\n if (frset.has(i)) {\n offset += 1;\n } else {\n const rowHeight = rows.getHeight(i);\n if (rowHeight > 0) {\n cb(i, y, rowHeight);\n y += rowHeight;\n if (y > this.viewHeight()) break;\n }\n }\n }\n }\n\n colEach(min, max, cb) {\n let x = 0;\n const { cols } = this;\n for (let i = min; i <= max; i += 1) {\n const colWidth = cols.getWidth(i);\n if (colWidth > 0) {\n cb(i, x, colWidth);\n x += colWidth;\n if (x > this.viewWidth()) break;\n }\n }\n }\n\n defaultStyle() {\n return this.settings.style;\n }\n\n addStyle(nstyle) {\n const { styles } = this;\n // console.log('old.styles:', styles, nstyle);\n for (let i = 0; i < styles.length; i += 1) {\n const style = styles[i];\n if (helper.equals(style, nstyle)) return i;\n }\n styles.push(nstyle);\n return styles.length - 1;\n }\n\n changeData(cb) {\n this.history.add(this.getData());\n cb();\n this.change(this.getData());\n }\n\n setData(d) {\n Object.keys(d).forEach((property) => {\n if (property === 'merges' || property === 'rows'\n || property === 'cols' || property === 'validations') {\n this[property].setData(d[property]);\n } else if (property === 'freeze') {\n const [x, y] = expr2xy(d[property]);\n this.freeze = [y, x];\n } else if (property === 'autofilter') {\n this.autoFilter.setData(d[property]);\n } else if (d[property] !== undefined) {\n this[property] = d[property];\n }\n });\n return this;\n }\n\n getData() {\n const {\n name, freeze, styles, merges, rows, cols, validations, autoFilter,\n } = this;\n return {\n name,\n freeze: xy2expr(freeze[1], freeze[0]),\n styles,\n merges: merges.getData(),\n rows: rows.getData(),\n cols: cols.getData(),\n validations: validations.getData(),\n autofilter: autoFilter.getData(),\n };\n }\n}\n","/* global window */\nexport function bind(target, name, fn) {\n target.addEventListener(name, fn);\n}\nexport function unbind(target, name, fn) {\n target.removeEventListener(name, fn);\n}\nexport function unbindClickoutside(el) {\n if (el.xclickoutside) {\n unbind(window.document.body, 'click', el.xclickoutside);\n delete el.xclickoutside;\n }\n}\n\n// the left mouse button: mousedown → mouseup → click\n// the right mouse button: mousedown → contenxtmenu → mouseup\n// the right mouse button in firefox(>65.0): mousedown → contenxtmenu → mouseup → click on window\nexport function bindClickoutside(el, cb) {\n el.xclickoutside = (evt) => {\n // ignore double click\n // console.log('evt:', evt);\n if (evt.detail === 2 || el.contains(evt.target)) return;\n if (cb) cb(el);\n else {\n el.hide();\n unbindClickoutside(el);\n }\n };\n bind(window.document.body, 'click', el.xclickoutside);\n}\nexport function mouseMoveUp(target, movefunc, upfunc) {\n bind(target, 'mousemove', movefunc);\n const t = target;\n t.xEvtUp = (evt) => {\n // console.log('mouseup>>>');\n unbind(target, 'mousemove', movefunc);\n unbind(target, 'mouseup', target.xEvtUp);\n upfunc(evt);\n };\n bind(target, 'mouseup', target.xEvtUp);\n}\n\nfunction calTouchDirection(spanx, spany, evt, cb) {\n let direction = '';\n // console.log('spanx:', spanx, ', spany:', spany);\n if (Math.abs(spanx) > Math.abs(spany)) {\n // horizontal\n direction = spanx > 0 ? 'right' : 'left';\n cb(direction, spanx, evt);\n } else {\n // vertical\n direction = spany > 0 ? 'down' : 'up';\n cb(direction, spany, evt);\n }\n}\n// cb = (direction, distance) => {}\nexport function bindTouch(target, { move, end }) {\n let startx = 0;\n let starty = 0;\n bind(target, 'touchstart', (evt) => {\n const { pageX, pageY } = evt.touches[0];\n startx = pageX;\n starty = pageY;\n });\n bind(target, 'touchmove', (evt) => {\n if (!move) return;\n const { pageX, pageY } = evt.changedTouches[0];\n const spanx = pageX - startx;\n const spany = pageY - starty;\n if (Math.abs(spanx) > 10 || Math.abs(spany) > 10) {\n // console.log('spanx:', spanx, ', spany:', spany);\n calTouchDirection(spanx, spany, evt, move);\n startx = pageX;\n starty = pageY;\n }\n evt.preventDefault();\n });\n bind(target, 'touchend', (evt) => {\n if (!end) return;\n const { pageX, pageY } = evt.changedTouches[0];\n const spanx = pageX - startx;\n const spany = pageY - starty;\n calTouchDirection(spanx, spany, evt, end);\n });\n}\n\n// eventemiter\nexport function createEventEmitter() {\n const listeners = new Map();\n\n function on(eventName, callback) {\n const push = () => {\n const currentListener = listeners.get(eventName);\n return (Array.isArray(currentListener)\n && currentListener.push(callback))\n || false;\n };\n\n const create = () => listeners.set(eventName, [].concat(callback));\n\n return (listeners.has(eventName)\n && push())\n || create();\n }\n\n function fire(eventName, args) {\n const exec = () => {\n const currentListener = listeners.get(eventName);\n for (const callback of currentListener) callback.call(null, ...args);\n };\n\n return listeners.has(eventName)\n && exec();\n }\n\n function removeListener(eventName, callback) {\n const remove = () => {\n const currentListener = listeners.get(eventName);\n const idx = currentListener.indexOf(callback);\n return (idx >= 0)\n && currentListener.splice(idx, 1)\n && listeners.get(eventName).length === 0\n && listeners.delete(eventName);\n };\n\n return listeners.has(eventName)\n && remove();\n }\n\n function once(eventName, callback) {\n const execCalllback = (...args) => {\n callback.call(null, ...args);\n removeListener(eventName, execCalllback);\n };\n\n return on(eventName, execCalllback);\n }\n\n function removeAllListeners() {\n listeners.clear();\n }\n\n return {\n get current() {\n return listeners;\n },\n on,\n once,\n fire,\n removeListener,\n removeAllListeners,\n };\n}\n","/* global window */\nexport const cssPrefix = 'x-spreadsheet';\nexport const dpr = window.devicePixelRatio || 1;\nexport default {\n cssPrefix,\n dpr,\n};\n","/* global window */\nimport { h } from './element';\nimport { mouseMoveUp } from './event';\nimport { cssPrefix } from '../config';\n\nexport default class Resizer {\n constructor(vertical = false, minDistance) {\n this.moving = false;\n this.vertical = vertical;\n this.el = h('div', `${cssPrefix}-resizer ${vertical ? 'vertical' : 'horizontal'}`).children(\n this.unhideHoverEl = h('div', `${cssPrefix}-resizer-hover`)\n .on('dblclick.stop', evt => this.mousedblclickHandler(evt))\n .css('position', 'absolute').hide(),\n this.hoverEl = h('div', `${cssPrefix}-resizer-hover`)\n .on('mousedown.stop', evt => this.mousedownHandler(evt)),\n this.lineEl = h('div', `${cssPrefix}-resizer-line`).hide(),\n ).hide();\n // cell rect\n this.cRect = null;\n this.finishedFn = null;\n this.minDistance = minDistance;\n this.unhideFn = () => {};\n }\n\n showUnhide(index) {\n this.unhideIndex = index;\n this.unhideHoverEl.show();\n }\n\n hideUnhide() {\n this.unhideHoverEl.hide();\n }\n\n // rect : {top, left, width, height}\n // line : {width, height}\n show(rect, line) {\n const {\n moving, vertical, hoverEl, lineEl, el,\n unhideHoverEl,\n } = this;\n if (moving) return;\n this.cRect = rect;\n const {\n left, top, width, height,\n } = rect;\n el.offset({\n left: vertical ? left + width - 5 : left,\n top: vertical ? top : top + height - 5,\n }).show();\n hoverEl.offset({\n width: vertical ? 5 : width,\n height: vertical ? height : 5,\n });\n lineEl.offset({\n width: vertical ? 0 : line.width,\n height: vertical ? line.height : 0,\n });\n unhideHoverEl.offset({\n left: vertical ? 5 - width : left,\n top: vertical ? top : 5 - height,\n width: vertical ? 5 : width,\n height: vertical ? height : 5,\n });\n }\n\n hide() {\n this.el.offset({\n left: 0,\n top: 0,\n }).hide();\n this.hideUnhide();\n }\n\n mousedblclickHandler() {\n if (this.unhideIndex) this.unhideFn(this.unhideIndex);\n }\n\n mousedownHandler(evt) {\n let startEvt = evt;\n const {\n el, lineEl, cRect, vertical, minDistance,\n } = this;\n let distance = vertical ? cRect.width : cRect.height;\n // console.log('distance:', distance);\n lineEl.show();\n mouseMoveUp(window, (e) => {\n this.moving = true;\n if (startEvt !== null && e.buttons === 1) {\n // console.log('top:', top, ', left:', top, ', cRect:', cRect);\n if (vertical) {\n distance += e.movementX;\n if (distance > minDistance) {\n el.css('left', `${cRect.left + distance}px`);\n }\n } else {\n distance += e.movementY;\n if (distance > minDistance) {\n el.css('top', `${cRect.top + distance}px`);\n }\n }\n startEvt = e;\n }\n }, () => {\n startEvt = null;\n lineEl.hide();\n this.moving = false;\n this.hide();\n if (this.finishedFn) {\n if (distance < minDistance) distance = minDistance;\n this.finishedFn(cRect, distance);\n }\n });\n }\n}\n","import { h } from './element';\nimport { cssPrefix } from '../config';\n\nexport default class Scrollbar {\n constructor(vertical) {\n this.vertical = vertical;\n this.moveFn = null;\n this.el = h('div', `${cssPrefix}-scrollbar ${vertical ? 'vertical' : 'horizontal'}`)\n .child(this.contentEl = h('div', ''))\n .on('mousemove.stop', () => {})\n .on('scroll.stop', (evt) => {\n const { scrollTop, scrollLeft } = evt.target;\n // console.log('scrollTop:', scrollTop);\n if (this.moveFn) {\n this.moveFn(this.vertical ? scrollTop : scrollLeft, evt);\n }\n // console.log('evt:::', evt);\n });\n }\n\n move(v) {\n this.el.scroll(v);\n return this;\n }\n\n scroll() {\n return this.el.scroll();\n }\n\n set(distance, contentDistance) {\n const d = distance - 1;\n // console.log('distance:', distance, ', contentDistance:', contentDistance);\n if (contentDistance > d) {\n const cssKey = this.vertical ? 'height' : 'width';\n // console.log('d:', d);\n this.el.css(cssKey, `${d - 15}px`).show();\n this.contentEl\n .css(this.vertical ? 'width' : 'height', '1px')\n .css(cssKey, `${contentDistance}px`);\n } else {\n this.el.hide();\n }\n return this;\n }\n}\n","import { h } from './element';\nimport { cssPrefix } from '../config';\nimport { CellRange } from '../core/cell_range';\n\nconst selectorHeightBorderWidth = 2 * 2 - 1;\nlet startZIndex = 10;\n\nclass SelectorElement {\n constructor(useHideInput = false) {\n this.useHideInput = useHideInput;\n this.inputChange = () => {};\n this.cornerEl = h('div', `${cssPrefix}-selector-corner`);\n this.areaEl = h('div', `${cssPrefix}-selector-area`)\n .child(this.cornerEl).hide();\n this.clipboardEl = h('div', `${cssPrefix}-selector-clipboard`).hide();\n this.autofillEl = h('div', `${cssPrefix}-selector-autofill`).hide();\n this.el = h('div', `${cssPrefix}-selector`)\n .css('z-index', `${startZIndex}`)\n .children(this.areaEl, this.clipboardEl, this.autofillEl)\n .hide();\n if (useHideInput) {\n this.hideInput = h('input', '')\n .on('compositionend', (evt) => {\n this.inputChange(evt.target.value);\n });\n this.el.child(this.hideInputDiv = h('div', 'hide-input').child(this.hideInput));\n this.el.child(this.hideInputDiv = h('div', 'hide-input').child(this.hideInput));\n }\n startZIndex += 1;\n }\n\n setOffset(v) {\n this.el.offset(v).show();\n return this;\n }\n\n hide() {\n this.el.hide();\n return this;\n }\n\n setAreaOffset(v) {\n const {\n left, top, width, height,\n } = v;\n const of = {\n width: width - selectorHeightBorderWidth + 0.8,\n height: height - selectorHeightBorderWidth + 0.8,\n left: left - 0.8,\n top: top - 0.8,\n };\n this.areaEl.offset(of).show();\n if (this.useHideInput) {\n this.hideInputDiv.offset(of);\n this.hideInput.val('').focus();\n }\n }\n\n setClipboardOffset(v) {\n const {\n left, top, width, height,\n } = v;\n this.clipboardEl.offset({\n left,\n top,\n width: width - 5,\n height: height - 5,\n });\n }\n\n showAutofill(v) {\n const {\n left, top, width, height,\n } = v;\n this.autofillEl.offset({\n width: width - selectorHeightBorderWidth,\n height: height - selectorHeightBorderWidth,\n left,\n top,\n }).show();\n }\n\n hideAutofill() {\n this.autofillEl.hide();\n }\n\n showClipboard() {\n this.clipboardEl.show();\n }\n\n hideClipboard() {\n this.clipboardEl.hide();\n }\n}\n\nfunction calBRAreaOffset(offset) {\n const { data } = this;\n const {\n left, top, width, height, scroll, l, t,\n } = offset;\n const ftwidth = data.freezeTotalWidth();\n const ftheight = data.freezeTotalHeight();\n let left0 = left - ftwidth;\n if (ftwidth > l) left0 -= scroll.x;\n let top0 = top - ftheight;\n if (ftheight > t) top0 -= scroll.y;\n return {\n left: left0,\n top: top0,\n width,\n height,\n };\n}\n\nfunction calTAreaOffset(offset) {\n const { data } = this;\n const {\n left, width, height, l, t, scroll,\n } = offset;\n const ftwidth = data.freezeTotalWidth();\n let left0 = left - ftwidth;\n if (ftwidth > l) left0 -= scroll.x;\n return {\n left: left0, top: t, width, height,\n };\n}\n\nfunction calLAreaOffset(offset) {\n const { data } = this;\n const {\n top, width, height, l, t, scroll,\n } = offset;\n const ftheight = data.freezeTotalHeight();\n let top0 = top - ftheight;\n // console.log('ftheight:', ftheight, ', t:', t);\n if (ftheight > t) top0 -= scroll.y;\n return {\n left: l, top: top0, width, height,\n };\n}\n\nfunction setBRAreaOffset(offset) {\n const { br } = this;\n br.setAreaOffset(calBRAreaOffset.call(this, offset));\n}\n\nfunction setTLAreaOffset(offset) {\n const { tl } = this;\n tl.setAreaOffset(offset);\n}\n\nfunction setTAreaOffset(offset) {\n const { t } = this;\n t.setAreaOffset(calTAreaOffset.call(this, offset));\n}\n\nfunction setLAreaOffset(offset) {\n const { l } = this;\n l.setAreaOffset(calLAreaOffset.call(this, offset));\n}\n\nfunction setLClipboardOffset(offset) {\n const { l } = this;\n l.setClipboardOffset(calLAreaOffset.call(this, offset));\n}\n\nfunction setBRClipboardOffset(offset) {\n const { br } = this;\n br.setClipboardOffset(calBRAreaOffset.call(this, offset));\n}\n\nfunction setTLClipboardOffset(offset) {\n const { tl } = this;\n tl.setClipboardOffset(offset);\n}\n\nfunction setTClipboardOffset(offset) {\n const { t } = this;\n t.setClipboardOffset(calTAreaOffset.call(this, offset));\n}\n\nfunction setAllAreaOffset(offset) {\n setBRAreaOffset.call(this, offset);\n setTLAreaOffset.call(this, offset);\n setTAreaOffset.call(this, offset);\n setLAreaOffset.call(this, offset);\n}\n\nfunction setAllClipboardOffset(offset) {\n setBRClipboardOffset.call(this, offset);\n setTLClipboardOffset.call(this, offset);\n setTClipboardOffset.call(this, offset);\n setLClipboardOffset.call(this, offset);\n}\n\nexport default class Selector {\n constructor(data) {\n this.inputChange = () => {};\n this.data = data;\n this.br = new SelectorElement(true);\n this.t = new SelectorElement();\n this.l = new SelectorElement();\n this.tl = new SelectorElement();\n this.br.inputChange = (v) => {\n this.inputChange(v);\n };\n this.br.el.show();\n this.offset = null;\n this.areaOffset = null;\n this.indexes = null;\n this.range = null;\n this.arange = null;\n this.el = h('div', `${cssPrefix}-selectors`)\n .children(\n this.tl.el,\n this.t.el,\n this.l.el,\n this.br.el,\n ).hide();\n\n // for performance\n this.lastri = -1;\n this.lastci = -1;\n\n startZIndex += 1;\n }\n\n resetData(data) {\n this.data = data;\n this.range = data.selector.range;\n this.resetAreaOffset();\n }\n\n hide() {\n this.el.hide();\n }\n\n resetOffset() {\n const {\n data, tl, t, l, br,\n } = this;\n const freezeHeight = data.freezeTotalHeight();\n const freezeWidth = data.freezeTotalWidth();\n if (freezeHeight > 0 || freezeWidth > 0) {\n tl.setOffset({ width: freezeWidth, height: freezeHeight });\n t.setOffset({ left: freezeWidth, height: freezeHeight });\n l.setOffset({ top: freezeHeight, width: freezeWidth });\n br.setOffset({ left: freezeWidth, top: freezeHeight });\n } else {\n tl.hide();\n t.hide();\n l.hide();\n br.setOffset({ left: 0, top: 0 });\n }\n }\n\n resetAreaOffset() {\n // console.log('offset:', offset);\n const offset = this.data.getSelectedRect();\n const coffset = this.data.getClipboardRect();\n setAllAreaOffset.call(this, offset);\n setAllClipboardOffset.call(this, coffset);\n this.resetOffset();\n }\n\n resetBRTAreaOffset() {\n const offset = this.data.getSelectedRect();\n const coffset = this.data.getClipboardRect();\n setBRAreaOffset.call(this, offset);\n setTAreaOffset.call(this, offset);\n setBRClipboardOffset.call(this, coffset);\n setTClipboardOffset.call(this, coffset);\n this.resetOffset();\n }\n\n resetBRLAreaOffset() {\n const offset = this.data.getSelectedRect();\n const coffset = this.data.getClipboardRect();\n setBRAreaOffset.call(this, offset);\n setLAreaOffset.call(this, offset);\n setBRClipboardOffset.call(this, coffset);\n setLClipboardOffset.call(this, coffset);\n this.resetOffset();\n }\n\n set(ri, ci, indexesUpdated = true) {\n const { data } = this;\n const cellRange = data.calSelectedRangeByStart(ri, ci);\n const { sri, sci } = cellRange;\n if (indexesUpdated) {\n let [cri, cci] = [ri, ci];\n if (ri < 0) cri = 0;\n if (ci < 0) cci = 0;\n data.selector.setIndexes(cri, cci);\n this.indexes = [cri, cci];\n }\n\n this.moveIndexes = [sri, sci];\n // this.sIndexes = sIndexes;\n // this.eIndexes = eIndexes;\n this.range = cellRange;\n this.resetAreaOffset();\n this.el.show();\n }\n\n setEnd(ri, ci, moving = true) {\n const { data, lastri, lastci } = this;\n if (moving) {\n if (ri === lastri && ci === lastci) return;\n this.lastri = ri;\n this.lastci = ci;\n }\n this.range = data.calSelectedRangeByEnd(ri, ci);\n setAllAreaOffset.call(this, this.data.getSelectedRect());\n }\n\n reset() {\n // console.log('::::', this.data);\n const { eri, eci } = this.data.selector.range;\n this.setEnd(eri, eci);\n }\n\n showAutofill(ri, ci) {\n if (ri === -1 && ci === -1) return;\n // console.log('ri:', ri, ', ci:', ci);\n // const [sri, sci] = this.sIndexes;\n // const [eri, eci] = this.eIndexes;\n const {\n sri, sci, eri, eci,\n } = this.range;\n const [nri, nci] = [ri, ci];\n // const rn = eri - sri;\n // const cn = eci - sci;\n const srn = sri - ri;\n const scn = sci - ci;\n const ern = eri - ri;\n const ecn = eci - ci;\n if (scn > 0) {\n // left\n // console.log('left');\n this.arange = new CellRange(sri, nci, eri, sci - 1);\n // this.saIndexes = [sri, nci];\n // this.eaIndexes = [eri, sci - 1];\n // data.calRangeIndexes2(\n } else if (srn > 0) {\n // top\n // console.log('top');\n // nri = sri;\n this.arange = new CellRange(nri, sci, sri - 1, eci);\n // this.saIndexes = [nri, sci];\n // this.eaIndexes = [sri - 1, eci];\n } else if (ecn < 0) {\n // right\n // console.log('right');\n // nci = eci;\n this.arange = new CellRange(sri, eci + 1, eri, nci);\n // this.saIndexes = [sri, eci + 1];\n // this.eaIndexes = [eri, nci];\n } else if (ern < 0) {\n // bottom\n // console.log('bottom');\n // nri = eri;\n this.arange = new CellRange(eri + 1, sci, nri, eci);\n // this.saIndexes = [eri + 1, sci];\n // this.eaIndexes = [nri, eci];\n } else {\n // console.log('else:');\n this.arange = null;\n // this.saIndexes = null;\n // this.eaIndexes = null;\n return;\n }\n if (this.arange !== null) {\n // console.log(this.saIndexes, ':', this.eaIndexes);\n const offset = this.data.getRect(this.arange);\n offset.width += 2;\n offset.height += 2;\n const {\n br, l, t, tl,\n } = this;\n br.showAutofill(calBRAreaOffset.call(this, offset));\n l.showAutofill(calLAreaOffset.call(this, offset));\n t.showAutofill(calTAreaOffset.call(this, offset));\n tl.showAutofill(offset);\n }\n }\n\n hideAutofill() {\n ['br', 'l', 't', 'tl'].forEach((property) => {\n this[property].hideAutofill();\n });\n }\n\n showClipboard() {\n const coffset = this.data.getClipboardRect();\n setAllClipboardOffset.call(this, coffset);\n ['br', 'l', 't', 'tl'].forEach((property) => {\n this[property].showClipboard();\n });\n }\n\n hideClipboard() {\n ['br', 'l', 't', 'tl'].forEach((property) => {\n this[property].hideClipboard();\n });\n }\n}\n","import { h } from './element';\nimport { bindClickoutside, unbindClickoutside } from './event';\nimport { cssPrefix } from '../config';\n\nfunction inputMovePrev(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n const { filterItems } = this;\n if (filterItems.length <= 0) return;\n if (this.itemIndex >= 0) filterItems[this.itemIndex].toggle();\n this.itemIndex -= 1;\n if (this.itemIndex < 0) {\n this.itemIndex = filterItems.length - 1;\n }\n filterItems[this.itemIndex].toggle();\n}\n\nfunction inputMoveNext(evt) {\n evt.stopPropagation();\n const { filterItems } = this;\n if (filterItems.length <= 0) return;\n if (this.itemIndex >= 0) filterItems[this.itemIndex].toggle();\n this.itemIndex += 1;\n if (this.itemIndex > filterItems.length - 1) {\n this.itemIndex = 0;\n }\n filterItems[this.itemIndex].toggle();\n}\n\nfunction inputEnter(evt) {\n evt.preventDefault();\n const { filterItems } = this;\n if (filterItems.length <= 0) return;\n evt.stopPropagation();\n if (this.itemIndex < 0) this.itemIndex = 0;\n filterItems[this.itemIndex].el.click();\n this.hide();\n}\n\nfunction inputKeydownHandler(evt) {\n const { keyCode } = evt;\n if (evt.ctrlKey) {\n evt.stopPropagation();\n }\n switch (keyCode) {\n case 37: // left\n evt.stopPropagation();\n break;\n case 38: // up\n inputMovePrev.call(this, evt);\n break;\n case 39: // right\n evt.stopPropagation();\n break;\n case 40: // down\n inputMoveNext.call(this, evt);\n break;\n case 13: // enter\n inputEnter.call(this, evt);\n break;\n case 9:\n inputEnter.call(this, evt);\n break;\n default:\n evt.stopPropagation();\n break;\n }\n}\n\nexport default class Suggest {\n constructor(items, itemClick, width = '200px') {\n this.filterItems = [];\n this.items = items;\n this.el = h('div', `${cssPrefix}-suggest`).css('width', width).hide();\n this.itemClick = itemClick;\n this.itemIndex = -1;\n }\n\n setOffset(v) {\n this.el.cssRemoveKeys('top', 'bottom')\n .offset(v);\n }\n\n hide() {\n const { el } = this;\n this.filterItems = [];\n this.itemIndex = -1;\n el.hide();\n unbindClickoutside(this.el.parent());\n }\n\n setItems(items) {\n this.items = items;\n // this.search('');\n }\n\n search(word) {\n let { items } = this;\n if (!/^\\s*$/.test(word)) {\n items = items.filter(it => (it.key || it).startsWith(word.toUpperCase()));\n }\n items = items.map((it) => {\n let { title } = it;\n if (title) {\n if (typeof title === 'function') {\n title = title();\n }\n } else {\n title = it;\n }\n const item = h('div', `${cssPrefix}-item`)\n .child(title)\n .on('click.stop', () => {\n this.itemClick(it);\n this.hide();\n });\n if (it.label) {\n item.child(h('div', 'label').html(it.label));\n }\n return item;\n });\n this.filterItems = items;\n if (items.length <= 0) {\n return;\n }\n const { el } = this;\n // items[0].toggle();\n el.html('').children(...items).show();\n bindClickoutside(el.parent(), () => { this.hide(); });\n }\n\n bindInputEvents(input) {\n input.on('keydown', evt => inputKeydownHandler.call(this, evt));\n }\n}\n","import { Element, h } from './element';\nimport { cssPrefix } from '../config';\n\nexport default class Icon extends Element {\n constructor(name) {\n super('div', `${cssPrefix}-icon`);\n this.iconNameEl = h('div', `${cssPrefix}-icon-img ${name}`);\n this.child(this.iconNameEl);\n }\n\n setName(name) {\n this.iconNameEl.className(`${cssPrefix}-icon-img ${name}`);\n }\n}\n","import { h } from './element';\nimport Icon from './icon';\nimport { t } from '../locale/locale';\n\nfunction addMonth(date, step) {\n date.setMonth(date.getMonth() + step);\n}\n\nfunction weekday(date, index) {\n const d = new Date(date);\n d.setDate(index - date.getDay() + 1);\n return d;\n}\n\nfunction monthDays(year, month, cdate) {\n // the first day of month\n const startDate = new Date(year, month, 1, 23, 59, 59);\n const datess = [[], [], [], [], [], []];\n for (let i = 0; i < 6; i += 1) {\n for (let j = 0; j < 7; j += 1) {\n const index = i * 7 + j;\n const d = weekday(startDate, index);\n const disabled = d.getMonth() !== month;\n // console.log('d:', d, ', cdate:', cdate);\n const active = d.getMonth() === cdate.getMonth() && d.getDate() === cdate.getDate();\n datess[i][j] = { d, disabled, active };\n }\n }\n return datess;\n}\n\nexport default class Calendar {\n constructor(value) {\n this.value = value;\n this.cvalue = new Date(value);\n\n this.headerLeftEl = h('div', 'calendar-header-left');\n this.bodyEl = h('tbody', '');\n this.buildAll();\n this.el = h('div', 'x-spreadsheet-calendar')\n .children(\n h('div', 'calendar-header').children(\n this.headerLeftEl,\n h('div', 'calendar-header-right').children(\n h('a', 'calendar-prev')\n .on('click.stop', () => this.prev())\n .child(new Icon('chevron-left')),\n h('a', 'calendar-next')\n .on('click.stop', () => this.next())\n .child(new Icon('chevron-right')),\n ),\n ),\n h('table', 'calendar-body').children(\n h('thead', '').child(\n h('tr', '').children(\n ...t('calendar.weeks').map(week => h('th', 'cell').child(week)),\n ),\n ),\n this.bodyEl,\n ),\n );\n this.selectChange = () => {};\n }\n\n setValue(value) {\n this.value = value;\n this.cvalue = new Date(value);\n this.buildAll();\n }\n\n prev() {\n const { value } = this;\n addMonth(value, -1);\n this.buildAll();\n }\n\n next() {\n const { value } = this;\n addMonth(value, 1);\n this.buildAll();\n }\n\n buildAll() {\n this.buildHeaderLeft();\n this.buildBody();\n }\n\n buildHeaderLeft() {\n const { value } = this;\n this.headerLeftEl.html(`${t('calendar.months')[value.getMonth()]} ${value.getFullYear()}`);\n }\n\n buildBody() {\n const { value, cvalue, bodyEl } = this;\n const mDays = monthDays(value.getFullYear(), value.getMonth(), cvalue);\n const trs = mDays.map((it) => {\n const tds = it.map((it1) => {\n let cls = 'cell';\n if (it1.disabled) cls += ' disabled';\n if (it1.active) cls += ' active';\n return h('td', '').child(\n h('div', cls)\n .on('click.stop', () => {\n this.selectChange(it1.d);\n })\n .child(it1.d.getDate().toString()),\n );\n });\n return h('tr', '').children(...tds);\n });\n bodyEl.html('').children(...trs);\n }\n}\n","import Calendar from './calendar';\nimport { h } from './element';\nimport { cssPrefix } from '../config';\n\nexport default class Datepicker {\n constructor() {\n this.calendar = new Calendar(new Date());\n this.el = h('div', `${cssPrefix}-datepicker`).child(\n this.calendar.el,\n ).hide();\n }\n\n setValue(date) {\n // console.log(':::::::', date, typeof date, date instanceof string);\n const { calendar } = this;\n if (typeof date === 'string') {\n // console.log(/^\\d{4}-\\d{1,2}-\\d{1,2}$/.test(date));\n if (/^\\d{4}-\\d{1,2}-\\d{1,2}$/.test(date)) {\n calendar.setValue(new Date(date.replace(new RegExp('-', 'g'), '/')));\n }\n } else if (date instanceof Date) {\n calendar.setValue(date);\n }\n return this;\n }\n\n change(cb) {\n this.calendar.selectChange = (d) => {\n cb(d);\n this.hide();\n };\n }\n\n show() {\n this.el.show();\n }\n\n hide() {\n this.el.hide();\n }\n}\n","//* global window */\nimport { h } from './element';\nimport Suggest from './suggest';\nimport Datepicker from './datepicker';\nimport { cssPrefix } from '../config';\n// import { mouseMoveUp } from '../event';\n\nfunction resetTextareaSize() {\n const { inputText } = this;\n if (!/^\\s*$/.test(inputText)) {\n const {\n textlineEl, textEl, areaOffset,\n } = this;\n const txts = inputText.split('\\n');\n const maxTxtSize = Math.max(...txts.map(it => it.length));\n const tlOffset = textlineEl.offset();\n const fontWidth = tlOffset.width / inputText.length;\n const tlineWidth = (maxTxtSize + 1) * fontWidth + 5;\n const maxWidth = this.viewFn().width - areaOffset.left - fontWidth;\n let h1 = txts.length;\n if (tlineWidth > areaOffset.width) {\n let twidth = tlineWidth;\n if (tlineWidth > maxWidth) {\n twidth = maxWidth;\n h1 += parseInt(tlineWidth / maxWidth, 10);\n h1 += (tlineWidth % maxWidth) > 0 ? 1 : 0;\n }\n textEl.css('width', `${twidth}px`);\n }\n h1 *= this.rowHeight;\n if (h1 > areaOffset.height) {\n textEl.css('height', `${h1}px`);\n }\n }\n}\n\nfunction insertText({ target }, itxt) {\n const { value, selectionEnd } = target;\n const ntxt = `${value.slice(0, selectionEnd)}${itxt}${value.slice(selectionEnd)}`;\n target.value = ntxt;\n target.setSelectionRange(selectionEnd + 1, selectionEnd + 1);\n\n this.inputText = ntxt;\n this.textlineEl.html(ntxt);\n resetTextareaSize.call(this);\n}\n\nfunction keydownEventHandler(evt) {\n const { keyCode, altKey } = evt;\n if (keyCode !== 13 && keyCode !== 9) evt.stopPropagation();\n if (keyCode === 13 && altKey) {\n insertText.call(this, evt, '\\n');\n evt.stopPropagation();\n }\n if (keyCode === 13 && !altKey) evt.preventDefault();\n}\n\nfunction inputEventHandler(evt) {\n const v = evt.target.value;\n // console.log(evt, 'v:', v);\n const { suggest, textlineEl, validator } = this;\n const { cell } = this;\n if (cell !== null) {\n if (('editable' in cell && cell.editable === true) || (cell.editable === undefined)) {\n this.inputText = v;\n if (validator) {\n if (validator.type === 'list') {\n suggest.search(v);\n } else {\n suggest.hide();\n }\n } else {\n const start = v.lastIndexOf('=');\n if (start !== -1) {\n suggest.search(v.substring(start + 1));\n } else {\n suggest.hide();\n }\n }\n textlineEl.html(v);\n resetTextareaSize.call(this);\n this.change('input', v);\n } else {\n evt.target.value = cell.text;\n }\n } else {\n this.inputText = v;\n if (validator) {\n if (validator.type === 'list') {\n suggest.search(v);\n } else {\n suggest.hide();\n }\n } else {\n const start = v.lastIndexOf('=');\n if (start !== -1) {\n suggest.search(v.substring(start + 1));\n } else {\n suggest.hide();\n }\n }\n textlineEl.html(v);\n resetTextareaSize.call(this);\n this.change('input', v);\n }\n}\n\nfunction setTextareaRange(position) {\n const { el } = this.textEl;\n setTimeout(() => {\n el.focus();\n el.setSelectionRange(position, position);\n }, 0);\n}\n\nfunction setText(text, position) {\n const { textEl, textlineEl } = this;\n // firefox bug\n textEl.el.blur();\n\n textEl.val(text);\n textlineEl.html(text);\n setTextareaRange.call(this, position);\n}\n\nfunction suggestItemClick(it) {\n const { inputText, validator } = this;\n let position = 0;\n if (validator && validator.type === 'list') {\n this.inputText = it;\n position = this.inputText.length;\n } else {\n const start = inputText.lastIndexOf('=');\n const sit = inputText.substring(0, start + 1);\n let eit = inputText.substring(start + 1);\n if (eit.indexOf(')') !== -1) {\n eit = eit.substring(eit.indexOf(')'));\n } else {\n eit = '';\n }\n this.inputText = `${sit + it.key}(`;\n // console.log('inputText:', this.inputText);\n position = this.inputText.length;\n this.inputText += `)${eit}`;\n }\n setText.call(this, this.inputText, position);\n}\n\nfunction resetSuggestItems() {\n this.suggest.setItems(this.formulas);\n}\n\nfunction dateFormat(d) {\n let month = d.getMonth() + 1;\n let date = d.getDate();\n if (month < 10) month = `0${month}`;\n if (date < 10) date = `0${date}`;\n return `${d.getFullYear()}-${month}-${date}`;\n}\n\nexport default class Editor {\n constructor(formulas, viewFn, rowHeight) {\n this.viewFn = viewFn;\n this.rowHeight = rowHeight;\n this.formulas = formulas;\n this.suggest = new Suggest(formulas, (it) => {\n suggestItemClick.call(this, it);\n });\n this.datepicker = new Datepicker();\n this.datepicker.change((d) => {\n // console.log('d:', d);\n this.setText(dateFormat(d));\n this.clear();\n });\n this.areaEl = h('div', `${cssPrefix}-editor-area`)\n .children(\n this.textEl = h('textarea', '')\n .on('input', evt => inputEventHandler.call(this, evt))\n .on('paste.stop', () => {})\n .on('keydown', evt => keydownEventHandler.call(this, evt)),\n this.textlineEl = h('div', 'textline'),\n this.suggest.el,\n this.datepicker.el,\n )\n .on('mousemove.stop', () => {})\n .on('mousedown.stop', () => {});\n this.el = h('div', `${cssPrefix}-editor`)\n .child(this.areaEl).hide();\n this.suggest.bindInputEvents(this.textEl);\n\n this.areaOffset = null;\n this.freeze = { w: 0, h: 0 };\n this.cell = null;\n this.inputText = '';\n this.change = () => {};\n }\n\n setFreezeLengths(width, height) {\n this.freeze.w = width;\n this.freeze.h = height;\n }\n\n clear() {\n // const { cell } = this;\n // const cellText = (cell && cell.text) || '';\n if (this.inputText !== '') {\n this.change('finished', this.inputText);\n }\n this.cell = null;\n this.areaOffset = null;\n this.inputText = '';\n this.el.hide();\n this.textEl.val('');\n this.textlineEl.html('');\n resetSuggestItems.call(this);\n this.datepicker.hide();\n }\n\n setOffset(offset, suggestPosition = 'top') {\n const {\n textEl, areaEl, suggest, freeze, el,\n } = this;\n if (offset) {\n this.areaOffset = offset;\n const {\n left, top, width, height, l, t,\n } = offset;\n // console.log('left:', left, ',top:', top, ', freeze:', freeze);\n const elOffset = { left: 0, top: 0 };\n // top left\n if (freeze.w > l && freeze.h > t) {\n //\n } else if (freeze.w < l && freeze.h < t) {\n elOffset.left = freeze.w;\n elOffset.top = freeze.h;\n } else if (freeze.w > l) {\n elOffset.top = freeze.h;\n } else if (freeze.h > t) {\n elOffset.left = freeze.w;\n }\n el.offset(elOffset);\n areaEl.offset({ left: left - elOffset.left - 0.8, top: top - elOffset.top - 0.8 });\n textEl.offset({ width: width - 9 + 0.8, height: height - 3 + 0.8 });\n const sOffset = { left: 0 };\n sOffset[suggestPosition] = height;\n suggest.setOffset(sOffset);\n suggest.hide();\n }\n }\n\n setCell(cell, validator) {\n // console.log('::', validator);\n const { el, datepicker, suggest } = this;\n el.show();\n this.cell = cell;\n const text = (cell && cell.text) || '';\n this.setText(text);\n\n this.validator = validator;\n if (validator) {\n const { type } = validator;\n if (type === 'date') {\n datepicker.show();\n if (!/^\\s*$/.test(text)) {\n datepicker.setValue(text);\n }\n }\n if (type === 'list') {\n suggest.setItems(validator.values());\n suggest.search('');\n }\n }\n }\n\n setText(text) {\n this.inputText = text;\n // console.log('text>>:', text);\n setText.call(this, text, text.length);\n resetTextareaSize.call(this);\n }\n}\n","import { Element } from './element';\nimport { cssPrefix } from '../config';\nimport { t } from '../locale/locale';\n\nexport default class Button extends Element {\n // type: primary\n constructor(title, type = '') {\n super('div', `${cssPrefix}-button ${type}`);\n this.child(t(`button.${title}`));\n }\n}\n","/* global window */\nfunction dpr() {\n return window.devicePixelRatio || 1;\n}\n\nfunction thinLineWidth() {\n return dpr() - 0.5;\n}\n\nfunction npx(px) {\n return parseInt(px * dpr(), 10);\n}\n\nfunction npxLine(px) {\n const n = npx(px);\n return n > 0 ? n - 0.5 : 0.5;\n}\n\nclass DrawBox {\n constructor(x, y, w, h, padding = 0) {\n this.x = x;\n this.y = y;\n this.width = w;\n this.height = h;\n this.padding = padding;\n this.bgcolor = '#ffffff';\n // border: [width, style, color]\n this.borderTop = null;\n this.borderRight = null;\n this.borderBottom = null;\n this.borderLeft = null;\n }\n\n setBorders({\n top, bottom, left, right,\n }) {\n if (top) this.borderTop = top;\n if (right) this.borderRight = right;\n if (bottom) this.borderBottom = bottom;\n if (left) this.borderLeft = left;\n }\n\n innerWidth() {\n return this.width - (this.padding * 2) - 2;\n }\n\n innerHeight() {\n return this.height - (this.padding * 2) - 2;\n }\n\n textx(align) {\n const { width, padding } = this;\n let { x } = this;\n if (align === 'left') {\n x += padding;\n } else if (align === 'center') {\n x += width / 2;\n } else if (align === 'right') {\n x += width - padding;\n }\n return x;\n }\n\n texty(align, h) {\n const { height, padding } = this;\n let { y } = this;\n if (align === 'top') {\n y += padding;\n } else if (align === 'middle') {\n y += height / 2 - h / 2;\n } else if (align === 'bottom') {\n y += height - padding - h;\n }\n return y;\n }\n\n topxys() {\n const { x, y, width } = this;\n return [[x, y], [x + width, y]];\n }\n\n rightxys() {\n const {\n x, y, width, height,\n } = this;\n return [[x + width, y], [x + width, y + height]];\n }\n\n bottomxys() {\n const {\n x, y, width, height,\n } = this;\n return [[x, y + height], [x + width, y + height]];\n }\n\n leftxys() {\n const {\n x, y, height,\n } = this;\n return [[x, y], [x, y + height]];\n }\n}\n\nfunction drawFontLine(type, tx, ty, align, valign, blheight, blwidth) {\n const floffset = { x: 0, y: 0 };\n if (type === 'underline') {\n if (valign === 'bottom') {\n floffset.y = 0;\n } else if (valign === 'top') {\n floffset.y = -(blheight + 2);\n } else {\n floffset.y = -blheight / 2;\n }\n } else if (type === 'strike') {\n if (valign === 'bottom') {\n floffset.y = blheight / 2;\n } else if (valign === 'top') {\n floffset.y = -((blheight / 2) + 2);\n }\n }\n\n if (align === 'center') {\n floffset.x = blwidth / 2;\n } else if (align === 'right') {\n floffset.x = blwidth;\n }\n this.line(\n [tx - floffset.x, ty - floffset.y],\n [tx - floffset.x + blwidth, ty - floffset.y],\n );\n}\n\nclass Draw {\n constructor(el, width, height) {\n this.el = el;\n this.ctx = el.getContext('2d');\n this.resize(width, height);\n this.ctx.scale(dpr(), dpr());\n }\n\n resize(width, height) {\n // console.log('dpr:', dpr);\n this.el.style.width = `${width}px`;\n this.el.style.height = `${height}px`;\n this.el.width = npx(width);\n this.el.height = npx(height);\n }\n\n clear() {\n const { width, height } = this.el;\n this.ctx.clearRect(0, 0, width, height);\n return this;\n }\n\n attr(options) {\n Object.assign(this.ctx, options);\n return this;\n }\n\n save() {\n this.ctx.save();\n this.ctx.beginPath();\n return this;\n }\n\n restore() {\n this.ctx.restore();\n return this;\n }\n\n beginPath() {\n this.ctx.beginPath();\n return this;\n }\n\n translate(x, y) {\n this.ctx.translate(npx(x), npx(y));\n return this;\n }\n\n scale(x, y) {\n this.ctx.scale(x, y);\n return this;\n }\n\n clearRect(x, y, w, h) {\n this.ctx.clearRect(x, y, w, h);\n return this;\n }\n\n fillRect(x, y, w, h) {\n this.ctx.fillRect(npx(x) - 0.5, npx(y) - 0.5, npx(w), npx(h));\n return this;\n }\n\n fillText(text, x, y) {\n this.ctx.fillText(text, npx(x), npx(y));\n return this;\n }\n\n /*\n txt: render text\n box: DrawBox\n attr: {\n align: left | center | right\n valign: top | middle | bottom\n color: '#333333',\n strike: false,\n font: {\n name: 'Arial',\n size: 14,\n bold: false,\n italic: false,\n }\n }\n textWrap: text wrapping\n */\n text(mtxt, box, attr = {}, textWrap = true) {\n const { ctx } = this;\n const {\n align, valign, font, color, strike, underline,\n } = attr;\n const tx = box.textx(align);\n ctx.save();\n ctx.beginPath();\n this.attr({\n textAlign: align,\n textBaseline: valign,\n font: `${font.italic ? 'italic' : ''} ${font.bold ? 'bold' : ''} ${npx(font.size)}px ${font.name}`,\n fillStyle: color,\n strokeStyle: color,\n });\n const txts = `${mtxt}`.split('\\n');\n const biw = box.innerWidth();\n const ntxts = [];\n txts.forEach((it) => {\n const txtWidth = ctx.measureText(it).width;\n if (textWrap && txtWidth > npx(biw)) {\n let textLine = { w: 0, len: 0, start: 0 };\n for (let i = 0; i < it.length; i += 1) {\n if (textLine.w >= npx(biw)) {\n ntxts.push(it.substr(textLine.start, textLine.len));\n textLine = { w: 0, len: 0, start: i };\n }\n textLine.len += 1;\n textLine.w += ctx.measureText(it[i]).width + 1;\n }\n if (textLine.len > 0) {\n ntxts.push(it.substr(textLine.start, textLine.len));\n }\n } else {\n ntxts.push(it);\n }\n });\n const txtHeight = (ntxts.length - 1) * (font.size + 2);\n let ty = box.texty(valign, txtHeight);\n ntxts.forEach((txt) => {\n const txtWidth = ctx.measureText(txt).width;\n this.fillText(txt, tx, ty);\n if (strike) {\n drawFontLine.call(this, 'strike', tx, ty, align, valign, font.size, txtWidth);\n }\n if (underline) {\n drawFontLine.call(this, 'underline', tx, ty, align, valign, font.size, txtWidth);\n }\n ty += font.size + 2;\n });\n ctx.restore();\n return this;\n }\n\n border(style, color) {\n const { ctx } = this;\n ctx.lineWidth = thinLineWidth;\n ctx.strokeStyle = color;\n // console.log('style:', style);\n if (style === 'medium') {\n ctx.lineWidth = npx(2) - 0.5;\n } else if (style === 'thick') {\n ctx.lineWidth = npx(3);\n } else if (style === 'dashed') {\n ctx.setLineDash([npx(3), npx(2)]);\n } else if (style === 'dotted') {\n ctx.setLineDash([npx(1), npx(1)]);\n } else if (style === 'double') {\n ctx.setLineDash([npx(2), 0]);\n }\n return this;\n }\n\n line(...xys) {\n const { ctx } = this;\n if (xys.length > 1) {\n ctx.beginPath();\n const [x, y] = xys[0];\n ctx.moveTo(npxLine(x), npxLine(y));\n for (let i = 1; i < xys.length; i += 1) {\n const [x1, y1] = xys[i];\n ctx.lineTo(npxLine(x1), npxLine(y1));\n }\n ctx.stroke();\n }\n return this;\n }\n\n strokeBorders(box) {\n const { ctx } = this;\n ctx.save();\n // border\n const {\n borderTop, borderRight, borderBottom, borderLeft,\n } = box;\n if (borderTop) {\n this.border(...borderTop);\n // console.log('box.topxys:', box.topxys());\n this.line(...box.topxys());\n }\n if (borderRight) {\n this.border(...borderRight);\n this.line(...box.rightxys());\n }\n if (borderBottom) {\n this.border(...borderBottom);\n this.line(...box.bottomxys());\n }\n if (borderLeft) {\n this.border(...borderLeft);\n this.line(...box.leftxys());\n }\n ctx.restore();\n }\n\n dropdown(box) {\n const { ctx } = this;\n const {\n x, y, width, height,\n } = box;\n const sx = x + width - 15;\n const sy = y + height - 15;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(npx(sx), npx(sy));\n ctx.lineTo(npx(sx + 8), npx(sy));\n ctx.lineTo(npx(sx + 4), npx(sy + 6));\n ctx.closePath();\n ctx.fillStyle = 'rgba(0, 0, 0, .45)';\n ctx.fill();\n ctx.restore();\n }\n\n error(box) {\n const { ctx } = this;\n const { x, y, width } = box;\n const sx = x + width - 1;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(npx(sx - 8), npx(y - 1));\n ctx.lineTo(npx(sx), npx(y - 1));\n ctx.lineTo(npx(sx), npx(y + 8));\n ctx.closePath();\n ctx.fillStyle = 'rgba(255, 0, 0, .65)';\n ctx.fill();\n ctx.restore();\n }\n\n frozen(box) {\n const { ctx } = this;\n const { x, y, width } = box;\n const sx = x + width - 1;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(npx(sx - 8), npx(y - 1));\n ctx.lineTo(npx(sx), npx(y - 1));\n ctx.lineTo(npx(sx), npx(y + 8));\n ctx.closePath();\n ctx.fillStyle = 'rgba(0, 255, 0, .85)';\n ctx.fill();\n ctx.restore();\n }\n\n rect(box, dtextcb) {\n const { ctx } = this;\n const {\n x, y, width, height, bgcolor,\n } = box;\n ctx.save();\n ctx.beginPath();\n ctx.fillStyle = bgcolor || '#fff';\n ctx.rect(npxLine(x + 1), npxLine(y + 1), npx(width - 2), npx(height - 2));\n ctx.clip();\n ctx.fill();\n dtextcb();\n ctx.restore();\n }\n}\n\nexport default {};\nexport {\n Draw,\n DrawBox,\n thinLineWidth,\n npx,\n};\n","// docs\nimport './_.prototypes';\n\n/** default font list\n * @type {BaseFont[]}\n */\nconst baseFonts = [\n { key: 'Arial', title: 'Arial' },\n { key: 'Helvetica', title: 'Helvetica' },\n { key: 'Source Sans Pro', title: 'Source Sans Pro' },\n { key: 'Comic Sans MS', title: 'Comic Sans MS' },\n { key: 'Courier New', title: 'Courier New' },\n { key: 'Verdana', title: 'Verdana' },\n { key: 'Lato', title: 'Lato' },\n];\n\n/** default fontSize list\n * @type {FontSize[]}\n */\nconst fontSizes = [\n { pt: 7.5, px: 10 },\n { pt: 8, px: 11 },\n { pt: 9, px: 12 },\n { pt: 10, px: 13 },\n { pt: 10.5, px: 14 },\n { pt: 11, px: 15 },\n { pt: 12, px: 16 },\n { pt: 14, px: 18.7 },\n { pt: 15, px: 20 },\n { pt: 16, px: 21.3 },\n { pt: 18, px: 24 },\n { pt: 22, px: 29.3 },\n { pt: 24, px: 32 },\n { pt: 26, px: 34.7 },\n { pt: 36, px: 48 },\n { pt: 42, px: 56 },\n // { pt: 54, px: 71.7 },\n // { pt: 63, px: 83.7 },\n // { pt: 72, px: 95.6 },\n];\n\n/** map pt to px\n * @date 2019-10-10\n * @param {fontsizePT} pt\n * @returns {fontsizePX}\n */\nfunction getFontSizePxByPt(pt) {\n for (let i = 0; i < fontSizes.length; i += 1) {\n const fontSize = fontSizes[i];\n if (fontSize.pt === pt) {\n return fontSize.px;\n }\n }\n return pt;\n}\n\n/** transform baseFonts to map\n * @date 2019-10-10\n * @param {BaseFont[]} [ary=[]]\n * @returns {object}\n */\nfunction fonts(ary = []) {\n const map = {};\n baseFonts.concat(ary).forEach((f) => {\n map[f.key] = f;\n });\n return map;\n}\n\nexport default {};\nexport {\n fontSizes,\n fonts,\n baseFonts,\n getFontSizePxByPt,\n};\n","import { expr2xy, xy2expr } from './alphabet';\nimport { numberCalc } from './helper';\n\n// Converting infix expression to a suffix expression\n// src: AVERAGE(SUM(A1,A2), B1) + 50 + B20\n// return: [A1, A2], SUM[, B1],AVERAGE,50,+,B20,+\nconst infixExprToSuffixExpr = (src) => {\n const operatorStack = [];\n const stack = [];\n let subStrs = []; // SUM, A1, B2, 50 ...\n let fnArgType = 0; // 1 => , 2 => :\n let fnArgOperator = '';\n let fnArgsLen = 1; // A1,A2,A3...\n let oldc = '';\n for (let i = 0; i < src.length; i += 1) {\n const c = src.charAt(i);\n if (c !== ' ') {\n if (c >= 'a' && c <= 'z') {\n subStrs.push(c.toUpperCase());\n } else if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || c === '.') {\n subStrs.push(c);\n } else if (c === '\"') {\n i += 1;\n while (src.charAt(i) !== '\"') {\n subStrs.push(src.charAt(i));\n i += 1;\n }\n stack.push(`\"${subStrs.join('')}`);\n subStrs = [];\n } else if (c === '-' && /[+\\-*/,(]/.test(oldc)) {\n subStrs.push(c);\n } else {\n // console.log('subStrs:', subStrs.join(''), stack);\n if (c !== '(' && subStrs.length > 0) {\n stack.push(subStrs.join(''));\n }\n if (c === ')') {\n let c1 = operatorStack.pop();\n if (fnArgType === 2) {\n // fn argument range => A1:B5\n try {\n const [ex, ey] = expr2xy(stack.pop());\n const [sx, sy] = expr2xy(stack.pop());\n // console.log('::', sx, sy, ex, ey);\n let rangelen = 0;\n for (let x = sx; x <= ex; x += 1) {\n for (let y = sy; y <= ey; y += 1) {\n stack.push(xy2expr(x, y));\n rangelen += 1;\n }\n }\n stack.push([c1, rangelen]);\n } catch (e) {\n // console.log(e);\n }\n } else if (fnArgType === 1 || fnArgType === 3) {\n if (fnArgType === 3) stack.push(fnArgOperator);\n // fn argument => A1,A2,B5\n stack.push([c1, fnArgsLen]);\n fnArgsLen = 1;\n } else {\n // console.log('c1:', c1, fnArgType, stack, operatorStack);\n while (c1 !== '(') {\n stack.push(c1);\n if (operatorStack.length <= 0) break;\n c1 = operatorStack.pop();\n }\n }\n fnArgType = 0;\n } else if (c === '=' || c === '>' || c === '<') {\n const nc = src.charAt(i + 1);\n fnArgOperator = c;\n if (nc === '=' || nc === '-') {\n fnArgOperator += nc;\n i += 1;\n }\n fnArgType = 3;\n } else if (c === ':') {\n fnArgType = 2;\n } else if (c === ',') {\n if (fnArgType === 3) {\n stack.push(fnArgOperator);\n }\n fnArgType = 1;\n fnArgsLen += 1;\n } else if (c === '(' && subStrs.length > 0) {\n // function\n operatorStack.push(subStrs.join(''));\n } else {\n // priority: */ > +-\n // console.log('xxxx:', operatorStack, c, stack);\n if (operatorStack.length > 0 && (c === '+' || c === '-')) {\n let top = operatorStack[operatorStack.length - 1];\n if (top !== '(') stack.push(operatorStack.pop());\n if (top === '*' || top === '/') {\n while (operatorStack.length > 0) {\n top = operatorStack[operatorStack.length - 1];\n if (top !== '(') stack.push(operatorStack.pop());\n else break;\n }\n }\n } else if (operatorStack.length > 0) {\n const top = operatorStack[operatorStack.length - 1];\n if (top === '*' || top === '/') stack.push(operatorStack.pop());\n }\n operatorStack.push(c);\n }\n subStrs = [];\n }\n oldc = c;\n }\n }\n if (subStrs.length > 0) {\n stack.push(subStrs.join(''));\n }\n while (operatorStack.length > 0) {\n stack.push(operatorStack.pop());\n }\n return stack;\n};\n\nconst evalSubExpr = (subExpr, cellRender) => {\n const [fl] = subExpr;\n let expr = subExpr;\n if (fl === '\"') {\n return subExpr.substring(1);\n }\n let ret = 1;\n if (fl === '-') {\n expr = subExpr.substring(1);\n ret = -1;\n }\n if (expr[0] >= '0' && expr[0] <= '9') {\n return ret * Number(expr);\n }\n const [x, y] = expr2xy(expr);\n return ret * cellRender(x, y);\n};\n\n// evaluate the suffix expression\n// srcStack: <= infixExprToSufixExpr\n// formulaMap: {'SUM': {}, ...}\n// cellRender: (x, y) => {}\nconst evalSuffixExpr = (srcStack, formulaMap, cellRender, cellList) => {\n const stack = [];\n // console.log(':::::formulaMap:', formulaMap);\n for (let i = 0; i < srcStack.length; i += 1) {\n // console.log(':::>>>', srcStack[i]);\n const expr = srcStack[i];\n const fc = expr[0];\n if (expr === '+') {\n const top = stack.pop();\n stack.push(numberCalc('+', stack.pop(), top));\n } else if (expr === '-') {\n if (stack.length === 1) {\n const top = stack.pop();\n stack.push(numberCalc('*', top, -1));\n } else {\n const top = stack.pop();\n stack.push(numberCalc('-', stack.pop(), top));\n }\n } else if (expr === '*') {\n stack.push(numberCalc('*', stack.pop(), stack.pop()));\n } else if (expr === '/') {\n const top = stack.pop();\n stack.push(numberCalc('/', stack.pop(), top));\n } else if (fc === '=' || fc === '>' || fc === '<') {\n let top = stack.pop();\n if (!Number.isNaN(top)) top = Number(top);\n let left = stack.pop();\n if (!Number.isNaN(left)) left = Number(left);\n let ret = false;\n if (fc === '=') {\n ret = (left === top);\n } else if (expr === '>') {\n ret = (left > top);\n } else if (expr === '>=') {\n ret = (left >= top);\n } else if (expr === '<') {\n ret = (left < top);\n } else if (expr === '<=') {\n ret = (left <= top);\n }\n stack.push(ret);\n } else if (Array.isArray(expr)) {\n const [formula, len] = expr;\n const params = [];\n for (let j = 0; j < len; j += 1) {\n params.push(stack.pop());\n }\n stack.push(formulaMap[formula].render(params.reverse()));\n } else {\n if (cellList.includes(expr)) {\n return 0;\n }\n if ((fc >= 'a' && fc <= 'z') || (fc >= 'A' && fc <= 'Z')) {\n cellList.push(expr);\n }\n stack.push(evalSubExpr(expr, cellRender));\n cellList.pop();\n }\n // console.log('stack:', stack);\n }\n return stack[0];\n};\n\nconst cellRender = (src, formulaMap, getCellText, cellList = []) => {\n if (src[0] === '=') {\n const stack = infixExprToSuffixExpr(src.substring(1));\n if (stack.length <= 0) return src;\n return evalSuffixExpr(\n stack,\n formulaMap,\n (x, y) => cellRender(getCellText(x, y), formulaMap, getCellText, cellList),\n cellList,\n );\n }\n return src;\n};\n\nexport default {\n render: cellRender,\n};\nexport {\n infixExprToSuffixExpr,\n};\n","/**\n formula:\n key\n title\n render\n*/\n/**\n * @typedef {object} Formula\n * @property {string} key\n * @property {function} title\n * @property {function} render\n */\nimport { tf } from '../locale/locale';\nimport { numberCalc } from './helper';\n\n/** @type {Formula[]} */\nconst baseFormulas = [\n {\n key: 'SUM',\n title: tf('formula.sum'),\n render: ary => ary.reduce((a, b) => numberCalc('+', a, b), 0),\n },\n {\n key: 'AVERAGE',\n title: tf('formula.average'),\n render: ary => ary.reduce((a, b) => Number(a) + Number(b), 0) / ary.length,\n },\n {\n key: 'MAX',\n title: tf('formula.max'),\n render: ary => Math.max(...ary.map(v => Number(v))),\n },\n {\n key: 'MIN',\n title: tf('formula.min'),\n render: ary => Math.min(...ary.map(v => Number(v))),\n },\n {\n key: 'IF',\n title: tf('formula._if'),\n render: ([b, t, f]) => (b ? t : f),\n },\n {\n key: 'AND',\n title: tf('formula.and'),\n render: ary => ary.every(it => it),\n },\n {\n key: 'OR',\n title: tf('formula.or'),\n render: ary => ary.some(it => it),\n },\n {\n key: 'CONCAT',\n title: tf('formula.concat'),\n render: ary => ary.join(''),\n },\n /* support: 1 + A1 + B2 * 3\n {\n key: 'DIVIDE',\n title: tf('formula.divide'),\n render: ary => ary.reduce((a, b) => Number(a) / Number(b)),\n },\n {\n key: 'PRODUCT',\n title: tf('formula.product'),\n render: ary => ary.reduce((a, b) => Number(a) * Number(b),1),\n },\n {\n key: 'SUBTRACT',\n title: tf('formula.subtract'),\n render: ary => ary.reduce((a, b) => Number(a) - Number(b)),\n },\n */\n];\n\nconst formulas = baseFormulas;\n\n// const formulas = (formulaAry = []) => {\n// const formulaMap = {};\n// baseFormulas.concat(formulaAry).forEach((f) => {\n// formulaMap[f.key] = f;\n// });\n// return formulaMap;\n// };\nconst formulam = {};\nbaseFormulas.forEach((f) => {\n formulam[f.key] = f;\n});\n\nexport default {\n};\n\nexport {\n formulam,\n formulas,\n baseFormulas,\n};\n","import { tf } from '../locale/locale';\n\nconst formatStringRender = v => v;\n\nconst formatNumberRender = (v) => {\n // match \"-12.1\" or \"12\" or \"12.1\"\n if (/^(-?\\d*.?\\d*)$/.test(v)) {\n const v1 = Number(v).toFixed(2).toString();\n const [first, ...parts] = v1.split('\\\\.');\n return [first.replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,'), ...parts];\n }\n return v;\n};\n\nconst baseFormats = [\n {\n key: 'normal',\n title: tf('format.normal'),\n type: 'string',\n render: formatStringRender,\n },\n {\n key: 'text',\n title: tf('format.text'),\n type: 'string',\n render: formatStringRender,\n },\n {\n key: 'number',\n title: tf('format.number'),\n type: 'number',\n label: '1,000.12',\n render: formatNumberRender,\n },\n {\n key: 'percent',\n title: tf('format.percent'),\n type: 'number',\n label: '10.12%',\n render: v => `${v}%`,\n },\n {\n key: 'rmb',\n title: tf('format.rmb'),\n type: 'number',\n label: '¥10.00',\n render: v => `¥${formatNumberRender(v)}`,\n },\n {\n key: 'usd',\n title: tf('format.usd'),\n type: 'number',\n label: '$10.00',\n render: v => `$${formatNumberRender(v)}`,\n },\n {\n key: 'eur',\n title: tf('format.eur'),\n type: 'number',\n label: '€10.00',\n render: v => `€${formatNumberRender(v)}`,\n },\n {\n key: 'date',\n title: tf('format.date'),\n type: 'date',\n label: '26/09/2008',\n render: formatStringRender,\n },\n {\n key: 'time',\n title: tf('format.time'),\n type: 'date',\n label: '15:59:00',\n render: formatStringRender,\n },\n {\n key: 'datetime',\n title: tf('format.datetime'),\n type: 'date',\n label: '26/09/2008 15:59:00',\n render: formatStringRender,\n },\n {\n key: 'duration',\n title: tf('format.duration'),\n type: 'date',\n label: '24:01:00',\n render: formatStringRender,\n },\n];\n\n// const formats = (ary = []) => {\n// const map = {};\n// baseFormats.concat(ary).forEach((f) => {\n// map[f.key] = f;\n// });\n// return map;\n// };\nconst formatm = {};\nbaseFormats.forEach((f) => {\n formatm[f.key] = f;\n});\n\nexport default {\n};\nexport {\n formatm,\n baseFormats,\n};\n","import { stringAt } from '../core/alphabet';\nimport { getFontSizePxByPt } from '../core/font';\nimport _cell from '../core/cell';\nimport { formulam } from '../core/formula';\nimport { formatm } from '../core/format';\n\nimport {\n Draw, DrawBox, thinLineWidth, npx,\n} from '../canvas/draw';\n// gobal var\nconst cellPaddingWidth = 5;\nconst tableFixedHeaderCleanStyle = { fillStyle: '#f4f5f8' };\nconst tableGridStyle = {\n fillStyle: '#fff',\n lineWidth: thinLineWidth,\n strokeStyle: '#e6e6e6',\n};\nfunction tableFixedHeaderStyle() {\n return {\n textAlign: 'center',\n textBaseline: 'middle',\n font: `500 ${npx(12)}px Source Sans Pro`,\n fillStyle: '#585757',\n lineWidth: thinLineWidth(),\n strokeStyle: '#e6e6e6',\n };\n}\n\nfunction getDrawBox(data, rindex, cindex, yoffset = 0) {\n const {\n left, top, width, height,\n } = data.cellRect(rindex, cindex);\n return new DrawBox(left, top + yoffset, width, height, cellPaddingWidth);\n}\n/*\nfunction renderCellBorders(bboxes, translateFunc) {\n const { draw } = this;\n if (bboxes) {\n const rset = new Set();\n // console.log('bboxes:', bboxes);\n bboxes.forEach(({ ri, ci, box }) => {\n if (!rset.has(ri)) {\n rset.add(ri);\n translateFunc(ri);\n }\n draw.strokeBorders(box);\n });\n }\n}\n*/\n\nexport function renderCell(draw, data, rindex, cindex, yoffset = 0) {\n const { sortedRowMap, rows, cols } = data;\n if (rows.isHide(rindex) || cols.isHide(cindex)) return;\n let nrindex = rindex;\n if (sortedRowMap.has(rindex)) {\n nrindex = sortedRowMap.get(rindex);\n }\n\n const cell = data.getCell(nrindex, cindex);\n if (cell === null) return;\n let frozen = false;\n if ('editable' in cell && cell.editable === false) {\n frozen = true;\n }\n\n const style = data.getCellStyleOrDefault(nrindex, cindex);\n const dbox = getDrawBox(data, rindex, cindex, yoffset);\n dbox.bgcolor = style.bgcolor;\n if (style.border !== undefined) {\n dbox.setBorders(style.border);\n // bboxes.push({ ri: rindex, ci: cindex, box: dbox });\n draw.strokeBorders(dbox);\n }\n draw.rect(dbox, () => {\n // render text\n let cellText = '';\n if (!data.settings.evalPaused) {\n cellText = _cell.render(cell.text || '', formulam, (y, x) => (data.getCellTextOrDefault(x, y)));\n } else {\n cellText = cell.text || '';\n }\n if (style.format) {\n // console.log(data.formatm, '>>', cell.format);\n cellText = formatm[style.format].render(cellText);\n }\n const font = Object.assign({}, style.font);\n font.size = getFontSizePxByPt(font.size);\n // console.log('style:', style);\n draw.text(cellText, dbox, {\n align: style.align,\n valign: style.valign,\n font,\n color: style.color,\n strike: style.strike,\n underline: style.underline,\n }, style.textwrap);\n // error\n const error = data.validations.getError(rindex, cindex);\n if (error) {\n // console.log('error:', rindex, cindex, error);\n draw.error(dbox);\n }\n if (frozen) {\n draw.frozen(dbox);\n }\n });\n}\n\nfunction renderAutofilter(viewRange) {\n const { data, draw } = this;\n if (viewRange) {\n const { autoFilter } = data;\n if (!autoFilter.active()) return;\n const afRange = autoFilter.hrange();\n if (viewRange.intersects(afRange)) {\n afRange.each((ri, ci) => {\n const dbox = getDrawBox(data, ri, ci);\n draw.dropdown(dbox);\n });\n }\n }\n}\n\nfunction renderContent(viewRange, fw, fh, tx, ty) {\n const { draw, data } = this;\n draw.save();\n draw.translate(fw, fh)\n .translate(tx, ty);\n\n const { exceptRowSet } = data;\n // const exceptRows = Array.from(exceptRowSet);\n const filteredTranslateFunc = (ri) => {\n const ret = exceptRowSet.has(ri);\n if (ret) {\n const height = data.rows.getHeight(ri);\n draw.translate(0, -height);\n }\n return !ret;\n };\n\n const exceptRowTotalHeight = data.exceptRowTotalHeight(viewRange.sri, viewRange.eri);\n // 1 render cell\n draw.save();\n draw.translate(0, -exceptRowTotalHeight);\n viewRange.each((ri, ci) => {\n renderCell(draw, data, ri, ci);\n }, ri => filteredTranslateFunc(ri));\n draw.restore();\n\n\n // 2 render mergeCell\n const rset = new Set();\n draw.save();\n draw.translate(0, -exceptRowTotalHeight);\n data.eachMergesInView(viewRange, ({ sri, sci, eri }) => {\n if (!exceptRowSet.has(sri)) {\n renderCell(draw, data, sri, sci);\n } else if (!rset.has(sri)) {\n rset.add(sri);\n const height = data.rows.sumHeight(sri, eri + 1);\n draw.translate(0, -height);\n }\n });\n draw.restore();\n\n // 3 render autofilter\n renderAutofilter.call(this, viewRange);\n\n draw.restore();\n}\n\nfunction renderSelectedHeaderCell(x, y, w, h) {\n const { draw } = this;\n draw.save();\n draw.attr({ fillStyle: 'rgba(75, 137, 255, 0.08)' })\n .fillRect(x, y, w, h);\n draw.restore();\n}\n\n// viewRange\n// type: all | left | top\n// w: the fixed width of header\n// h: the fixed height of header\n// tx: moving distance on x-axis\n// ty: moving distance on y-axis\nfunction renderFixedHeaders(type, viewRange, w, h, tx, ty) {\n const { draw, data } = this;\n const sumHeight = viewRange.h; // rows.sumHeight(viewRange.sri, viewRange.eri + 1);\n const sumWidth = viewRange.w; // cols.sumWidth(viewRange.sci, viewRange.eci + 1);\n const nty = ty + h;\n const ntx = tx + w;\n\n draw.save();\n // draw rect background\n draw.attr(tableFixedHeaderCleanStyle);\n if (type === 'all' || type === 'left') draw.fillRect(0, nty, w, sumHeight);\n if (type === 'all' || type === 'top') draw.fillRect(ntx, 0, sumWidth, h);\n\n const {\n sri, sci, eri, eci,\n } = data.selector.range;\n // console.log(data.selectIndexes);\n // draw text\n // text font, align...\n draw.attr(tableFixedHeaderStyle());\n // y-header-text\n if (type === 'all' || type === 'left') {\n data.rowEach(viewRange.sri, viewRange.eri, (i, y1, rowHeight) => {\n const y = nty + y1;\n const ii = i;\n draw.line([0, y], [w, y]);\n if (sri <= ii && ii < eri + 1) {\n renderSelectedHeaderCell.call(this, 0, y, w, rowHeight);\n }\n draw.fillText(ii + 1, w / 2, y + (rowHeight / 2));\n if (i > 0 && data.rows.isHide(i - 1)) {\n draw.save();\n draw.attr({ strokeStyle: '#c6c6c6' });\n draw.line([5, y + 5], [w - 5, y + 5]);\n draw.restore();\n }\n });\n draw.line([0, sumHeight + nty], [w, sumHeight + nty]);\n draw.line([w, nty], [w, sumHeight + nty]);\n }\n // x-header-text\n if (type === 'all' || type === 'top') {\n data.colEach(viewRange.sci, viewRange.eci, (i, x1, colWidth) => {\n const x = ntx + x1;\n const ii = i;\n draw.line([x, 0], [x, h]);\n if (sci <= ii && ii < eci + 1) {\n renderSelectedHeaderCell.call(this, x, 0, colWidth, h);\n }\n draw.fillText(stringAt(ii), x + (colWidth / 2), h / 2);\n if (i > 0 && data.cols.isHide(i - 1)) {\n draw.save();\n draw.attr({ strokeStyle: '#c6c6c6' });\n draw.line([x + 5, 5], [x + 5, h - 5]);\n draw.restore();\n }\n });\n draw.line([sumWidth + ntx, 0], [sumWidth + ntx, h]);\n draw.line([0, h], [sumWidth + ntx, h]);\n }\n draw.restore();\n}\n\nfunction renderFixedLeftTopCell(fw, fh) {\n const { draw } = this;\n draw.save();\n // left-top-cell\n draw.attr({ fillStyle: '#f4f5f8' })\n .fillRect(0, 0, fw, fh);\n draw.restore();\n}\n\nfunction renderContentGrid({\n sri, sci, eri, eci, w, h,\n}, fw, fh, tx, ty) {\n const { draw, data } = this;\n const { settings } = data;\n\n draw.save();\n draw.attr(tableGridStyle)\n .translate(fw + tx, fh + ty);\n // const sumWidth = cols.sumWidth(sci, eci + 1);\n // const sumHeight = rows.sumHeight(sri, eri + 1);\n // console.log('sumWidth:', sumWidth);\n // draw.clearRect(0, 0, w, h);\n if (!settings.showGrid) {\n draw.restore();\n return;\n }\n // console.log('rowStart:', rowStart, ', rowLen:', rowLen);\n data.rowEach(sri, eri, (i, y, ch) => {\n // console.log('y:', y);\n if (i !== sri) draw.line([0, y], [w, y]);\n if (i === eri) draw.line([0, y + ch], [w, y + ch]);\n });\n data.colEach(sci, eci, (i, x, cw) => {\n if (i !== sci) draw.line([x, 0], [x, h]);\n if (i === eci) draw.line([x + cw, 0], [x + cw, h]);\n });\n draw.restore();\n}\n\nfunction renderFreezeHighlightLine(fw, fh, ftw, fth) {\n const { draw, data } = this;\n const twidth = data.viewWidth() - fw;\n const theight = data.viewHeight() - fh;\n draw.save()\n .translate(fw, fh)\n .attr({ strokeStyle: 'rgba(75, 137, 255, .6)' });\n draw.line([0, fth], [twidth, fth]);\n draw.line([ftw, 0], [ftw, theight]);\n draw.restore();\n}\n\n/** end */\nclass Table {\n constructor(el, data) {\n this.el = el;\n this.draw = new Draw(el, data.viewWidth(), data.viewHeight());\n this.data = data;\n }\n\n resetData(data) {\n this.data = data;\n this.render();\n }\n\n render() {\n // resize canvas\n const { data } = this;\n const { rows, cols } = data;\n // fixed width of header\n const fw = cols.indexWidth;\n // fixed height of header\n const fh = rows.height;\n\n this.draw.resize(data.viewWidth(), data.viewHeight());\n this.clear();\n\n const viewRange = data.viewRange();\n // renderAll.call(this, viewRange, data.scroll);\n const tx = data.freezeTotalWidth();\n const ty = data.freezeTotalHeight();\n const { x, y } = data.scroll;\n // 1\n renderContentGrid.call(this, viewRange, fw, fh, tx, ty);\n renderContent.call(this, viewRange, fw, fh, -x, -y);\n renderFixedHeaders.call(this, 'all', viewRange, fw, fh, tx, ty);\n renderFixedLeftTopCell.call(this, fw, fh);\n const [fri, fci] = data.freeze;\n if (fri > 0 || fci > 0) {\n // 2\n if (fri > 0) {\n const vr = viewRange.clone();\n vr.sri = 0;\n vr.eri = fri - 1;\n vr.h = ty;\n renderContentGrid.call(this, vr, fw, fh, tx, 0);\n renderContent.call(this, vr, fw, fh, -x, 0);\n renderFixedHeaders.call(this, 'top', vr, fw, fh, tx, 0);\n }\n // 3\n if (fci > 0) {\n const vr = viewRange.clone();\n vr.sci = 0;\n vr.eci = fci - 1;\n vr.w = tx;\n renderContentGrid.call(this, vr, fw, fh, 0, ty);\n renderFixedHeaders.call(this, 'left', vr, fw, fh, 0, ty);\n renderContent.call(this, vr, fw, fh, 0, -y);\n }\n // 4\n const freezeViewRange = data.freezeViewRange();\n renderContentGrid.call(this, freezeViewRange, fw, fh, 0, 0);\n renderFixedHeaders.call(this, 'all', freezeViewRange, fw, fh, 0, 0);\n renderContent.call(this, freezeViewRange, fw, fh, 0, 0);\n // 5\n renderFreezeHighlightLine.call(this, fw, fh, tx, ty);\n }\n }\n\n clear() {\n this.draw.clear();\n }\n}\n\nexport default Table;\n","/* global window document */\nimport { h } from './element';\nimport { cssPrefix } from '../config';\nimport Button from './button';\nimport { Draw } from '../canvas/draw';\nimport { renderCell } from './table';\nimport { t } from '../locale/locale';\n\n// resolution: 72 => 595 x 842\n// 150 => 1240 x 1754\n// 200 => 1654 x 2339\n// 300 => 2479 x 3508\n// 96 * cm / 2.54 , 96 * cm / 2.54\n\nconst PAGER_SIZES = [\n ['A3', 11.69, 16.54],\n ['A4', 8.27, 11.69],\n ['A5', 5.83, 8.27],\n ['B4', 9.84, 13.90],\n ['B5', 6.93, 9.84],\n];\n\nconst PAGER_ORIENTATIONS = ['landscape', 'portrait'];\n\nfunction inches2px(inc) {\n return parseInt(96 * inc, 10);\n}\n\nfunction btnClick(type) {\n if (type === 'cancel') {\n this.el.hide();\n } else {\n this.toPrint();\n }\n}\n\nfunction pagerSizeChange(evt) {\n const { paper } = this;\n const { value } = evt.target;\n const ps = PAGER_SIZES[value];\n paper.w = inches2px(ps[1]);\n paper.h = inches2px(ps[2]);\n // console.log('paper:', ps, paper);\n this.preview();\n}\nfunction pagerOrientationChange(evt) {\n const { paper } = this;\n const { value } = evt.target;\n const v = PAGER_ORIENTATIONS[value];\n paper.orientation = v;\n this.preview();\n}\n\nexport default class Print {\n constructor(data) {\n this.paper = {\n w: inches2px(PAGER_SIZES[0][1]),\n h: inches2px(PAGER_SIZES[0][2]),\n padding: 50,\n orientation: PAGER_ORIENTATIONS[0],\n get width() {\n return this.orientation === 'landscape' ? this.h : this.w;\n },\n get height() {\n return this.orientation === 'landscape' ? this.w : this.h;\n },\n };\n this.data = data;\n this.el = h('div', `${cssPrefix}-print`)\n .children(\n h('div', `${cssPrefix}-print-bar`)\n .children(\n h('div', '-title').child('Print settings'),\n h('div', '-right').children(\n h('div', `${cssPrefix}-buttons`).children(\n new Button('cancel').on('click', btnClick.bind(this, 'cancel')),\n new Button('next', 'primary').on('click', btnClick.bind(this, 'next')),\n ),\n ),\n ),\n h('div', `${cssPrefix}-print-content`)\n .children(\n this.contentEl = h('div', '-content'),\n h('div', '-sider').child(\n h('form', '').children(\n h('fieldset', '').children(\n h('label', '').child(`${t('print.size')}`),\n h('select', '').children(\n ...PAGER_SIZES.map((it, index) => h('option', '').attr('value', index).child(`${it[0]} ( ${it[1]}''x${it[2]}'' )`)),\n ).on('change', pagerSizeChange.bind(this)),\n ),\n h('fieldset', '').children(\n h('label', '').child(`${t('print.orientation')}`),\n h('select', '').children(\n ...PAGER_ORIENTATIONS.map((it, index) => h('option', '').attr('value', index).child(`${t('print.orientations')[index]}`)),\n ).on('change', pagerOrientationChange.bind(this)),\n ),\n ),\n ),\n ),\n ).hide();\n }\n\n resetData(data) {\n this.data = data;\n }\n\n preview() {\n const { data, paper } = this;\n const { width, height, padding } = paper;\n const iwidth = width - padding * 2;\n const iheight = height - padding * 2;\n const cr = data.contentRange();\n const pages = parseInt(cr.h / iheight, 10) + 1;\n const scale = iwidth / cr.w;\n let left = padding;\n const top = padding;\n if (scale > 1) {\n left += (iwidth - cr.w) / 2;\n }\n let ri = 0;\n let yoffset = 0;\n this.contentEl.html('');\n this.canvases = [];\n const mViewRange = {\n sri: 0,\n sci: 0,\n eri: 0,\n eci: 0,\n };\n for (let i = 0; i < pages; i += 1) {\n let th = 0;\n let yo = 0;\n const wrap = h('div', `${cssPrefix}-canvas-card`);\n const canvas = h('canvas', `${cssPrefix}-canvas`);\n this.canvases.push(canvas.el);\n const draw = new Draw(canvas.el, width, height);\n // cell-content\n draw.save();\n draw.translate(left, top);\n if (scale < 1) draw.scale(scale, scale);\n // console.log('ri:', ri, cr.eri, yoffset);\n for (; ri <= cr.eri; ri += 1) {\n const rh = data.rows.getHeight(ri);\n th += rh;\n if (th < iheight) {\n for (let ci = 0; ci <= cr.eci; ci += 1) {\n renderCell(draw, data, ri, ci, yoffset);\n mViewRange.eci = ci;\n }\n } else {\n yo = -(th - rh);\n break;\n }\n }\n mViewRange.eri = ri;\n draw.restore();\n // merge-cell\n draw.save();\n draw.translate(left, top);\n if (scale < 1) draw.scale(scale, scale);\n const yof = yoffset;\n data.eachMergesInView(mViewRange, ({ sri, sci }) => {\n renderCell(draw, data, sri, sci, yof);\n });\n draw.restore();\n\n mViewRange.sri = mViewRange.eri;\n mViewRange.sci = mViewRange.eci;\n yoffset += yo;\n this.contentEl.child(h('div', `${cssPrefix}-canvas-card-wraper`).child(wrap.child(canvas)));\n }\n this.el.show();\n }\n\n toPrint() {\n this.el.hide();\n const { paper } = this;\n const iframe = h('iframe', '').hide();\n const { el } = iframe;\n window.document.body.appendChild(el);\n const { contentWindow } = el;\n const idoc = contentWindow.document;\n const style = document.createElement('style');\n style.innerHTML = `\n @page { size: ${paper.width}px ${paper.height}px; };\n canvas {\n page-break-before: auto; \n page-break-after: always;\n image-rendering: pixelated;\n };\n `;\n idoc.head.appendChild(style);\n this.canvases.forEach((it) => {\n const cn = it.cloneNode(false);\n const ctx = cn.getContext('2d');\n // ctx.imageSmoothingEnabled = true;\n ctx.drawImage(it, 0, 0);\n idoc.body.appendChild(cn);\n });\n contentWindow.print();\n }\n}\n","import { h } from './element';\nimport { bindClickoutside, unbindClickoutside } from './event';\nimport { cssPrefix } from '../config';\nimport { tf } from '../locale/locale';\n\nconst menuItems = [\n { key: 'copy', title: tf('contextmenu.copy'), label: 'Ctrl+C' },\n { key: 'cut', title: tf('contextmenu.cut'), label: 'Ctrl+X' },\n { key: 'paste', title: tf('contextmenu.paste'), label: 'Ctrl+V' },\n { key: 'paste-value', title: tf('contextmenu.pasteValue'), label: 'Ctrl+Shift+V' },\n { key: 'paste-format', title: tf('contextmenu.pasteFormat'), label: 'Ctrl+Alt+V' },\n { key: 'divider' },\n { key: 'insert-row', title: tf('contextmenu.insertRow') },\n { key: 'insert-column', title: tf('contextmenu.insertColumn') },\n { key: 'divider' },\n { key: 'delete-row', title: tf('contextmenu.deleteRow') },\n { key: 'delete-column', title: tf('contextmenu.deleteColumn') },\n { key: 'delete-cell-text', title: tf('contextmenu.deleteCellText') },\n { key: 'hide', title: tf('contextmenu.hide') },\n { key: 'divider' },\n { key: 'validation', title: tf('contextmenu.validation') },\n { key: 'divider' },\n { key: 'cell-printable', title: tf('contextmenu.cellprintable') },\n { key: 'cell-non-printable', title: tf('contextmenu.cellnonprintable') },\n { key: 'divider' },\n { key: 'cell-editable', title: tf('contextmenu.celleditable') },\n { key: 'cell-non-editable', title: tf('contextmenu.cellnoneditable') },\n];\n\nfunction buildMenuItem(item) {\n if (item.key === 'divider') {\n return h('div', `${cssPrefix}-item divider`);\n }\n return h('div', `${cssPrefix}-item`)\n .on('click', () => {\n this.itemClick(item.key);\n this.hide();\n })\n .children(\n item.title(),\n h('div', 'label').child(item.label || ''),\n );\n}\n\nfunction buildMenu() {\n return menuItems.map(it => buildMenuItem.call(this, it));\n}\n\nexport default class ContextMenu {\n constructor(viewFn, isHide = false) {\n this.menuItems = buildMenu.call(this);\n this.el = h('div', `${cssPrefix}-contextmenu`)\n .children(...this.menuItems)\n .hide();\n this.viewFn = viewFn;\n this.itemClick = () => {};\n this.isHide = isHide;\n this.setMode('range');\n }\n\n // row-col: the whole rows or the whole cols\n // range: select range\n setMode(mode) {\n const hideEl = this.menuItems[12];\n if (mode === 'row-col') {\n hideEl.show();\n } else {\n hideEl.hide();\n }\n }\n\n hide() {\n const { el } = this;\n el.hide();\n unbindClickoutside(el);\n }\n\n setPosition(x, y) {\n if (this.isHide) return;\n const { el } = this;\n const { width } = el.show().offset();\n const view = this.viewFn();\n const vhf = view.height / 2;\n let left = x;\n if (view.width - x <= width) {\n left -= width;\n }\n el.css('left', `${left}px`);\n if (y > vhf) {\n el.css('bottom', `${view.height - y}px`)\n .css('max-height', `${y}px`)\n .css('top', 'auto');\n } else {\n el.css('top', `${y}px`)\n .css('max-height', `${view.height - y}px`)\n .css('bottom', 'auto');\n }\n bindClickoutside(el);\n }\n}\n","/* global document */\nimport { h } from './element';\nimport { bind } from './event';\nimport { cssPrefix } from '../config';\n\nexport default function tooltip(html, target) {\n if (target.classList.contains('active')) {\n return;\n }\n const {\n left, top, width, height,\n } = target.getBoundingClientRect();\n const el = h('div', `${cssPrefix}-tooltip`).html(html).show();\n document.body.appendChild(el.el);\n const elBox = el.box();\n // console.log('elBox:', elBox);\n el.css('left', `${left + (width / 2) - (elBox.width / 2)}px`)\n .css('top', `${top + height + 2}px`);\n\n bind(target, 'mouseleave', () => {\n if (document.body.contains(el.el)) {\n document.body.removeChild(el.el);\n }\n });\n\n bind(target, 'click', () => {\n if (document.body.contains(el.el)) {\n document.body.removeChild(el.el);\n }\n });\n}\n","import { cssPrefix } from '../../config';\nimport tooltip from '../tooltip';\nimport { h } from '../element';\nimport { t } from '../../locale/locale';\n\nexport default class Item {\n // tooltip\n // tag: the subclass type\n // shortcut: shortcut key\n constructor(tag, shortcut, value) {\n this.tip = t(`toolbar.${tag.replace(/-[a-z]/g, c => c[1].toUpperCase())}`);\n if (shortcut) this.tip += ` (${shortcut})`;\n this.tag = tag;\n this.shortcut = shortcut;\n this.value = value;\n this.el = this.element();\n this.change = () => {};\n }\n\n element() {\n const { tip } = this;\n return h('div', `${cssPrefix}-toolbar-btn`)\n .on('mouseenter', (evt) => {\n tooltip(tip, evt.target);\n })\n .attr('data-tooltip', tip);\n }\n\n setState() {}\n}\n","import Item from './item';\n\nexport default class DropdownItem extends Item {\n dropdown() {}\n\n getValue(v) {\n return v;\n }\n\n element() {\n const { tag } = this;\n this.dd = this.dropdown();\n this.dd.change = it => this.change(tag, this.getValue(it));\n return super.element().child(\n this.dd,\n );\n }\n\n setState(v) {\n if (v) {\n this.value = v;\n this.dd.setTitle(v);\n }\n }\n}\n","import { Element, h } from './element';\nimport { bindClickoutside, unbindClickoutside } from './event';\nimport { cssPrefix } from '../config';\n\nexport default class Dropdown extends Element {\n constructor(title, width, showArrow, placement, ...children) {\n super('div', `${cssPrefix}-dropdown ${placement}`);\n this.title = title;\n this.change = () => {};\n this.headerClick = () => {};\n if (typeof title === 'string') {\n this.title = h('div', `${cssPrefix}-dropdown-title`).child(title);\n } else if (showArrow) {\n this.title.addClass('arrow-left');\n }\n this.contentEl = h('div', `${cssPrefix}-dropdown-content`)\n .css('width', width)\n .hide();\n\n this.setContentChildren(...children);\n\n this.headerEl = h('div', `${cssPrefix}-dropdown-header`);\n this.headerEl.on('click', () => {\n if (this.contentEl.css('display') !== 'block') {\n this.show();\n } else {\n this.hide();\n }\n }).children(\n this.title,\n showArrow ? h('div', `${cssPrefix}-icon arrow-right`).child(\n h('div', `${cssPrefix}-icon-img arrow-down`),\n ) : '',\n );\n this.children(this.headerEl, this.contentEl);\n }\n\n setContentChildren(...children) {\n this.contentEl.html('');\n if (children.length > 0) {\n this.contentEl.children(...children);\n }\n }\n\n setTitle(title) {\n this.title.html(title);\n this.hide();\n }\n\n show() {\n const { contentEl } = this;\n contentEl.show();\n this.parent().active();\n bindClickoutside(this.parent(), () => {\n this.hide();\n });\n }\n\n hide() {\n this.parent().active(false);\n this.contentEl.hide();\n unbindClickoutside(this.parent());\n }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport Icon from './icon';\nimport { cssPrefix } from '../config';\n\nfunction buildItemWithIcon(iconName) {\n return h('div', `${cssPrefix}-item`).child(new Icon(iconName));\n}\n\nexport default class DropdownAlign extends Dropdown {\n constructor(aligns, align) {\n const icon = new Icon(`align-${align}`);\n const naligns = aligns.map(it => buildItemWithIcon(`align-${it}`)\n .on('click', () => {\n this.setTitle(it);\n this.change(it);\n }));\n super(icon, 'auto', true, 'bottom-left', ...naligns);\n }\n\n setTitle(align) {\n this.title.setName(`align-${align}`);\n this.hide();\n }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownAlign from '../dropdown_align';\n\nexport default class Align extends DropdownItem {\n constructor(value) {\n super('align', '', value);\n }\n\n dropdown() {\n const { value } = this;\n return new DropdownAlign(['left', 'center', 'right'], value);\n }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownAlign from '../dropdown_align';\n\nexport default class Valign extends DropdownItem {\n constructor(value) {\n super('valign', '', value);\n }\n\n dropdown() {\n const { value } = this;\n return new DropdownAlign(['top', 'middle', 'bottom'], value);\n }\n}\n","import Item from './item';\nimport Icon from '../icon';\n\nexport default class ToggleItem extends Item {\n element() {\n const { tag } = this;\n return super.element()\n .child(new Icon(tag))\n .on('click', () => this.click());\n }\n\n click() {\n this.change(this.tag, this.toggle());\n }\n\n setState(active) {\n this.el.active(active);\n }\n\n toggle() {\n return this.el.toggle();\n }\n\n active() {\n return this.el.hasClass('active');\n }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Autofilter extends ToggleItem {\n constructor() {\n super('autofilter');\n }\n\n setState() {}\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Bold extends ToggleItem {\n constructor() {\n super('font-bold', 'Ctrl+B');\n }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Italic extends ToggleItem {\n constructor() {\n super('font-italic', 'Ctrl+I');\n }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Strike extends ToggleItem {\n constructor() {\n super('strike', 'Ctrl+U');\n }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Underline extends ToggleItem {\n constructor() {\n super('underline', 'Ctrl+U');\n }\n}\n","import { h } from './element';\nimport { cssPrefix } from '../config';\n\nconst themeColorPlaceHolders = ['#ffffff', '#000100', '#e7e5e6', '#445569', '#5b9cd6', '#ed7d31', '#a5a5a5', '#ffc001', '#4371c6', '#71ae47'];\n\nconst themeColors = [\n ['#f2f2f2', '#7f7f7f', '#d0cecf', '#d5dce4', '#deeaf6', '#fce5d5', '#ededed', '#fff2cd', '#d9e2f3', '#e3efd9'],\n ['#d8d8d8', '#595959', '#afabac', '#adb8ca', '#bdd7ee', '#f7ccac', '#dbdbdb', '#ffe59a', '#b3c6e7', '#c5e0b3'],\n ['#bfbfbf', '#3f3f3f', '#756f6f', '#8596b0', '#9cc2e6', '#f4b184', '#c9c9c9', '#fed964', '#8eaada', '#a7d08c'],\n ['#a5a5a5', '#262626', '#3a3839', '#333f4f', '#2e75b5', '#c45a10', '#7b7b7b', '#bf8e01', '#2f5596', '#538136'],\n ['#7f7f7f', '#0c0c0c', '#171516', '#222a35', '#1f4e7a', '#843c0a', '#525252', '#7e6000', '#203864', '#365624'],\n];\n\nconst standardColors = ['#c00000', '#fe0000', '#fdc101', '#ffff01', '#93d051', '#00b04e', '#01b0f1', '#0170c1', '#012060', '#7030a0'];\n\nfunction buildTd(bgcolor) {\n return h('td', '').child(\n h('div', `${cssPrefix}-color-palette-cell`)\n .on('click.stop', () => this.change(bgcolor))\n .css('background-color', bgcolor),\n );\n}\n\nexport default class ColorPalette {\n constructor() {\n this.el = h('div', `${cssPrefix}-color-palette`);\n this.change = () => {};\n const table = h('table', '').children(\n h('tbody', '').children(\n h('tr', `${cssPrefix}-theme-color-placeholders`).children(\n ...themeColorPlaceHolders.map(color => buildTd.call(this, color)),\n ),\n ...themeColors.map(it => h('tr', `${cssPrefix}-theme-colors`).children(\n ...it.map(color => buildTd.call(this, color)),\n )),\n h('tr', `${cssPrefix}-standard-colors`).children(\n ...standardColors.map(color => buildTd.call(this, color)),\n ),\n ),\n );\n this.el.child(table);\n }\n}\n","import Dropdown from './dropdown';\nimport Icon from './icon';\nimport ColorPalette from './color_palette';\n\nexport default class DropdownColor extends Dropdown {\n constructor(iconName, color) {\n const icon = new Icon(iconName)\n .css('height', '16px')\n .css('border-bottom', `3px solid ${color}`);\n const colorPalette = new ColorPalette();\n colorPalette.change = (v) => {\n this.setTitle(v);\n this.change(v);\n };\n super(icon, 'auto', false, 'bottom-left', colorPalette.el);\n }\n\n setTitle(color) {\n this.title.css('border-color', color);\n this.hide();\n }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport Icon from './icon';\nimport { cssPrefix } from '../config';\n\nconst lineTypes = [\n ['thin', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"1\" style=\"user-select: none;\"><line x1=\"0\" y1=\"0.5\" x2=\"50\" y2=\"0.5\" stroke-width=\"1\" stroke=\"black\" style=\"user-select: none;\"></line></svg>'],\n ['medium', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"2\" style=\"user-select: none;\"><line x1=\"0\" y1=\"1.0\" x2=\"50\" y2=\"1.0\" stroke-width=\"2\" stroke=\"black\" style=\"user-select: none;\"></line></svg>'],\n ['thick', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"3\" style=\"user-select: none;\"><line x1=\"0\" y1=\"1.5\" x2=\"50\" y2=\"1.5\" stroke-width=\"3\" stroke=\"black\" style=\"user-select: none;\"></line></svg>'],\n ['dashed', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"1\" style=\"user-select: none;\"><line x1=\"0\" y1=\"0.5\" x2=\"50\" y2=\"0.5\" stroke-width=\"1\" stroke=\"black\" stroke-dasharray=\"2\" style=\"user-select: none;\"></line></svg>'],\n ['dotted', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"1\" style=\"user-select: none;\"><line x1=\"0\" y1=\"0.5\" x2=\"50\" y2=\"0.5\" stroke-width=\"1\" stroke=\"black\" stroke-dasharray=\"1\" style=\"user-select: none;\"></line></svg>'],\n // ['double', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"3\" style=\"user-select: none;\"><line x1=\"0\" y1=\"0.5\" x2=\"50\" y2=\"0.5\" stroke-width=\"1\" stroke=\"black\" style=\"user-select: none;\"></line><line x1=\"0\" y1=\"2.5\" x2=\"50\" y2=\"2.5\" stroke-width=\"1\" stroke=\"black\" style=\"user-select: none;\"></line></svg>'],\n];\n\nexport default class DropdownLineType extends Dropdown {\n constructor(type) {\n const icon = new Icon('line-type');\n let beforei = 0;\n const lineTypeEls = lineTypes.map((it, iti) => h('div', `${cssPrefix}-item state ${type === it[0] ? 'checked' : ''}`)\n .on('click', () => {\n lineTypeEls[beforei].toggle('checked');\n lineTypeEls[iti].toggle('checked');\n beforei = iti;\n this.hide();\n this.change(it);\n })\n .child(\n h('div', `${cssPrefix}-line-type`).html(it[1]),\n ));\n\n super(icon, 'auto', false, 'bottom-left', ...lineTypeEls);\n }\n}\n","import { h } from './element';\nimport Icon from './icon';\nimport DropdownColor from './dropdown_color';\nimport DropdownLineType from './dropdown_linetype';\nimport { cssPrefix } from '../config';\n\nfunction buildTable(...trs) {\n return h('table', '').child(\n h('tbody', '').children(...trs),\n );\n}\n\nfunction buildTd(iconName) {\n return h('td', '').child(\n h('div', `${cssPrefix}-border-palette-cell`).child(\n new Icon(`border-${iconName}`),\n ).on('click', () => {\n this.mode = iconName;\n const { mode, style, color } = this;\n this.change({ mode, style, color });\n }),\n );\n}\n\nexport default class BorderPalette {\n constructor() {\n this.color = '#000';\n this.style = 'thin';\n this.mode = 'all';\n this.change = () => {};\n this.ddColor = new DropdownColor('line-color', this.color);\n this.ddColor.change = (color) => {\n this.color = color;\n };\n this.ddType = new DropdownLineType(this.style);\n this.ddType.change = ([s]) => {\n this.style = s;\n };\n this.el = h('div', `${cssPrefix}-border-palette`);\n const table = buildTable(\n h('tr', '').children(\n h('td', `${cssPrefix}-border-palette-left`).child(\n buildTable(\n h('tr', '').children(\n ...['all', 'inside', 'horizontal', 'vertical', 'outside'].map(it => buildTd.call(this, it)),\n ),\n h('tr', '').children(\n ...['left', 'top', 'right', 'bottom', 'none'].map(it => buildTd.call(this, it)),\n ),\n ),\n ),\n h('td', `${cssPrefix}-border-palette-right`).children(\n h('div', `${cssPrefix}-toolbar-btn`).child(this.ddColor.el),\n h('div', `${cssPrefix}-toolbar-btn`).child(this.ddType.el),\n ),\n ),\n );\n this.el.child(table);\n }\n}\n","import Dropdown from './dropdown';\nimport Icon from './icon';\nimport BorderPalette from './border_palette';\n\nexport default class DropdownBorder extends Dropdown {\n constructor() {\n const icon = new Icon('border-all');\n const borderPalette = new BorderPalette();\n borderPalette.change = (v) => {\n this.change(v);\n this.hide();\n };\n super(icon, 'auto', false, 'bottom-left', borderPalette.el);\n }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownBorder from '../dropdown_border';\n\nexport default class Border extends DropdownItem {\n constructor() {\n super('border');\n }\n\n dropdown() {\n return new DropdownBorder();\n }\n}\n","import Item from './item';\nimport Icon from '../icon';\n\nexport default class IconItem extends Item {\n element() {\n return super.element()\n .child(new Icon(this.tag))\n .on('click', () => this.change(this.tag));\n }\n\n setState(disabled) {\n this.el.disabled(disabled);\n }\n}\n","import IconItem from './icon_item';\n\nexport default class Clearformat extends IconItem {\n constructor() {\n super('clearformat');\n }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Paintformat extends ToggleItem {\n constructor() {\n super('paintformat');\n }\n\n setState() {}\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownColor from '../dropdown_color';\n\nexport default class TextColor extends DropdownItem {\n constructor(color) {\n super('color', undefined, color);\n }\n\n dropdown() {\n const { tag, value } = this;\n return new DropdownColor(tag, value);\n }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownColor from '../dropdown_color';\n\nexport default class FillColor extends DropdownItem {\n constructor(color) {\n super('bgcolor', undefined, color);\n }\n\n dropdown() {\n const { tag, value } = this;\n return new DropdownColor(tag, value);\n }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport { fontSizes } from '../core/font';\nimport { cssPrefix } from '../config';\n\nexport default class DropdownFontSize extends Dropdown {\n constructor() {\n const nfontSizes = fontSizes.map(it => h('div', `${cssPrefix}-item`)\n .on('click', () => {\n this.setTitle(`${it.pt}`);\n this.change(it);\n })\n .child(`${it.pt}`));\n super('10', '60px', true, 'bottom-left', ...nfontSizes);\n }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownFontsize from '../dropdown_fontsize';\n\nexport default class Format extends DropdownItem {\n constructor() {\n super('font-size');\n }\n\n getValue(it) {\n return it.pt;\n }\n\n dropdown() {\n return new DropdownFontsize();\n }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport { baseFonts } from '../core/font';\nimport { cssPrefix } from '../config';\n\nexport default class DropdownFont extends Dropdown {\n constructor() {\n const nfonts = baseFonts.map(it => h('div', `${cssPrefix}-item`)\n .on('click', () => {\n this.setTitle(it.title);\n this.change(it);\n })\n .child(it.title));\n super(baseFonts[0].title, '160px', true, 'bottom-left', ...nfonts);\n }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownFont from '../dropdown_font';\n\nexport default class Font extends DropdownItem {\n constructor() {\n super('font-name');\n }\n\n getValue(it) {\n return it.key;\n }\n\n dropdown() {\n return new DropdownFont();\n }\n}\n","import Dropdown from './dropdown';\nimport { h } from './element';\nimport { baseFormats } from '../core/format';\nimport { cssPrefix } from '../config';\n\nexport default class DropdownFormat extends Dropdown {\n constructor() {\n let nformats = baseFormats.slice(0);\n nformats.splice(2, 0, { key: 'divider' });\n nformats.splice(8, 0, { key: 'divider' });\n nformats = nformats.map((it) => {\n const item = h('div', `${cssPrefix}-item`);\n if (it.key === 'divider') {\n item.addClass('divider');\n } else {\n item.child(it.title())\n .on('click', () => {\n this.setTitle(it.title());\n this.change(it);\n });\n if (it.label) item.child(h('div', 'label').html(it.label));\n }\n return item;\n });\n super('Normal', '220px', true, 'bottom-left', ...nformats);\n }\n\n setTitle(key) {\n for (let i = 0; i < baseFormats.length; i += 1) {\n if (baseFormats[i].key === key) {\n this.title.html(baseFormats[i].title());\n }\n }\n this.hide();\n }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownFormat from '../dropdown_format';\n\nexport default class Format extends DropdownItem {\n constructor() {\n super('format');\n }\n\n getValue(it) {\n return it.key;\n }\n\n dropdown() {\n return new DropdownFormat();\n }\n}\n","import Dropdown from './dropdown';\nimport Icon from './icon';\nimport { h } from './element';\nimport { baseFormulas } from '../core/formula';\nimport { cssPrefix } from '../config';\n\nexport default class DropdownFormula extends Dropdown {\n constructor() {\n const nformulas = baseFormulas.map(it => h('div', `${cssPrefix}-item`)\n .on('click', () => {\n this.hide();\n this.change(it);\n })\n .child(it.key));\n super(new Icon('formula'), '180px', true, 'bottom-left', ...nformulas);\n }\n}\n","import DropdownItem from './dropdown_item';\nimport DropdownFormula from '../dropdown_formula';\n\nexport default class Format extends DropdownItem {\n constructor() {\n super('formula');\n }\n\n getValue(it) {\n return it.key;\n }\n\n dropdown() {\n return new DropdownFormula();\n }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Freeze extends ToggleItem {\n constructor() {\n super('freeze');\n }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Merge extends ToggleItem {\n constructor() {\n super('merge');\n }\n\n setState(active, disabled) {\n this.el.active(active).disabled(disabled);\n }\n}\n","import IconItem from './icon_item';\n\nexport default class Redo extends IconItem {\n constructor() {\n super('redo', 'Ctrl+Y');\n }\n}\n","import IconItem from './icon_item';\n\nexport default class Undo extends IconItem {\n constructor() {\n super('undo', 'Ctrl+Z');\n }\n}\n","import IconItem from './icon_item';\n\nexport default class Print extends IconItem {\n constructor() {\n super('print', 'Ctrl+P');\n }\n}\n","import ToggleItem from './toggle_item';\n\nexport default class Textwrap extends ToggleItem {\n constructor() {\n super('textwrap');\n }\n}\n","import Dropdown from '../dropdown';\nimport DropdownItem from './dropdown_item';\n\nimport { cssPrefix } from '../../config';\nimport { h } from '../element';\nimport Icon from '../icon';\n\nclass DropdownMore extends Dropdown {\n constructor() {\n const icon = new Icon('ellipsis');\n const moreBtns = h('div', `${cssPrefix}-toolbar-more`);\n super(icon, 'auto', false, 'bottom-right', moreBtns);\n this.moreBtns = moreBtns;\n this.contentEl.css('max-width', '420px');\n }\n}\n\nexport default class More extends DropdownItem {\n constructor() {\n super('more');\n this.el.hide();\n }\n\n dropdown() {\n return new DropdownMore();\n }\n\n show() {\n this.el.show();\n }\n\n hide() {\n this.el.hide();\n }\n}\n","/* global window */\n\nimport Align from './align';\nimport Valign from './valign';\nimport Autofilter from './autofilter';\nimport Bold from './bold';\nimport Italic from './italic';\nimport Strike from './strike';\nimport Underline from './underline';\nimport Border from './border';\nimport Clearformat from './clearformat';\nimport Paintformat from './paintformat';\nimport TextColor from './text_color';\nimport FillColor from './fill_color';\nimport FontSize from './font_size';\nimport Font from './font';\nimport Format from './format';\nimport Formula from './formula';\nimport Freeze from './freeze';\nimport Merge from './merge';\nimport Redo from './redo';\nimport Undo from './undo';\nimport Print from './print';\nimport Textwrap from './textwrap';\nimport More from './more';\n\nimport { h } from '../element';\nimport { cssPrefix } from '../../config';\nimport { bind } from '../event';\n\nfunction buildDivider() {\n return h('div', `${cssPrefix}-toolbar-divider`);\n}\n\nfunction initBtns2() {\n this.btns2 = [];\n this.items.forEach((it) => {\n if (Array.isArray(it)) {\n it.forEach(({ el }) => {\n const rect = el.box();\n const { marginLeft, marginRight } = el.computedStyle();\n this.btns2.push([el, rect.width + parseInt(marginLeft, 10) + parseInt(marginRight, 10)]);\n });\n } else {\n const rect = it.box();\n const { marginLeft, marginRight } = it.computedStyle();\n this.btns2.push([it, rect.width + parseInt(marginLeft, 10) + parseInt(marginRight, 10)]);\n }\n });\n}\n\nfunction moreResize() {\n const {\n el, btns, moreEl, btns2,\n } = this;\n const { moreBtns, contentEl } = moreEl.dd;\n el.css('width', `${this.widthFn() - 60}px`);\n const elBox = el.box();\n\n let sumWidth = 160;\n let sumWidth2 = 12;\n const list1 = [];\n const list2 = [];\n btns2.forEach(([it, w], index) => {\n sumWidth += w;\n if (index === btns2.length - 1 || sumWidth < elBox.width) {\n list1.push(it);\n } else {\n sumWidth2 += w;\n list2.push(it);\n }\n });\n btns.html('').children(...list1);\n moreBtns.html('').children(...list2);\n contentEl.css('width', `${sumWidth2}px`);\n if (list2.length > 0) {\n moreEl.show();\n } else {\n moreEl.hide();\n }\n}\n\nexport default class Toolbar {\n constructor(data, widthFn, isHide = false) {\n this.data = data;\n this.change = () => {};\n this.widthFn = widthFn;\n this.isHide = isHide;\n const style = data.defaultStyle();\n this.items = [\n [\n this.undoEl = new Undo(),\n this.redoEl = new Redo(),\n new Print(),\n this.paintformatEl = new Paintformat(),\n this.clearformatEl = new Clearformat(),\n ],\n buildDivider(),\n [\n this.formatEl = new Format(),\n ],\n buildDivider(),\n [\n this.fontEl = new Font(),\n this.fontSizeEl = new FontSize(),\n ],\n buildDivider(),\n [\n this.boldEl = new Bold(),\n this.italicEl = new Italic(),\n this.underlineEl = new Underline(),\n this.strikeEl = new Strike(),\n this.textColorEl = new TextColor(style.color),\n ],\n buildDivider(),\n [\n this.fillColorEl = new FillColor(style.bgcolor),\n this.borderEl = new Border(),\n this.mergeEl = new Merge(),\n ],\n buildDivider(),\n [\n this.alignEl = new Align(style.align),\n this.valignEl = new Valign(style.valign),\n this.textwrapEl = new Textwrap(),\n ],\n buildDivider(),\n [\n this.freezeEl = new Freeze(),\n this.autofilterEl = new Autofilter(),\n this.formulaEl = new Formula(),\n this.moreEl = new More(),\n ],\n ];\n\n this.el = h('div', `${cssPrefix}-toolbar`);\n this.btns = h('div', `${cssPrefix}-toolbar-btns`);\n\n this.items.forEach((it) => {\n if (Array.isArray(it)) {\n it.forEach((i) => {\n this.btns.child(i.el);\n i.change = (...args) => {\n this.change(...args);\n };\n });\n } else {\n this.btns.child(it.el);\n }\n });\n\n this.el.child(this.btns);\n if (isHide) {\n this.el.hide();\n } else {\n this.reset();\n setTimeout(() => {\n initBtns2.call(this);\n moreResize.call(this);\n }, 0);\n bind(window, 'resize', () => {\n moreResize.call(this);\n });\n }\n }\n\n paintformatActive() {\n return this.paintformatEl.active();\n }\n\n paintformatToggle() {\n this.paintformatEl.toggle();\n }\n\n trigger(type) {\n this[`${type}El`].click();\n }\n\n resetData(data) {\n this.data = data;\n this.reset();\n }\n\n reset() {\n if (this.isHide) return;\n const { data } = this;\n const style = data.getSelectedCellStyle();\n // console.log('canUndo:', data.canUndo());\n this.undoEl.setState(!data.canUndo());\n this.redoEl.setState(!data.canRedo());\n this.mergeEl.setState(data.canUnmerge(), !data.selector.multiple());\n this.autofilterEl.setState(!data.canAutofilter());\n // this.mergeEl.disabled();\n // console.log('selectedCell:', style, cell);\n const { font, format } = style;\n this.formatEl.setState(format);\n this.fontEl.setState(font.name);\n this.fontSizeEl.setState(font.size);\n this.boldEl.setState(font.bold);\n this.italicEl.setState(font.italic);\n this.underlineEl.setState(style.underline);\n this.strikeEl.setState(style.strike);\n this.textColorEl.setState(style.color);\n this.fillColorEl.setState(style.bgcolor);\n this.alignEl.setState(style.align);\n this.valignEl.setState(style.valign);\n this.textwrapEl.setState(style.textwrap);\n // console.log('freeze is Active:', data.freezeIsActive());\n this.freezeEl.setState(data.freezeIsActive());\n }\n}\n","/* global document */\n/* global window */\nimport { h } from './element';\nimport Icon from './icon';\nimport { cssPrefix } from '../config';\nimport { bind, unbind } from './event';\n\nexport default class Modal {\n constructor(title, content, width = '600px') {\n this.title = title;\n this.el = h('div', `${cssPrefix}-modal`).css('width', width).children(\n h('div', `${cssPrefix}-modal-header`).children(\n new Icon('close').on('click.stop', () => this.hide()),\n this.title,\n ),\n h('div', `${cssPrefix}-modal-content`).children(...content),\n ).hide();\n }\n\n show() {\n // dimmer\n this.dimmer = h('div', `${cssPrefix}-dimmer active`);\n document.body.appendChild(this.dimmer.el);\n const { width, height } = this.el.show().box();\n const { clientHeight, clientWidth } = document.documentElement;\n this.el.offset({\n left: (clientWidth - width) / 2,\n top: (clientHeight - height) / 3,\n });\n window.xkeydownEsc = (evt) => {\n if (evt.keyCode === 27) {\n this.hide();\n }\n };\n bind(window, 'keydown', window.xkeydownEsc);\n }\n\n hide() {\n this.el.hide();\n document.body.removeChild(this.dimmer.el);\n unbind(window, 'keydown', window.xkeydownEsc);\n delete window.xkeydownEsc;\n }\n}\n","import { h } from './element';\nimport { cssPrefix } from '../config';\n\nexport default class FormInput {\n constructor(width, hint) {\n this.vchange = () => {};\n this.el = h('div', `${cssPrefix}-form-input`);\n this.input = h('input', '').css('width', width)\n .on('input', evt => this.vchange(evt))\n .attr('placeholder', hint);\n this.el.child(this.input);\n }\n\n focus() {\n setTimeout(() => {\n this.input.el.focus();\n }, 10);\n }\n\n hint(v) {\n this.input.attr('placeholder', v);\n }\n\n val(v) {\n return this.input.val(v);\n }\n}\n","import { h } from './element';\nimport Suggest from './suggest';\nimport { cssPrefix } from '../config';\n\nexport default class FormSelect {\n constructor(key, items, width, getTitle = it => it, change = () => {}) {\n this.key = key;\n this.getTitle = getTitle;\n this.vchange = () => {};\n this.el = h('div', `${cssPrefix}-form-select`);\n this.suggest = new Suggest(items.map(it => ({ key: it, title: this.getTitle(it) })), (it) => {\n this.itemClick(it.key);\n change(it.key);\n this.vchange(it.key);\n }, width, this.el);\n this.el.children(\n this.itemEl = h('div', 'input-text').html(this.getTitle(key)),\n this.suggest.el,\n ).on('click', () => this.show());\n }\n\n show() {\n this.suggest.search('');\n }\n\n itemClick(it) {\n this.key = it;\n this.itemEl.html(this.getTitle(it));\n }\n\n val(v) {\n if (v !== undefined) {\n this.key = v;\n this.itemEl.html(this.getTitle(v));\n return this;\n }\n return this.key;\n }\n}\n","import { h } from './element';\nimport { cssPrefix } from '../config';\nimport { t } from '../locale/locale';\n\nconst patterns = {\n number: /(^\\d+$)|(^\\d+(\\.\\d{0,4})?$)/,\n date: /^\\d{4}-\\d{1,2}-\\d{1,2}$/,\n};\n\n// rule: { required: false, type, pattern: // }\nexport default class FormField {\n constructor(input, rule, label, labelWidth) {\n this.label = '';\n this.rule = rule;\n if (label) {\n this.label = h('label', 'label').css('width', `${labelWidth}px`).html(label);\n }\n this.tip = h('div', 'tip').child('tip').hide();\n this.input = input;\n this.input.vchange = () => this.validate();\n this.el = h('div', `${cssPrefix}-form-field`)\n .children(this.label, input.el, this.tip);\n }\n\n isShow() {\n return this.el.css('display') !== 'none';\n }\n\n show() {\n this.el.show();\n }\n\n hide() {\n this.el.hide();\n return this;\n }\n\n val(v) {\n return this.input.val(v);\n }\n\n hint(hint) {\n this.input.hint(hint);\n }\n\n validate() {\n const {\n input, rule, tip, el,\n } = this;\n const v = input.val();\n if (rule.required) {\n if (/^\\s*$/.test(v)) {\n tip.html(t('validation.required'));\n el.addClass('error');\n return false;\n }\n }\n if (rule.type || rule.pattern) {\n const pattern = rule.pattern || patterns[rule.type];\n if (!pattern.test(v)) {\n tip.html(t('validation.notMatch'));\n el.addClass('error');\n return false;\n }\n }\n el.removeClass('error');\n return true;\n }\n}\n","import Modal from './modal';\nimport FormInput from './form_input';\nimport FormSelect from './form_select';\nimport FormField from './form_field';\nimport Button from './button';\nimport { t } from '../locale/locale';\nimport { h } from './element';\nimport { cssPrefix } from '../config';\n\nconst fieldLabelWidth = 100;\n\nexport default class ModalValidation extends Modal {\n constructor() {\n const mf = new FormField(\n new FormSelect('cell',\n ['cell'], // cell|row|column\n '100%',\n it => t(`dataValidation.modeType.${it}`)),\n { required: true },\n `${t('dataValidation.range')}:`,\n fieldLabelWidth,\n );\n const rf = new FormField(\n new FormInput('120px', 'E3 or E3:F12'),\n { required: true, pattern: /^([A-Z]{1,2}[1-9]\\d*)(:[A-Z]{1,2}[1-9]\\d*)?$/ },\n );\n const cf = new FormField(\n new FormSelect('list',\n ['list', 'number', 'date', 'phone', 'email'],\n '100%',\n it => t(`dataValidation.type.${it}`),\n it => this.criteriaSelected(it)),\n { required: true },\n `${t('dataValidation.criteria')}:`,\n fieldLabelWidth,\n );\n\n // operator\n const of = new FormField(\n new FormSelect('be',\n ['be', 'nbe', 'eq', 'neq', 'lt', 'lte', 'gt', 'gte'],\n '160px',\n it => t(`dataValidation.operator.${it}`),\n it => this.criteriaOperatorSelected(it)),\n { required: true },\n ).hide();\n // min, max\n const minvf = new FormField(\n new FormInput('70px', '10'),\n { required: true },\n ).hide();\n const maxvf = new FormField(\n new FormInput('70px', '100'),\n { required: true, type: 'number' },\n ).hide();\n // value\n const svf = new FormField(\n new FormInput('120px', 'a,b,c'),\n { required: true },\n );\n const vf = new FormField(\n new FormInput('70px', '10'),\n { required: true, type: 'number' },\n ).hide();\n\n super(t('contextmenu.validation'), [\n h('div', `${cssPrefix}-form-fields`).children(\n mf.el,\n rf.el,\n ),\n h('div', `${cssPrefix}-form-fields`).children(\n cf.el,\n of.el,\n minvf.el,\n maxvf.el,\n vf.el,\n svf.el,\n ),\n h('div', `${cssPrefix}-buttons`).children(\n new Button('cancel').on('click', () => this.btnClick('cancel')),\n new Button('remove').on('click', () => this.btnClick('remove')),\n new Button('save', 'primary').on('click', () => this.btnClick('save')),\n ),\n ]);\n this.mf = mf;\n this.rf = rf;\n this.cf = cf;\n this.of = of;\n this.minvf = minvf;\n this.maxvf = maxvf;\n this.vf = vf;\n this.svf = svf;\n this.change = () => {};\n }\n\n showVf(it) {\n const hint = it === 'date' ? '2018-11-12' : '10';\n const { vf } = this;\n vf.input.hint(hint);\n vf.show();\n }\n\n criteriaSelected(it) {\n const {\n of, minvf, maxvf, vf, svf,\n } = this;\n if (it === 'date' || it === 'number') {\n of.show();\n minvf.rule.type = it;\n maxvf.rule.type = it;\n if (it === 'date') {\n minvf.hint('2018-11-12');\n maxvf.hint('2019-11-12');\n } else {\n minvf.hint('10');\n maxvf.hint('100');\n }\n minvf.show();\n maxvf.show();\n vf.hide();\n svf.hide();\n } else {\n if (it === 'list') {\n svf.show();\n } else {\n svf.hide();\n }\n vf.hide();\n of.hide();\n minvf.hide();\n maxvf.hide();\n }\n }\n\n criteriaOperatorSelected(it) {\n if (!it) return;\n const {\n minvf, maxvf, vf,\n } = this;\n if (it === 'be' || it === 'nbe') {\n minvf.show();\n maxvf.show();\n vf.hide();\n } else {\n const type = this.cf.val();\n vf.rule.type = type;\n if (type === 'date') {\n vf.hint('2018-11-12');\n } else {\n vf.hint('10');\n }\n vf.show();\n minvf.hide();\n maxvf.hide();\n }\n }\n\n btnClick(action) {\n if (action === 'cancel') {\n this.hide();\n } else if (action === 'remove') {\n this.change('remove');\n this.hide();\n } else if (action === 'save') {\n // validate\n const attrs = ['mf', 'rf', 'cf', 'of', 'svf', 'vf', 'minvf', 'maxvf'];\n for (let i = 0; i < attrs.length; i += 1) {\n const field = this[attrs[i]];\n // console.log('field:', field);\n if (field.isShow()) {\n // console.log('it:', it);\n if (!field.validate()) return;\n }\n }\n\n const mode = this.mf.val();\n const ref = this.rf.val();\n const type = this.cf.val();\n const operator = this.of.val();\n let value = this.svf.val();\n if (type === 'number' || type === 'date') {\n if (operator === 'be' || operator === 'nbe') {\n value = [this.minvf.val(), this.maxvf.val()];\n } else {\n value = this.vf.val();\n }\n }\n // console.log(mode, ref, type, operator, value);\n this.change('save',\n mode,\n ref,\n {\n type, operator, required: false, value,\n });\n this.hide();\n }\n }\n\n // validation: { mode, ref, validator }\n setValue(v) {\n if (v) {\n const {\n mf, rf, cf, of, svf, vf, minvf, maxvf,\n } = this;\n const {\n mode, ref, validator,\n } = v;\n const {\n type, operator, value,\n } = validator || { type: 'list' };\n mf.val(mode || 'cell');\n rf.val(ref);\n cf.val(type);\n of.val(operator);\n if (Array.isArray(value)) {\n minvf.val(value[0]);\n maxvf.val(value[1]);\n } else {\n svf.val(value || '');\n vf.val(value || '');\n }\n this.criteriaSelected(type);\n this.criteriaOperatorSelected(operator);\n }\n this.show();\n }\n}\n","import { h } from './element';\nimport Button from './button';\nimport { bindClickoutside, unbindClickoutside } from './event';\nimport { cssPrefix } from '../config';\nimport { t } from '../locale/locale';\n\nfunction buildMenu(clsName) {\n return h('div', `${cssPrefix}-item ${clsName}`);\n}\n\nfunction buildSortItem(it) {\n return buildMenu('state').child(t(`sort.${it}`))\n .on('click.stop', () => this.itemClick(it));\n}\n\nfunction buildFilterBody(items) {\n const { filterbEl, filterValues } = this;\n filterbEl.html('');\n const itemKeys = Object.keys(items);\n itemKeys.forEach((it, index) => {\n const cnt = items[it];\n const active = filterValues.includes(it) ? 'checked' : '';\n filterbEl.child(h('div', `${cssPrefix}-item state ${active}`)\n .on('click.stop', () => this.filterClick(index, it))\n .children(it === '' ? t('filter.empty') : it, h('div', 'label').html(`(${cnt})`)));\n });\n}\n\nfunction resetFilterHeader() {\n const { filterhEl, filterValues, values } = this;\n filterhEl.html(`${filterValues.length} / ${values.length}`);\n filterhEl.checked(filterValues.length === values.length);\n}\n\nexport default class SortFilter {\n constructor() {\n this.filterbEl = h('div', `${cssPrefix}-body`);\n this.filterhEl = h('div', `${cssPrefix}-header state`).on('click.stop', () => this.filterClick(0, 'all'));\n this.el = h('div', `${cssPrefix}-sort-filter`).children(\n this.sortAscEl = buildSortItem.call(this, 'asc'),\n this.sortDescEl = buildSortItem.call(this, 'desc'),\n buildMenu('divider'),\n h('div', `${cssPrefix}-filter`).children(\n this.filterhEl,\n this.filterbEl,\n ),\n h('div', `${cssPrefix}-buttons`).children(\n new Button('cancel').on('click', () => this.btnClick('cancel')),\n new Button('ok', 'primary').on('click', () => this.btnClick('ok')),\n ),\n ).hide();\n // this.setFilters(['test1', 'test2', 'text3']);\n this.ci = null;\n this.sortDesc = null;\n this.values = null;\n this.filterValues = [];\n }\n\n btnClick(it) {\n if (it === 'ok') {\n const { ci, sort, filterValues } = this;\n if (this.ok) {\n this.ok(ci, sort, 'in', filterValues);\n }\n }\n this.hide();\n }\n\n itemClick(it) {\n // console.log('it:', it);\n this.sort = it;\n const { sortAscEl, sortDescEl } = this;\n sortAscEl.checked(it === 'asc');\n sortDescEl.checked(it === 'desc');\n }\n\n filterClick(index, it) {\n // console.log('index:', index, it);\n const { filterbEl, filterValues, values } = this;\n const children = filterbEl.children();\n if (it === 'all') {\n if (children.length === filterValues.length) {\n this.filterValues = [];\n children.forEach(i => h(i).checked(false));\n } else {\n this.filterValues = Array.from(values);\n children.forEach(i => h(i).checked(true));\n }\n } else {\n const checked = h(children[index]).toggle('checked');\n if (checked) {\n filterValues.push(it);\n } else {\n filterValues.splice(filterValues.findIndex(i => i === it), 1);\n }\n }\n resetFilterHeader.call(this);\n }\n\n // v: autoFilter\n // items: {value: cnt}\n // sort { ci, order }\n set(ci, items, filter, sort) {\n this.ci = ci;\n const { sortAscEl, sortDescEl } = this;\n if (sort !== null) {\n this.sort = sort.order;\n sortAscEl.checked(sort.asc());\n sortDescEl.checked(sort.desc());\n } else {\n this.sortDesc = null;\n sortAscEl.checked(false);\n sortDescEl.checked(false);\n }\n // this.setFilters(items, filter);\n this.values = Object.keys(items);\n this.filterValues = filter ? Array.from(filter.value) : Object.keys(items);\n buildFilterBody.call(this, items, filter);\n resetFilterHeader.call(this);\n }\n\n setOffset(v) {\n this.el.offset(v).show();\n let tindex = 1;\n bindClickoutside(this.el, () => {\n if (tindex <= 0) {\n this.hide();\n }\n tindex -= 1;\n });\n }\n\n show() {\n this.el.show();\n }\n\n hide() {\n this.el.hide();\n unbindClickoutside(this.el);\n }\n}\n","/* global document */\nimport { h } from './element';\nimport Icon from './icon';\nimport { cssPrefix } from '../config';\n\nexport function xtoast(title, content) {\n const el = h('div', `${cssPrefix}-toast`);\n const dimmer = h('div', `${cssPrefix}-dimmer active`);\n const remove = () => {\n document.body.removeChild(el.el);\n document.body.removeChild(dimmer.el);\n };\n\n el.children(\n h('div', `${cssPrefix}-toast-header`).children(\n new Icon('close').on('click.stop', () => remove()),\n title,\n ),\n h('div', `${cssPrefix}-toast-content`).html(content),\n );\n document.body.appendChild(el.el);\n document.body.appendChild(dimmer.el);\n // set offset\n const { width, height } = el.box();\n const { clientHeight, clientWidth } = document.documentElement;\n el.offset({\n left: (clientWidth - width) / 2,\n top: (clientHeight - height) / 3,\n });\n}\n\nexport default {};\n","/* global window */\nimport { h } from './element';\nimport {\n bind,\n mouseMoveUp,\n bindTouch,\n createEventEmitter,\n} from './event';\nimport Resizer from './resizer';\nimport Scrollbar from './scrollbar';\nimport Selector from './selector';\nimport Editor from './editor';\nimport Print from './print';\nimport ContextMenu from './contextmenu';\nimport Table from './table';\nimport Toolbar from './toolbar/index';\nimport ModalValidation from './modal_validation';\nimport SortFilter from './sort_filter';\nimport { xtoast } from './message';\nimport { cssPrefix } from '../config';\nimport { formulas } from '../core/formula';\n\n/**\n * @desc throttle fn\n * @param func function\n * @param wait Delay in milliseconds\n */\nfunction throttle(func, wait) {\n let timeout;\n return (...arg) => {\n const that = this;\n const args = arg;\n if (!timeout) {\n timeout = setTimeout(() => {\n timeout = null;\n func.apply(that, args);\n }, wait);\n }\n };\n}\n\nfunction scrollbarMove() {\n const {\n data, verticalScrollbar, horizontalScrollbar,\n } = this;\n const {\n l, t, left, top, width, height,\n } = data.getSelectedRect();\n const tableOffset = this.getTableOffset();\n // console.log(',l:', l, ', left:', left, ', tOffset.left:', tableOffset.width);\n if (Math.abs(left) + width > tableOffset.width) {\n horizontalScrollbar.move({ left: l + width - tableOffset.width });\n } else {\n const fsw = data.freezeTotalWidth();\n if (left < fsw) {\n horizontalScrollbar.move({ left: l - 1 - fsw });\n }\n }\n // console.log('top:', top, ', height:', height, ', tof.height:', tableOffset.height);\n if (Math.abs(top) + height > tableOffset.height) {\n verticalScrollbar.move({ top: t + height - tableOffset.height - 1 });\n } else {\n const fsh = data.freezeTotalHeight();\n if (top < fsh) {\n verticalScrollbar.move({ top: t - 1 - fsh });\n }\n }\n}\n\nfunction selectorSet(multiple, ri, ci, indexesUpdated = true, moving = false) {\n if (ri === -1 && ci === -1) return;\n const {\n table, selector, toolbar, data,\n contextMenu,\n } = this;\n contextMenu.setMode((ri === -1 || ci === -1) ? 'row-col' : 'range');\n const cell = data.getCell(ri, ci);\n if (multiple) {\n selector.setEnd(ri, ci, moving);\n this.trigger('cells-selected', cell, selector.range);\n } else {\n // trigger click event\n selector.set(ri, ci, indexesUpdated);\n this.trigger('cell-selected', cell, ri, ci);\n }\n toolbar.reset();\n table.render();\n}\n\n// multiple: boolean\n// direction: left | right | up | down | row-first | row-last | col-first | col-last\nfunction selectorMove(multiple, direction) {\n const {\n selector, data,\n } = this;\n const { rows, cols } = data;\n let [ri, ci] = selector.indexes;\n const { eri, eci } = selector.range;\n if (multiple) {\n [ri, ci] = selector.moveIndexes;\n }\n // console.log('selector.move:', ri, ci);\n if (direction === 'left') {\n if (ci > 0) ci -= 1;\n } else if (direction === 'right') {\n if (eci !== ci) ci = eci;\n if (ci < cols.len - 1) ci += 1;\n } else if (direction === 'up') {\n if (ri > 0) ri -= 1;\n } else if (direction === 'down') {\n if (eri !== ri) ri = eri;\n if (ri < rows.len - 1) ri += 1;\n } else if (direction === 'row-first') {\n ci = 0;\n } else if (direction === 'row-last') {\n ci = cols.len - 1;\n } else if (direction === 'col-first') {\n ri = 0;\n } else if (direction === 'col-last') {\n ri = rows.len - 1;\n }\n if (multiple) {\n selector.moveIndexes = [ri, ci];\n }\n selectorSet.call(this, multiple, ri, ci);\n scrollbarMove.call(this);\n}\n\n// private methods\nfunction overlayerMousemove(evt) {\n // console.log('x:', evt.offsetX, ', y:', evt.offsetY);\n if (evt.buttons !== 0) return;\n if (evt.target.className === `${cssPrefix}-resizer-hover`) return;\n const { offsetX, offsetY } = evt;\n const {\n rowResizer, colResizer, tableEl, data,\n } = this;\n const { rows, cols } = data;\n if (offsetX > cols.indexWidth && offsetY > rows.height) {\n rowResizer.hide();\n colResizer.hide();\n return;\n }\n const tRect = tableEl.box();\n const cRect = data.getCellRectByXY(evt.offsetX, evt.offsetY);\n if (cRect.ri >= 0 && cRect.ci === -1) {\n cRect.width = cols.indexWidth;\n rowResizer.show(cRect, {\n width: tRect.width,\n });\n if (rows.isHide(cRect.ri - 1)) {\n rowResizer.showUnhide(cRect.ri);\n } else {\n rowResizer.hideUnhide();\n }\n } else {\n rowResizer.hide();\n }\n if (cRect.ri === -1 && cRect.ci >= 0) {\n cRect.height = rows.height;\n colResizer.show(cRect, {\n height: tRect.height,\n });\n if (cols.isHide(cRect.ci - 1)) {\n colResizer.showUnhide(cRect.ci);\n } else {\n colResizer.hideUnhide();\n }\n } else {\n colResizer.hide();\n }\n}\n\n// let scrollThreshold = 15;\nfunction overlayerMousescroll(evt) {\n // scrollThreshold -= 1;\n // if (scrollThreshold > 0) return;\n // scrollThreshold = 15;\n\n const { verticalScrollbar, horizontalScrollbar, data } = this;\n const { top } = verticalScrollbar.scroll();\n const { left } = horizontalScrollbar.scroll();\n // console.log('evt:::', evt.wheelDelta, evt.detail * 40);\n\n const { rows, cols } = data;\n\n // deltaY for vertical delta\n const { deltaY, deltaX } = evt;\n const loopValue = (ii, vFunc) => {\n let i = ii;\n let v = 0;\n do {\n v = vFunc(i);\n i += 1;\n } while (v <= 0);\n return v;\n };\n // console.log('deltaX', deltaX, 'evt.detail', evt.detail);\n // if (evt.detail) deltaY = evt.detail * 40;\n const moveY = (vertical) => {\n if (vertical > 0) {\n // up\n const ri = data.scroll.ri + 1;\n if (ri < rows.len) {\n const rh = loopValue(ri, i => rows.getHeight(i));\n verticalScrollbar.move({ top: top + rh - 1 });\n }\n } else {\n // down\n const ri = data.scroll.ri - 1;\n if (ri >= 0) {\n const rh = loopValue(ri, i => rows.getHeight(i));\n verticalScrollbar.move({ top: ri === 0 ? 0 : top - rh });\n }\n }\n };\n\n // deltaX for Mac horizontal scroll\n const moveX = (horizontal) => {\n if (horizontal > 0) {\n // left\n const ci = data.scroll.ci + 1;\n if (ci < cols.len) {\n const cw = loopValue(ci, i => cols.getWidth(i));\n horizontalScrollbar.move({ left: left + cw - 1 });\n }\n } else {\n // right\n const ci = data.scroll.ci - 1;\n if (ci >= 0) {\n const cw = loopValue(ci, i => cols.getWidth(i));\n horizontalScrollbar.move({ left: ci === 0 ? 0 : left - cw });\n }\n }\n };\n const tempY = Math.abs(deltaY);\n const tempX = Math.abs(deltaX);\n const temp = Math.max(tempY, tempX);\n // console.log('event:', evt);\n // detail for windows/mac firefox vertical scroll\n if (/Firefox/i.test(window.navigator.userAgent)) throttle(moveY(evt.detail), 50);\n if (temp === tempX) throttle(moveX(deltaX), 50);\n if (temp === tempY) throttle(moveY(deltaY), 50);\n}\n\nfunction overlayerTouch(direction, distance) {\n const { verticalScrollbar, horizontalScrollbar } = this;\n const { top } = verticalScrollbar.scroll();\n const { left } = horizontalScrollbar.scroll();\n\n if (direction === 'left' || direction === 'right') {\n horizontalScrollbar.move({ left: left - distance });\n } else if (direction === 'up' || direction === 'down') {\n verticalScrollbar.move({ top: top - distance });\n }\n}\n\nfunction verticalScrollbarSet() {\n const { data, verticalScrollbar } = this;\n const { height } = this.getTableOffset();\n const erth = data.exceptRowTotalHeight(0, -1);\n // console.log('erth:', erth);\n verticalScrollbar.set(height, data.rows.totalHeight() - erth);\n}\n\nfunction horizontalScrollbarSet() {\n const { data, horizontalScrollbar } = this;\n const { width } = this.getTableOffset();\n if (data) {\n horizontalScrollbar.set(width, data.cols.totalWidth());\n }\n}\n\nfunction sheetFreeze() {\n const {\n selector, data, editor,\n } = this;\n const [ri, ci] = data.freeze;\n if (ri > 0 || ci > 0) {\n const fwidth = data.freezeTotalWidth();\n const fheight = data.freezeTotalHeight();\n editor.setFreezeLengths(fwidth, fheight);\n }\n selector.resetAreaOffset();\n}\n\nfunction sheetReset() {\n const {\n tableEl,\n overlayerEl,\n overlayerCEl,\n table,\n toolbar,\n selector,\n el,\n } = this;\n const tOffset = this.getTableOffset();\n const vRect = this.getRect();\n tableEl.attr(vRect);\n overlayerEl.offset(vRect);\n overlayerCEl.offset(tOffset);\n el.css('width', `${vRect.width}px`);\n verticalScrollbarSet.call(this);\n horizontalScrollbarSet.call(this);\n sheetFreeze.call(this);\n table.render();\n toolbar.reset();\n selector.reset();\n}\n\nfunction clearClipboard() {\n const { data, selector } = this;\n data.clearClipboard();\n selector.hideClipboard();\n}\n\nfunction copy() {\n const { data, selector } = this;\n data.copy();\n data.copyToSystemClipboard();\n selector.showClipboard();\n}\n\nfunction cut() {\n const { data, selector } = this;\n data.cut();\n selector.showClipboard();\n}\n\nfunction paste(what, evt) {\n const { data } = this;\n if (data.settings.mode === 'read') return;\n if (data.paste(what, msg => xtoast('Tip', msg))) {\n sheetReset.call(this);\n } else if (evt) {\n const cdata = evt.clipboardData.getData('text/plain');\n this.data.pasteFromText(cdata);\n sheetReset.call(this);\n }\n}\n\nfunction hideRowsOrCols() {\n this.data.hideRowsOrCols();\n sheetReset.call(this);\n}\n\nfunction unhideRowsOrCols(type, index) {\n this.data.unhideRowsOrCols(type, index);\n sheetReset.call(this);\n}\n\nfunction autofilter() {\n const { data } = this;\n data.autofilter();\n sheetReset.call(this);\n}\n\nfunction toolbarChangePaintformatPaste() {\n const { toolbar } = this;\n if (toolbar.paintformatActive()) {\n paste.call(this, 'format');\n clearClipboard.call(this);\n toolbar.paintformatToggle();\n }\n}\n\nfunction overlayerMousedown(evt) {\n // console.log(':::::overlayer.mousedown:', evt.detail, evt.button, evt.buttons, evt.shiftKey);\n // console.log('evt.target.className:', evt.target.className);\n const {\n selector, data, table, sortFilter,\n } = this;\n const { offsetX, offsetY } = evt;\n const isAutofillEl = evt.target.className === `${cssPrefix}-selector-corner`;\n const cellRect = data.getCellRectByXY(offsetX, offsetY);\n const {\n left, top, width, height,\n } = cellRect;\n let { ri, ci } = cellRect;\n // sort or filter\n const { autoFilter } = data;\n if (autoFilter.includes(ri, ci)) {\n if (left + width - 20 < offsetX && top + height - 20 < offsetY) {\n const items = autoFilter.items(ci, (r, c) => data.rows.getCell(r, c));\n sortFilter.hide();\n sortFilter.set(ci, items, autoFilter.getFilter(ci), autoFilter.getSort(ci));\n sortFilter.setOffset({ left, top: top + height + 2 });\n return;\n }\n }\n\n // console.log('ri:', ri, ', ci:', ci);\n if (!evt.shiftKey) {\n // console.log('selectorSetStart:::');\n if (isAutofillEl) {\n selector.showAutofill(ri, ci);\n } else {\n selectorSet.call(this, false, ri, ci);\n }\n\n // mouse move up\n mouseMoveUp(window, (e) => {\n // console.log('mouseMoveUp::::');\n ({ ri, ci } = data.getCellRectByXY(e.offsetX, e.offsetY));\n if (isAutofillEl) {\n selector.showAutofill(ri, ci);\n } else if (e.buttons === 1 && !e.shiftKey) {\n selectorSet.call(this, true, ri, ci, true, true);\n }\n }, () => {\n if (isAutofillEl && selector.arange && data.settings.mode !== 'read') {\n if (data.autofill(selector.arange, 'all', msg => xtoast('Tip', msg))) {\n table.render();\n }\n }\n selector.hideAutofill();\n toolbarChangePaintformatPaste.call(this);\n });\n }\n\n if (!isAutofillEl && evt.buttons === 1) {\n if (evt.shiftKey) {\n // console.log('shiftKey::::');\n selectorSet.call(this, true, ri, ci);\n }\n }\n}\n\nfunction editorSetOffset() {\n const { editor, data } = this;\n const sOffset = data.getSelectedRect();\n const tOffset = this.getTableOffset();\n let sPosition = 'top';\n // console.log('sOffset:', sOffset, ':', tOffset);\n if (sOffset.top > tOffset.height / 2) {\n sPosition = 'bottom';\n }\n editor.setOffset(sOffset, sPosition);\n}\n\nfunction editorSet() {\n const { editor, data } = this;\n if (data.settings.mode === 'read') return;\n editorSetOffset.call(this);\n editor.setCell(data.getSelectedCell(), data.getSelectedValidator());\n clearClipboard.call(this);\n}\n\nfunction verticalScrollbarMove(distance) {\n const { data, table, selector } = this;\n data.scrolly(distance, () => {\n selector.resetBRLAreaOffset();\n editorSetOffset.call(this);\n table.render();\n });\n}\n\nfunction horizontalScrollbarMove(distance) {\n const { data, table, selector } = this;\n data.scrollx(distance, () => {\n selector.resetBRTAreaOffset();\n editorSetOffset.call(this);\n table.render();\n });\n}\n\nfunction rowResizerFinished(cRect, distance) {\n const { ri } = cRect;\n const { table, selector, data } = this;\n data.rows.setHeight(ri, distance);\n table.render();\n selector.resetAreaOffset();\n verticalScrollbarSet.call(this);\n editorSetOffset.call(this);\n}\n\nfunction colResizerFinished(cRect, distance) {\n const { ci } = cRect;\n const { table, selector, data } = this;\n data.cols.setWidth(ci, distance);\n // console.log('data:', data);\n table.render();\n selector.resetAreaOffset();\n horizontalScrollbarSet.call(this);\n editorSetOffset.call(this);\n}\n\nfunction dataSetCellText(text, state = 'finished') {\n const { data, table } = this;\n // const [ri, ci] = selector.indexes;\n if (data.settings.mode === 'read') return;\n data.setSelectedCellText(text, state);\n const { ri, ci } = data.selector;\n if (state === 'finished') {\n table.render();\n } else {\n this.trigger('cell-edited', text, ri, ci);\n }\n}\n\nfunction insertDeleteRowColumn(type) {\n const { data } = this;\n if (data.settings.mode === 'read') return;\n if (type === 'insert-row') {\n data.insert('row');\n } else if (type === 'delete-row') {\n data.delete('row');\n } else if (type === 'insert-column') {\n data.insert('column');\n } else if (type === 'delete-column') {\n data.delete('column');\n } else if (type === 'delete-cell') {\n data.deleteCell();\n } else if (type === 'delete-cell-format') {\n data.deleteCell('format');\n } else if (type === 'delete-cell-text') {\n data.deleteCell('text');\n } else if (type === 'cell-printable') {\n data.setSelectedCellAttr('printable', true);\n } else if (type === 'cell-non-printable') {\n data.setSelectedCellAttr('printable', false);\n } else if (type === 'cell-editable') {\n data.setSelectedCellAttr('editable', true);\n } else if (type === 'cell-non-editable') {\n data.setSelectedCellAttr('editable', false);\n }\n clearClipboard.call(this);\n sheetReset.call(this);\n}\n\nfunction toolbarChange(type, value) {\n const { data } = this;\n if (type === 'undo') {\n this.undo();\n } else if (type === 'redo') {\n this.redo();\n } else if (type === 'print') {\n this.print.preview();\n } else if (type === 'paintformat') {\n if (value === true) copy.call(this);\n else clearClipboard.call(this);\n } else if (type === 'clearformat') {\n insertDeleteRowColumn.call(this, 'delete-cell-format');\n } else if (type === 'link') {\n // link\n } else if (type === 'chart') {\n // chart\n } else if (type === 'autofilter') {\n // filter\n autofilter.call(this);\n } else if (type === 'freeze') {\n if (value) {\n const { ri, ci } = data.selector;\n this.freeze(ri, ci);\n } else {\n this.freeze(0, 0);\n }\n } else {\n data.setSelectedCellAttr(type, value);\n if (type === 'formula' && !data.selector.multiple()) {\n editorSet.call(this);\n }\n sheetReset.call(this);\n }\n}\n\nfunction sortFilterChange(ci, order, operator, value) {\n // console.log('sort:', sortDesc, operator, value);\n this.data.setAutoFilter(ci, order, operator, value);\n sheetReset.call(this);\n}\n\nfunction sheetInitEvents() {\n const {\n selector,\n overlayerEl,\n rowResizer,\n colResizer,\n verticalScrollbar,\n horizontalScrollbar,\n editor,\n contextMenu,\n toolbar,\n modalValidation,\n sortFilter,\n } = this;\n // overlayer\n overlayerEl\n .on('mousemove', (evt) => {\n overlayerMousemove.call(this, evt);\n })\n .on('mousedown', (evt) => {\n editor.clear();\n contextMenu.hide();\n // the left mouse button: mousedown → mouseup → click\n // the right mouse button: mousedown → contenxtmenu → mouseup\n if (evt.buttons === 2) {\n if (this.data.xyInSelectedRect(evt.offsetX, evt.offsetY)) {\n contextMenu.setPosition(evt.offsetX, evt.offsetY);\n } else {\n overlayerMousedown.call(this, evt);\n contextMenu.setPosition(evt.offsetX, evt.offsetY);\n }\n evt.stopPropagation();\n } else if (evt.detail === 2) {\n editorSet.call(this);\n } else {\n overlayerMousedown.call(this, evt);\n }\n })\n .on('mousewheel.stop', (evt) => {\n overlayerMousescroll.call(this, evt);\n })\n .on('mouseout', (evt) => {\n const { offsetX, offsetY } = evt;\n if (offsetY <= 0) colResizer.hide();\n if (offsetX <= 0) rowResizer.hide();\n });\n\n selector.inputChange = (v) => {\n dataSetCellText.call(this, v, 'input');\n editorSet.call(this);\n };\n\n // slide on mobile\n bindTouch(overlayerEl.el, {\n move: (direction, d) => {\n overlayerTouch.call(this, direction, d);\n },\n });\n\n // toolbar change\n toolbar.change = (type, value) => toolbarChange.call(this, type, value);\n\n // sort filter ok\n sortFilter.ok = (ci, order, o, v) => sortFilterChange.call(this, ci, order, o, v);\n\n // resizer finished callback\n rowResizer.finishedFn = (cRect, distance) => {\n rowResizerFinished.call(this, cRect, distance);\n };\n colResizer.finishedFn = (cRect, distance) => {\n colResizerFinished.call(this, cRect, distance);\n };\n // resizer unhide callback\n rowResizer.unhideFn = (index) => {\n unhideRowsOrCols.call(this, 'row', index);\n };\n colResizer.unhideFn = (index) => {\n unhideRowsOrCols.call(this, 'col', index);\n };\n // scrollbar move callback\n verticalScrollbar.moveFn = (distance, evt) => {\n verticalScrollbarMove.call(this, distance, evt);\n };\n horizontalScrollbar.moveFn = (distance, evt) => {\n horizontalScrollbarMove.call(this, distance, evt);\n };\n // editor\n editor.change = (state, itext) => {\n dataSetCellText.call(this, itext, state);\n };\n // modal validation\n modalValidation.change = (action, ...args) => {\n if (action === 'save') {\n this.data.addValidation(...args);\n } else {\n this.data.removeValidation();\n }\n };\n // contextmenu\n contextMenu.itemClick = (type) => {\n // console.log('type:', type);\n if (type === 'validation') {\n modalValidation.setValue(this.data.getSelectedValidation());\n } else if (type === 'copy') {\n copy.call(this);\n } else if (type === 'cut') {\n cut.call(this);\n } else if (type === 'paste') {\n paste.call(this, 'all');\n } else if (type === 'paste-value') {\n paste.call(this, 'text');\n } else if (type === 'paste-format') {\n paste.call(this, 'format');\n } else if (type === 'hide') {\n hideRowsOrCols.call(this);\n } else {\n insertDeleteRowColumn.call(this, type);\n }\n };\n\n bind(window, 'resize', () => {\n this.reload();\n });\n\n bind(window, 'click', (evt) => {\n this.focusing = overlayerEl.contains(evt.target);\n });\n\n bind(window, 'paste', (evt) => {\n if (!this.focusing) return;\n paste.call(this, 'all', evt);\n evt.preventDefault();\n });\n\n // for selector\n bind(window, 'keydown', (evt) => {\n if (!this.focusing) return;\n const keyCode = evt.keyCode || evt.which;\n const {\n key, ctrlKey, shiftKey, metaKey,\n } = evt;\n // console.log('keydown.evt: ', keyCode);\n if (ctrlKey || metaKey) {\n // const { sIndexes, eIndexes } = selector;\n // let what = 'all';\n // if (shiftKey) what = 'text';\n // if (altKey) what = 'format';\n switch (keyCode) {\n case 90:\n // undo: ctrl + z\n this.undo();\n evt.preventDefault();\n break;\n case 89:\n // redo: ctrl + y\n this.redo();\n evt.preventDefault();\n break;\n case 67:\n // ctrl + c\n copy.call(this);\n evt.preventDefault();\n break;\n case 88:\n // ctrl + x\n cut.call(this);\n evt.preventDefault();\n break;\n case 85:\n // ctrl + u\n toolbar.trigger('underline');\n evt.preventDefault();\n break;\n case 86:\n // ctrl + v\n // => paste\n // evt.preventDefault();\n break;\n case 37:\n // ctrl + left\n selectorMove.call(this, shiftKey, 'row-first');\n evt.preventDefault();\n break;\n case 38:\n // ctrl + up\n selectorMove.call(this, shiftKey, 'col-first');\n evt.preventDefault();\n break;\n case 39:\n // ctrl + right\n selectorMove.call(this, shiftKey, 'row-last');\n evt.preventDefault();\n break;\n case 40:\n // ctrl + down\n selectorMove.call(this, shiftKey, 'col-last');\n evt.preventDefault();\n break;\n case 32:\n // ctrl + space, all cells in col\n selectorSet.call(this, false, -1, this.data.selector.ci, false);\n evt.preventDefault();\n break;\n case 66:\n // ctrl + B\n toolbar.trigger('bold');\n break;\n case 73:\n // ctrl + I\n toolbar.trigger('italic');\n break;\n default:\n break;\n }\n } else {\n // console.log('evt.keyCode:', evt.keyCode);\n switch (keyCode) {\n case 32:\n if (shiftKey) {\n // shift + space, all cells in row\n selectorSet.call(this, false, this.data.selector.ri, -1, false);\n }\n break;\n case 27: // esc\n contextMenu.hide();\n clearClipboard.call(this);\n break;\n case 37: // left\n selectorMove.call(this, shiftKey, 'left');\n evt.preventDefault();\n break;\n case 38: // up\n selectorMove.call(this, shiftKey, 'up');\n evt.preventDefault();\n break;\n case 39: // right\n selectorMove.call(this, shiftKey, 'right');\n evt.preventDefault();\n break;\n case 40: // down\n selectorMove.call(this, shiftKey, 'down');\n evt.preventDefault();\n break;\n case 9: // tab\n editor.clear();\n // shift + tab => move left\n // tab => move right\n selectorMove.call(this, false, shiftKey ? 'left' : 'right');\n evt.preventDefault();\n break;\n case 13: // enter\n editor.clear();\n // shift + enter => move up\n // enter => move down\n selectorMove.call(this, false, shiftKey ? 'up' : 'down');\n evt.preventDefault();\n break;\n case 8: // backspace\n insertDeleteRowColumn.call(this, 'delete-cell-text');\n evt.preventDefault();\n break;\n default:\n break;\n }\n\n if (key === 'Delete') {\n insertDeleteRowColumn.call(this, 'delete-cell-text');\n evt.preventDefault();\n } else if ((keyCode >= 65 && keyCode <= 90)\n || (keyCode >= 48 && keyCode <= 57)\n || (keyCode >= 96 && keyCode <= 105)\n || evt.key === '='\n ) {\n dataSetCellText.call(this, evt.key, 'input');\n editorSet.call(this);\n } else if (keyCode === 113) {\n // F2\n editorSet.call(this);\n }\n }\n });\n}\n\nexport default class Sheet {\n constructor(targetEl, data) {\n this.eventMap = createEventEmitter();\n const { view, showToolbar, showContextmenu } = data.settings;\n this.el = h('div', `${cssPrefix}-sheet`);\n this.toolbar = new Toolbar(data, view.width, !showToolbar);\n this.print = new Print(data);\n targetEl.children(this.toolbar.el, this.el, this.print.el);\n this.data = data;\n // table\n this.tableEl = h('canvas', `${cssPrefix}-table`);\n // resizer\n this.rowResizer = new Resizer(false, data.rows.height);\n this.colResizer = new Resizer(true, data.cols.minWidth);\n // scrollbar\n this.verticalScrollbar = new Scrollbar(true);\n this.horizontalScrollbar = new Scrollbar(false);\n // editor\n this.editor = new Editor(\n formulas,\n () => this.getTableOffset(),\n data.rows.height,\n );\n // data validation\n this.modalValidation = new ModalValidation();\n // contextMenu\n this.contextMenu = new ContextMenu(() => this.getRect(), !showContextmenu);\n // selector\n this.selector = new Selector(data);\n this.overlayerCEl = h('div', `${cssPrefix}-overlayer-content`)\n .children(\n this.editor.el,\n this.selector.el,\n );\n this.overlayerEl = h('div', `${cssPrefix}-overlayer`)\n .child(this.overlayerCEl);\n // sortFilter\n this.sortFilter = new SortFilter();\n // root element\n this.el.children(\n this.tableEl,\n this.overlayerEl.el,\n this.rowResizer.el,\n this.colResizer.el,\n this.verticalScrollbar.el,\n this.horizontalScrollbar.el,\n this.contextMenu.el,\n this.modalValidation.el,\n this.sortFilter.el,\n );\n // table\n this.table = new Table(this.tableEl.el, data);\n sheetInitEvents.call(this);\n sheetReset.call(this);\n // init selector [0, 0]\n selectorSet.call(this, false, 0, 0);\n }\n\n on(eventName, func) {\n this.eventMap.on(eventName, func);\n return this;\n }\n\n trigger(eventName, ...args) {\n const { eventMap } = this;\n eventMap.fire(eventName, args);\n }\n\n resetData(data) {\n // before\n this.editor.clear();\n // after\n this.data = data;\n verticalScrollbarSet.call(this);\n horizontalScrollbarSet.call(this);\n this.toolbar.resetData(data);\n this.print.resetData(data);\n this.selector.resetData(data);\n this.table.resetData(data);\n }\n\n loadData(data) {\n this.data.setData(data);\n sheetReset.call(this);\n return this;\n }\n\n // freeze rows or cols\n freeze(ri, ci) {\n const { data } = this;\n data.setFreeze(ri, ci);\n sheetReset.call(this);\n return this;\n }\n\n undo() {\n this.data.undo();\n sheetReset.call(this);\n }\n\n redo() {\n this.data.redo();\n sheetReset.call(this);\n }\n\n reload() {\n sheetReset.call(this);\n return this;\n }\n\n getRect() {\n const { data } = this;\n return { width: data.viewWidth(), height: data.viewHeight() };\n }\n\n getTableOffset() {\n const { rows, cols } = this.data;\n const { width, height } = this.getRect();\n return {\n width: width - cols.indexWidth,\n height: height - rows.height,\n left: cols.indexWidth,\n top: rows.height,\n };\n }\n}\n","import { h } from './element';\nimport { bindClickoutside, unbindClickoutside } from './event';\nimport { cssPrefix } from '../config';\nimport Icon from './icon';\nimport FormInput from './form_input';\nimport Dropdown from './dropdown';\n// Record: temp not used\n// import { xtoast } from './message';\nimport { tf } from '../locale/locale';\n\nclass DropdownMore extends Dropdown {\n constructor(click) {\n const icon = new Icon('ellipsis');\n super(icon, 'auto', false, 'top-left');\n this.contentClick = click;\n }\n\n reset(items) {\n const eles = items.map((it, i) => h('div', `${cssPrefix}-item`)\n .css('width', '150px')\n .css('font-weight', 'normal')\n .on('click', () => {\n this.contentClick(i);\n this.hide();\n })\n .child(it));\n this.setContentChildren(...eles);\n }\n\n setTitle() {}\n}\n\nconst menuItems = [\n { key: 'delete', title: tf('contextmenu.deleteSheet') },\n];\n\nfunction buildMenuItem(item) {\n return h('div', `${cssPrefix}-item`)\n .child(item.title())\n .on('click', () => {\n this.itemClick(item.key);\n this.hide();\n });\n}\n\nfunction buildMenu() {\n return menuItems.map(it => buildMenuItem.call(this, it));\n}\n\nclass ContextMenu {\n constructor() {\n this.el = h('div', `${cssPrefix}-contextmenu`)\n .css('width', '160px')\n .children(...buildMenu.call(this))\n .hide();\n this.itemClick = () => {};\n }\n\n hide() {\n const { el } = this;\n el.hide();\n unbindClickoutside(el);\n }\n\n setOffset(offset) {\n const { el } = this;\n el.offset(offset);\n el.show();\n bindClickoutside(el);\n }\n}\n\nexport default class Bottombar {\n constructor(addFunc = () => {},\n swapFunc = () => {},\n deleteFunc = () => {},\n updateFunc = () => {}) {\n this.swapFunc = swapFunc;\n this.updateFunc = updateFunc;\n this.dataNames = [];\n this.activeEl = null;\n this.deleteEl = null;\n this.items = [];\n this.moreEl = new DropdownMore((i) => {\n this.clickSwap2(this.items[i]);\n });\n this.contextMenu = new ContextMenu();\n this.contextMenu.itemClick = deleteFunc;\n this.el = h('div', `${cssPrefix}-bottombar`).children(\n this.contextMenu.el,\n this.menuEl = h('ul', `${cssPrefix}-menu`).child(\n h('li', '').children(\n new Icon('add').on('click', () => {\n addFunc();\n }),\n h('span', '').child(this.moreEl),\n ),\n ),\n );\n }\n\n addItem(name, active) {\n this.dataNames.push(name);\n const item = h('li', active ? 'active' : '').child(name);\n item.on('click', () => {\n this.clickSwap2(item);\n }).on('contextmenu', (evt) => {\n const { offsetLeft, offsetHeight } = evt.target;\n this.contextMenu.setOffset({ left: offsetLeft, bottom: offsetHeight + 1 });\n this.deleteEl = item;\n }).on('dblclick', () => {\n const v = item.html();\n const input = new FormInput('auto', '');\n input.val(v);\n input.input.on('blur', ({ target }) => {\n const { value } = target;\n const nindex = this.dataNames.findIndex(it => it === v);\n this.renameItem(nindex, value);\n /*\n this.dataNames.splice(nindex, 1, value);\n this.moreEl.reset(this.dataNames);\n item.html('').child(value);\n this.updateFunc(nindex, value);\n */\n });\n item.html('').child(input.el);\n input.focus();\n });\n if (active) {\n this.clickSwap(item);\n }\n this.items.push(item);\n this.menuEl.child(item);\n this.moreEl.reset(this.dataNames);\n }\n\n renameItem(index, value) {\n this.dataNames.splice(index, 1, value);\n this.moreEl.reset(this.dataNames);\n this.items[index].html('').child(value);\n this.updateFunc(index, value);\n }\n\n clear() {\n this.items.forEach((it) => {\n this.menuEl.removeChild(it.el);\n });\n this.items = [];\n this.dataNames = [];\n this.moreEl.reset(this.dataNames);\n }\n\n deleteItem() {\n const { activeEl, deleteEl } = this;\n if (this.items.length > 1) {\n const index = this.items.findIndex(it => it === deleteEl);\n this.items.splice(index, 1);\n this.dataNames.splice(index, 1);\n this.menuEl.removeChild(deleteEl.el);\n this.moreEl.reset(this.dataNames);\n if (activeEl === deleteEl) {\n const [f] = this.items;\n this.activeEl = f;\n this.activeEl.toggle();\n return [index, 0];\n }\n return [index, -1];\n }\n return [-1];\n }\n\n clickSwap2(item) {\n const index = this.items.findIndex(it => it === item);\n this.clickSwap(item);\n this.activeEl.toggle();\n this.swapFunc(index);\n }\n\n clickSwap(item) {\n if (this.activeEl !== null) {\n this.activeEl.toggle();\n }\n this.activeEl = item;\n }\n}\n","/* global window, document */\nimport { h } from './component/element';\nimport DataProxy from './core/data_proxy';\nimport Sheet from './component/sheet';\nimport Bottombar from './component/bottombar';\nimport { cssPrefix } from './config';\nimport { locale } from './locale/locale';\nimport './index.less';\n\n\nclass Spreadsheet {\n constructor(selectors, options = {}) {\n let targetEl = selectors;\n this.options = { showBottomBar: true, ...options };\n this.sheetIndex = 1;\n this.datas = [];\n if (typeof selectors === 'string') {\n targetEl = document.querySelector(selectors);\n }\n this.bottombar = this.options.showBottomBar ? new Bottombar(() => {\n const d = this.addSheet();\n this.sheet.resetData(d);\n }, (index) => {\n const d = this.datas[index];\n this.sheet.resetData(d);\n }, () => {\n this.deleteSheet();\n }, (index, value) => {\n this.datas[index].name = value;\n }) : null;\n this.data = this.addSheet();\n const rootEl = h('div', `${cssPrefix}`)\n .on('contextmenu', evt => evt.preventDefault());\n // create canvas element\n targetEl.appendChild(rootEl.el);\n this.sheet = new Sheet(rootEl, this.data);\n if (this.bottombar !== null) {\n rootEl.child(this.bottombar.el);\n }\n }\n\n addSheet(name, active = true) {\n const n = name || `sheet${this.sheetIndex}`;\n const d = new DataProxy(n, this.options);\n d.change = (...args) => {\n this.sheet.trigger('change', ...args);\n };\n this.datas.push(d);\n // console.log('d:', n, d, this.datas);\n if (this.bottombar !== null) {\n this.bottombar.addItem(n, active);\n }\n this.sheetIndex += 1;\n return d;\n }\n\n deleteSheet() {\n if (this.bottombar === null) return;\n\n const [oldIndex, nindex] = this.bottombar.deleteItem();\n if (oldIndex >= 0) {\n this.datas.splice(oldIndex, 1);\n if (nindex >= 0) this.sheet.resetData(this.datas[nindex]);\n }\n }\n\n loadData(data) {\n const ds = Array.isArray(data) ? data : [data];\n if (this.bottombar !== null) {\n this.bottombar.clear();\n }\n this.datas = [];\n if (ds.length > 0) {\n for (let i = 0; i < ds.length; i += 1) {\n const it = ds[i];\n const nd = this.addSheet(it.name, i === 0);\n nd.setData(it);\n if (i === 0) {\n this.sheet.resetData(nd);\n }\n }\n }\n return this;\n }\n\n getData() {\n return this.datas.map(it => it.getData());\n }\n\n cellText(ri, ci, text, sheetIndex = 0) {\n this.datas[sheetIndex].setCellText(ri, ci, text, 'finished');\n return this;\n }\n\n cell(ri, ci, sheetIndex = 0) {\n return this.datas[sheetIndex].getCell(ri, ci);\n }\n\n cellStyle(ri, ci, sheetIndex = 0) {\n return this.datas[sheetIndex].getCellStyle(ri, ci);\n }\n\n reRender() {\n this.sheet.table.render();\n return this;\n }\n\n on(eventName, func) {\n this.sheet.on(eventName, func);\n return this;\n }\n\n validate() {\n const { validations } = this.data;\n return validations.errors.size <= 0;\n }\n\n change(cb) {\n this.sheet.on('change', cb);\n return this;\n }\n\n static locale(lang, message) {\n locale(lang, message);\n }\n}\n\nconst spreadsheet = (el, options = {}) => new Spreadsheet(el, options);\n\nif (window) {\n window.x_spreadsheet = spreadsheet;\n window.x_spreadsheet.locale = (lang, message) => locale(lang, message);\n}\n\nexport default Spreadsheet;\nexport {\n spreadsheet,\n};\n","import type { Workbook, Worksheet, Cell, Fill, Border as ExcelBorder } from 'exceljs';\n\n// x-data-spreadsheet 数据格式类型\ninterface XCellStyle {\n align?: 'left' | 'center' | 'right';\n valign?: 'top' | 'middle' | 'bottom';\n font?: {\n name?: string;\n size?: number;\n bold?: boolean;\n italic?: boolean;\n };\n bgcolor?: string;\n textwrap?: boolean;\n color?: string;\n strike?: boolean;\n underline?: boolean;\n border?: {\n top?: string[];\n right?: string[];\n bottom?: string[];\n left?: string[];\n };\n}\n\ninterface XCellData {\n text: string;\n style?: number;\n merge?: [number, number];\n}\n\ninterface XRowData {\n height?: number;\n cells: Record<string, XCellData>;\n}\n\ninterface XSheetData {\n name: string;\n styles?: XCellStyle[];\n merges?: string[];\n rows?: Record<string, XRowData>;\n cols?: Record<string, { width?: number } | number>;\n}\n\n/**\n * 将 exceljs ARGB 颜色 (如 \"FF00FF00\") 转换为 hex (如 \"#00FF00\")\n */\nfunction argbToHex(argb: string): string {\n if (!argb) return '#000000';\n // 已经是 hex 格式\n if (argb.startsWith('#')) return argb;\n // ARGB 格式:前两位是 alpha,后六位是 RGB\n if (argb.length === 8) {\n return '#' + argb.substring(2);\n }\n if (argb.length === 6) {\n return '#' + argb;\n }\n return '#000000';\n}\n\n/**\n * Excel 默认主题色表 (Office 默认主题)\n */\nconst DEFAULT_THEME_COLORS = [\n 'FFFFFF', // 0: lt1 (白)\n '000000', // 1: dk1 (黑)\n 'E7E6E6', // 2: lt2 (浅灰)\n '44546A', // 3: dk2 (深蓝灰)\n '4472C4', // 4: accent1 (蓝)\n 'ED7D31', // 5: accent2 (橙)\n 'A5A5A5', // 6: accent3 (灰)\n 'FFC000', // 7: accent4 (金)\n '5B9BD5', // 8: accent5 (浅蓝)\n '70AD47', // 9: accent6 (绿)\n];\n\n/**\n * Excel 标准索引色表 (前 64 种)\n */\nconst INDEXED_COLORS = [\n '000000', 'FFFFFF', 'FF0000', '00FF00', '0000FF', 'FFFF00', 'FF00FF', '00FFFF',\n '000000', 'FFFFFF', 'FF0000', '00FF00', '0000FF', 'FFFF00', 'FF00FF', '00FFFF',\n '800000', '008000', '000080', '808000', '800080', '008080', 'C0C0C0', '808080',\n '9999FF', '993366', 'FFFFCC', 'CCFFFF', '660066', 'FF8080', '0066CC', 'CCCCFF',\n '000080', 'FF00FF', 'FFFF00', '00FFFF', '800080', '800000', '008080', '0000FF',\n '00CCFF', 'CCFFFF', 'CCFFCC', 'FFFF99', '99CCFF', 'FF99CC', 'CC99FF', 'FFCC99',\n '3366FF', '33CCCC', '99CC00', 'FFCC00', 'FF9900', 'FF6600', '666699', '969696',\n '003366', '339966', '003300', '333300', '993300', '993366', '333399', '333333',\n];\n\n/**\n * 对颜色应用 tint 值 (Excel 主题色的明暗调整)\n */\nfunction applyTint(hex: string, tint: number): string {\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n\n const apply = (c: number) => {\n if (tint < 0) {\n return Math.round(c * (1 + tint));\n }\n return Math.round(c + (255 - c) * tint);\n };\n\n const nr = Math.min(255, Math.max(0, apply(r)));\n const ng = Math.min(255, Math.max(0, apply(g)));\n const nb = Math.min(255, Math.max(0, apply(b)));\n\n return nr.toString(16).padStart(2, '0')\n + ng.toString(16).padStart(2, '0')\n + nb.toString(16).padStart(2, '0');\n}\n\n/**\n * 获取 fill 的颜色\n */\nfunction getFillColor(fill: Fill | undefined): string | undefined {\n if (!fill) return undefined;\n if (fill.type === 'pattern' && fill.pattern === 'solid') {\n const fgColor = fill.fgColor;\n if (fgColor) {\n return resolveColor(fgColor as Record<string, unknown>);\n }\n }\n return undefined;\n}\n\n/**\n * 通用颜色对象解析:处理 argb/theme/indexed 三种格式\n */\nfunction resolveColor(colorObj: Record<string, unknown> | undefined): string | undefined {\n if (!colorObj) return undefined;\n if ('argb' in colorObj && typeof colorObj.argb === 'string' && colorObj.argb) {\n return argbToHex(colorObj.argb);\n }\n if ('theme' in colorObj && typeof colorObj.theme === 'number') {\n const base = DEFAULT_THEME_COLORS[colorObj.theme] || '000000';\n const tint = ('tint' in colorObj && typeof colorObj.tint === 'number') ? colorObj.tint : 0;\n const resolved = tint !== 0 ? applyTint(base, tint) : base;\n return '#' + resolved;\n }\n if ('indexed' in colorObj && typeof colorObj.indexed === 'number') {\n const color = INDEXED_COLORS[colorObj.indexed];\n if (color) return '#' + color;\n }\n return undefined;\n}\n\n/**\n * 转换边框样式\n */\nfunction convertBorderSide(\n border: Partial<ExcelBorder> | undefined\n): string[] | undefined {\n if (!border || !border.style) return undefined;\n const color = resolveColor(border.color as Record<string, unknown>) || '#000000';\n return [border.style, color];\n}\n\n/**\n * 将 exceljs 单元格样式转换为 x-data-spreadsheet 样式\n */\nfunction convertCellStyle(cell: Cell): XCellStyle | null {\n const style: XCellStyle = {};\n let hasStyle = false;\n\n // 字体\n if (cell.font) {\n const font = cell.font;\n if (font.name || font.size || font.bold || font.italic) {\n hasStyle = true;\n style.font = {};\n if (font.name) style.font.name = font.name;\n if (font.size) style.font.size = font.size;\n if (font.bold) style.font.bold = true;\n if (font.italic) style.font.italic = true;\n }\n if (font.color) {\n const fontColor = resolveColor(font.color as Record<string, unknown>);\n if (fontColor) {\n hasStyle = true;\n style.color = fontColor;\n }\n }\n if (font.underline) {\n hasStyle = true;\n style.underline = true;\n }\n if (font.strike) {\n hasStyle = true;\n style.strike = true;\n }\n }\n\n // 填充(背景色)\n const bgcolor = getFillColor(cell.fill);\n if (bgcolor) {\n hasStyle = true;\n style.bgcolor = bgcolor;\n }\n\n // 对齐\n if (cell.alignment) {\n const align = cell.alignment;\n if (align.horizontal) {\n hasStyle = true;\n style.align = align.horizontal as 'left' | 'center' | 'right';\n }\n if (align.vertical) {\n hasStyle = true;\n style.valign = align.vertical as 'top' | 'middle' | 'bottom';\n }\n if (align.wrapText) {\n hasStyle = true;\n style.textwrap = true;\n }\n }\n\n // 边框\n if (cell.border) {\n const border: XCellStyle['border'] = {};\n let hasBorder = false;\n\n const sides = ['top', 'bottom', 'left', 'right'] as const;\n for (const side of sides) {\n const converted = convertBorderSide(cell.border[side]);\n if (converted) {\n border[side] = converted;\n hasBorder = true;\n }\n }\n\n if (hasBorder) {\n hasStyle = true;\n style.border = border;\n }\n }\n\n return hasStyle ? style : null;\n}\n\n/**\n * 将样式序列化为字符串用于去重\n */\nfunction serializeStyle(style: XCellStyle): string {\n return JSON.stringify(style);\n}\n\n/**\n * 获取或创建样式索引\n */\nfunction getOrCreateStyleIndex(\n cell: Cell,\n styles: XCellStyle[],\n styleMap: Map<string, number>\n): number {\n const style = convertCellStyle(cell);\n if (!style) return -1;\n\n const key = serializeStyle(style);\n const existing = styleMap.get(key);\n if (existing !== undefined) return existing;\n\n const index = styles.length;\n styles.push(style);\n styleMap.set(key, index);\n return index;\n}\n\n/**\n * 提取单元格显示文本\n */\nfunction extractCellText(cell: Cell): string {\n const value = cell.value;\n\n if (value === null || value === undefined) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'number') return String(value);\n if (typeof value === 'boolean') return value ? 'TRUE' : 'FALSE';\n if (value instanceof Date) {\n return value.toLocaleDateString();\n }\n\n // 公式单元格\n if (typeof value === 'object' && 'formula' in value) {\n const result = (value as { formula: string; result?: unknown }).result;\n if (result !== undefined && result !== null) return String(result);\n return '';\n }\n\n // 富文本\n if (typeof value === 'object' && 'richText' in value) {\n const richText = (value as { richText: Array<{ text: string }> }).richText;\n return richText.map((rt) => rt.text).join('');\n }\n\n // 超链接\n if (typeof value === 'object' && 'hyperlink' in value) {\n return (value as { text?: string; hyperlink: string }).text || '';\n }\n\n // 错误\n if (typeof value === 'object' && 'error' in value) {\n return String((value as { error: unknown }).error);\n }\n\n return String(value);\n}\n\n/**\n * 解析 Excel 范围字符串 (如 \"A1:C3\") 为行列坐标 (1-based)\n */\nfunction parseRange(rangeStr: string): {\n top: number;\n left: number;\n bottom: number;\n right: number;\n} {\n const parts = rangeStr.split(':');\n const start = parseCellAddress(parts[0]);\n const end = parts[1] ? parseCellAddress(parts[1]) : start;\n return {\n top: start.row,\n left: start.col,\n bottom: end.row,\n right: end.col,\n };\n}\n\n/**\n * 解析单元格地址 (如 \"A1\") 为行列号 (1-based)\n */\nfunction parseCellAddress(addr: string): { row: number; col: number } {\n const match = addr.match(/^([A-Z]+)(\\d+)$/);\n if (!match) return { row: 1, col: 1 };\n\n const colStr = match[1];\n const row = parseInt(match[2], 10);\n\n let col = 0;\n for (let i = 0; i < colStr.length; i++) {\n col = col * 26 + (colStr.charCodeAt(i) - 64);\n }\n\n return { row, col };\n}\n\n/**\n * 将 exceljs Workbook 转换为 x-data-spreadsheet 数据格式\n */\nexport function convertWorkbookToSpreadsheetData(\n workbook: Workbook\n): XSheetData[] {\n const result: XSheetData[] = [];\n\n workbook.eachSheet((worksheet: Worksheet) => {\n const styles: XCellStyle[] = [];\n const styleMap = new Map<string, number>();\n const merges: string[] = [];\n const rows: Record<string, XRowData> = {};\n const cols: Record<string, { width?: number } | number> = {};\n\n // 列宽\n const colCount = worksheet.columnCount;\n for (let c = 1; c <= colCount; c++) {\n const col = worksheet.getColumn(c);\n if (col.width) {\n cols[String(c - 1)] = { width: Math.round(col.width * 7.5) };\n }\n }\n cols['len'] = Math.max(colCount, 26) as unknown as number;\n\n // 合并单元格\n const mergeMap = new Map<string, [number, number]>();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const worksheetModel = (worksheet as any).model;\n const mergeRanges: string[] = worksheetModel?.merges || [];\n\n for (const rangeStr of mergeRanges) {\n merges.push(rangeStr);\n const { top, left, bottom, right } = parseRange(rangeStr);\n const rowSpan = bottom - top;\n const colSpan = right - left;\n mergeMap.set(`${top - 1},${left - 1}`, [rowSpan, colSpan]);\n }\n\n // 行和单元格\n worksheet.eachRow({ includeEmpty: true }, (row, rowNumber) => {\n const rowIndex = rowNumber - 1; // x-spreadsheet 是 0-based\n const cellsObj: Record<string, XCellData> = {};\n\n row.eachCell({ includeEmpty: false }, (cell, colNumber) => {\n const colIndex = colNumber - 1;\n\n // 跳过合并区域中的非主单元格\n if (cell.isMerged && cell.master !== cell) return;\n\n const text = extractCellText(cell);\n const styleIndex = getOrCreateStyleIndex(cell, styles, styleMap);\n\n const cellData: XCellData = { text };\n if (styleIndex !== -1) cellData.style = styleIndex;\n\n const mergeKey = `${rowIndex},${colIndex}`;\n if (mergeMap.has(mergeKey)) {\n cellData.merge = mergeMap.get(mergeKey)!;\n }\n\n cellsObj[String(colIndex)] = cellData;\n });\n\n const rowData: XRowData = { cells: cellsObj };\n if (row.height) {\n rowData.height = Math.round(row.height * 1.333);\n }\n rows[String(rowIndex)] = rowData;\n });\n\n result.push({\n name: worksheet.name,\n styles,\n merges,\n rows,\n cols,\n });\n });\n\n return result;\n}\n","import { useState, useEffect, useRef, useCallback } from 'react';\nimport { FileSpreadsheet } from 'lucide-react';\nimport ExcelJS from 'exceljs';\nimport Spreadsheet from 'x-data-spreadsheet';\nimport { convertWorkbookToSpreadsheetData } from '../utils/excelDataConverter';\n\ninterface XlsxRendererProps {\n url: string;\n}\n\nexport const XlsxRenderer: React.FC<XlsxRendererProps> = ({ url }) => {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const spreadsheetRef = useRef<Spreadsheet | null>(null);\n const sheetDataRef = useRef<Record<string, unknown>[] | null>(null);\n const resizeObserverRef = useRef<ResizeObserver | null>(null);\n const resizeTimeoutRef = useRef<number | null>(null);\n const lastDimensionsRef = useRef({ width: 0, height: 0 });\n\n const calculateDimensions = useCallback(() => {\n if (!containerRef.current) return { width: 800, height: 600 };\n const rawWidth = containerRef.current.clientWidth;\n const rawHeight = containerRef.current.clientHeight;\n const width = rawWidth > 100 ? rawWidth : 800;\n const height = rawHeight > 100 ? rawHeight : 600;\n return { width, height };\n }, []);\n\n const mountSpreadsheet = useCallback(() => {\n if (!containerRef.current || !sheetDataRef.current) return;\n\n // 清空容器\n containerRef.current.innerHTML = '';\n spreadsheetRef.current = null;\n\n const { width, height } = calculateDimensions();\n const isMobile = width < 640;\n\n const s = new Spreadsheet(containerRef.current, {\n mode: 'read',\n showToolbar: false,\n showContextmenu: false,\n showGrid: true,\n row: {\n len: 100,\n height: 25,\n },\n col: {\n len: 26,\n width: isMobile ? 80 : 100,\n indexWidth: isMobile ? 40 : 60,\n minWidth: isMobile ? 40 : 60,\n },\n view: {\n height: () => height,\n width: () => width,\n },\n });\n\n s.loadData(sheetDataRef.current as unknown as Record<string, unknown>);\n spreadsheetRef.current = s;\n }, [calculateDimensions]);\n\n // 监听容器尺寸变化\n useEffect(() => {\n if (!containerRef.current) return;\n\n let isInitialRender = true;\n\n const updateDimensions = () => {\n if (isInitialRender) {\n isInitialRender = false;\n lastDimensionsRef.current = calculateDimensions();\n return;\n }\n\n const newDimensions = calculateDimensions();\n const lastDimensions = lastDimensionsRef.current;\n const widthDiff = Math.abs(lastDimensions.width - newDimensions.width);\n const heightDiff = Math.abs(lastDimensions.height - newDimensions.height);\n\n if (widthDiff < 10 && heightDiff < 10) return;\n\n lastDimensionsRef.current = newDimensions;\n\n if (resizeTimeoutRef.current) {\n clearTimeout(resizeTimeoutRef.current);\n }\n\n resizeTimeoutRef.current = window.setTimeout(() => {\n if (sheetDataRef.current) {\n mountSpreadsheet();\n }\n }, 500);\n };\n\n resizeObserverRef.current = new ResizeObserver(() => {\n updateDimensions();\n });\n\n resizeObserverRef.current.observe(containerRef.current);\n\n return () => {\n if (resizeObserverRef.current) {\n resizeObserverRef.current.disconnect();\n }\n if (resizeTimeoutRef.current) {\n clearTimeout(resizeTimeoutRef.current);\n }\n };\n }, [calculateDimensions, mountSpreadsheet]);\n\n useEffect(() => {\n let isMounted = true;\n\n const loadExcel = async () => {\n if (!containerRef.current) return;\n\n setLoading(true);\n setError(null);\n\n try {\n const response = await fetch(url, {\n mode: 'cors',\n credentials: 'omit',\n redirect: 'follow',\n });\n\n if (!response.ok) {\n if (response.status === 404) {\n throw new Error('Excel 文件不存在');\n } else if (response.status === 403) {\n throw new Error('无权限访问此文件');\n } else {\n throw new Error(`文件加载失败 (${response.status})`);\n }\n }\n\n const arrayBuffer = await response.arrayBuffer();\n\n if (arrayBuffer.byteLength === 0) {\n throw new Error('文件为空');\n }\n\n // 使用 exceljs 解析\n const workbook = new ExcelJS.Workbook();\n await workbook.xlsx.load(arrayBuffer);\n\n // 转换为 x-data-spreadsheet 数据格式\n const sheetData = convertWorkbookToSpreadsheetData(workbook);\n\n if (!isMounted) return;\n\n sheetDataRef.current = sheetData as unknown as Record<string, unknown>[];\n\n // 挂载 x-data-spreadsheet\n mountSpreadsheet();\n\n setLoading(false);\n } catch (err) {\n if (isMounted) {\n console.error('Excel 解析错误:', err);\n let errorMsg = 'Excel 文件解析失败';\n if (err instanceof Error) {\n errorMsg = err.message;\n }\n setError(errorMsg);\n setLoading(false);\n }\n }\n };\n\n const timer = setTimeout(() => {\n requestAnimationFrame(() => {\n loadExcel();\n });\n }, 100);\n\n return () => {\n isMounted = false;\n clearTimeout(timer);\n sheetDataRef.current = null;\n if (containerRef.current) {\n containerRef.current.innerHTML = '';\n }\n spreadsheetRef.current = null;\n };\n }, [url, mountSpreadsheet]);\n\n return (\n <div className=\"rfp-relative rfp-flex rfp-flex-col rfp-items-center rfp-w-full rfp-h-full\">\n {/* 加载状态 */}\n {loading && (\n <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-black/50 rfp-backdrop-blur-sm rfp-z-10 rfp-rounded-xl md:rfp-rounded-2xl\">\n <div className=\"rfp-text-center\">\n <div className=\"rfp-w-10 rfp-h-10 md:rfp-w-12 md:rfp-h-12 rfp-mx-auto rfp-mb-3 rfp-border-4 rfp-border-white/20 rfp-border-t-white rfp-rounded-full rfp-animate-spin\" />\n <p className=\"rfp-text-xs md:rfp-text-sm rfp-text-white/70 rfp-font-medium\">加载 Excel 中...</p>\n </div>\n </div>\n )}\n\n {/* 错误状态 */}\n {error && !loading && (\n <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-black/50 rfp-backdrop-blur-sm rfp-z-10 rfp-rounded-xl md:rfp-rounded-2xl\">\n <div className=\"rfp-text-center rfp-max-w-sm md:rfp-max-w-md rfp-px-4\">\n <div className=\"rfp-w-24 rfp-h-24 md:rfp-w-32 md:rfp-h-32 rfp-mx-auto rfp-mb-4 md:rfp-mb-6 rfp-rounded-2xl md:rfp-rounded-3xl rfp-bg-gradient-to-br rfp-from-green-500 rfp-via-emerald-500 rfp-to-teal-500 rfp-flex rfp-items-center rfp-justify-center rfp-shadow-2xl\">\n <FileSpreadsheet className=\"rfp-w-12 rfp-h-12 md:rfp-w-16 md:rfp-h-16 rfp-text-white\" />\n </div>\n <p className=\"rfp-text-lg md:rfp-text-xl rfp-text-white/90 rfp-mb-2 md:rfp-mb-3 rfp-font-medium\">Excel 加载失败</p>\n <p className=\"rfp-text-xs md:rfp-text-sm rfp-text-white/60 rfp-mb-4 md:rfp-mb-6\">\n {error}\n </p>\n <a\n href={url}\n download\n className=\"rfp-inline-flex rfp-items-center rfp-gap-2 rfp-px-4 rfp-py-2 md:rfp-px-6 md:rfp-py-3 rfp-bg-gradient-to-r rfp-from-purple-500 rfp-to-pink-500 rfp-text-white rfp-text-sm md:rfp-text-base rfp-rounded-lg md:rfp-rounded-xl hover:rfp-scale-105 rfp-transition-all rfp-shadow-lg\"\n >\n <svg className=\"rfp-w-4 rfp-h-4 md:rfp-w-5 md:rfp-h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\" />\n </svg>\n 下载文件\n </a>\n <p className=\"rfp-text-xs rfp-text-white/40 rfp-mt-3 md:rfp-mt-4\">\n 提示:可以使用 Microsoft Excel 或 WPS 打开\n </p>\n </div>\n </div>\n )}\n\n {/* Spreadsheet 容器 */}\n {!error && (\n <div\n ref={containerRef}\n className=\"xlsx-spreadsheet-container rfp-w-full rfp-h-full\"\n style={{ opacity: loading ? 0 : 1 }}\n />\n )}\n </div>\n );\n};\n","import { useState, useEffect, useRef, useCallback } from 'react';\nimport { Presentation } from 'lucide-react';\nimport { init } from 'pptx-preview';\n\ninterface PptxRendererProps {\n url: string;\n /** 是否平铺展示所有页面,默认 true */\n tiled?: boolean;\n}\n\nexport const PptxRenderer: React.FC<PptxRendererProps> = ({ url, tiled = true }) => {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [slideCount, setSlideCount] = useState(0);\n const containerRef = useRef<HTMLDivElement>(null);\n const previewerRef = useRef<ReturnType<typeof init> | null>(null);\n const resizeObserverRef = useRef<ResizeObserver | null>(null);\n const arrayBufferRef = useRef<ArrayBuffer | null>(null);\n const resizeTimeoutRef = useRef<number | null>(null);\n const lastDimensionsRef = useRef({ width: 0, height: 0 });\n\n // 计算容器尺寸,带回退逻辑\n const calculateDimensions = useCallback(() => {\n if (!containerRef.current) return { width: 960, height: 540 };\n const rawWidth = containerRef.current.clientWidth;\n const parentWidth = containerRef.current.parentElement?.clientWidth || 0;\n // 如果容器宽度太小,回退到父容器宽度或默认最小值\n const containerWidth = rawWidth > 100 ? rawWidth : (parentWidth > 100 ? parentWidth : 300);\n // 16:9 比例\n const height = Math.floor(containerWidth * 9 / 16);\n return { width: containerWidth, height };\n }, []);\n\n // 重新初始化预览器\n const reinitializePreviewer = useCallback(async () => {\n if (!containerRef.current || !arrayBufferRef.current || slideCount === 0) return;\n\n try {\n // 销毁旧的预览器\n if (previewerRef.current) {\n try {\n previewerRef.current.destroy();\n } catch {\n // 忽略销毁错误\n }\n }\n\n // 清空容器\n containerRef.current.innerHTML = '';\n\n // 获取当前容器尺寸\n const currentDimensions = calculateDimensions();\n\n // 初始化新的预览器,平铺模式下高度按页数计算\n const previewer = init(containerRef.current, {\n width: currentDimensions.width,\n height: tiled ? currentDimensions.height * slideCount : currentDimensions.height,\n mode: tiled ? 'list' : 'slide',\n });\n previewerRef.current = previewer;\n\n // 重新预览\n await previewer.preview(arrayBufferRef.current);\n } catch {\n // 重新初始化失败,静默处理\n }\n }, [calculateDimensions, tiled, slideCount]);\n\n // 监听容器尺寸变化\n useEffect(() => {\n if (!containerRef.current) return;\n\n let isInitialRender = true;\n\n const updateDimensions = () => {\n // 跳过初始渲染时的尺寸检查\n if (isInitialRender) {\n isInitialRender = false;\n lastDimensionsRef.current = calculateDimensions();\n return;\n }\n\n const newDimensions = calculateDimensions();\n\n // 检查尺寸是否真正变化(至少变化10px才触发)\n const lastDimensions = lastDimensionsRef.current;\n const widthDiff = Math.abs(lastDimensions.width - newDimensions.width);\n const heightDiff = Math.abs(lastDimensions.height - newDimensions.height);\n\n if (widthDiff < 10 && heightDiff < 10) {\n return;\n }\n\n // 更新最后的尺寸\n lastDimensionsRef.current = newDimensions;\n\n // 清除之前的定时器\n if (resizeTimeoutRef.current) {\n clearTimeout(resizeTimeoutRef.current);\n }\n\n // 防抖:800ms 后重新初始化预览器\n resizeTimeoutRef.current = window.setTimeout(() => {\n if (previewerRef.current && arrayBufferRef.current) {\n reinitializePreviewer();\n }\n }, 800);\n };\n\n // 创建 ResizeObserver\n resizeObserverRef.current = new ResizeObserver(() => {\n updateDimensions();\n });\n\n // 开始观察容器\n resizeObserverRef.current.observe(containerRef.current);\n\n return () => {\n if (resizeObserverRef.current) {\n resizeObserverRef.current.disconnect();\n }\n if (resizeTimeoutRef.current) {\n clearTimeout(resizeTimeoutRef.current);\n }\n };\n }, [calculateDimensions, reinitializePreviewer]);\n\n useEffect(() => {\n let isMounted = true;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const loadPptx = async () => {\n if (!containerRef.current) return;\n\n setLoading(true);\n setError(null);\n\n // 设置30秒超时\n timeoutId = setTimeout(() => {\n if (isMounted) {\n setError('加载超时,请检查网络或稍后重试');\n setLoading(false);\n }\n }, 30000);\n\n try {\n // 获取文件,处理 CORS 和重定向\n const response = await fetch(url, {\n mode: 'cors',\n credentials: 'omit',\n redirect: 'follow',\n });\n\n if (!response.ok) {\n if (response.status === 404) {\n throw new Error('PPT 文件不存在');\n } else if (response.status === 403) {\n throw new Error('无权限访问此文件');\n } else if (response.status >= 500) {\n throw new Error('服务器错误,请稍后重试');\n } else {\n throw new Error(`文件加载失败 (${response.status})`);\n }\n }\n\n const arrayBuffer = await response.arrayBuffer();\n\n // 验证文件大小\n if (arrayBuffer.byteLength === 0) {\n throw new Error('文件为空');\n }\n\n arrayBufferRef.current = arrayBuffer;\n\n if (!isMounted) return;\n\n // 步骤 1: 创建隐藏容器,预处理获取 slideCount\n const hiddenContainer = document.createElement('div');\n hiddenContainer.style.cssText = 'position:absolute;left:-9999px;top:-9999px;visibility:hidden';\n document.body.appendChild(hiddenContainer);\n\n try {\n // 在隐藏容器中初始化临时预览器获取页数\n const tempPreviewer = init(hiddenContainer, {\n width: 100,\n height: 100,\n mode: 'slide',\n });\n\n try {\n await tempPreviewer.preview(arrayBuffer);\n } catch {\n throw new Error('PPT 文件格式错误或已损坏');\n }\n\n const count = tempPreviewer.slideCount;\n\n if (!count || count === 0) {\n throw new Error('PPT 文件无有效页面');\n }\n\n // 销毁临时预览器\n tempPreviewer.destroy();\n\n if (!isMounted) return;\n\n // 保存 slideCount\n setSlideCount(count);\n\n // 步骤 2: 清空真实容器并初始化\n if (containerRef.current) {\n containerRef.current.innerHTML = '';\n }\n\n const currentDimensions = calculateDimensions();\n\n // 步骤 3: 初始化真实预览器,平铺模式下使用正确的总高度\n const previewer = init(containerRef.current, {\n width: currentDimensions.width,\n height: tiled ? currentDimensions.height * count : currentDimensions.height,\n mode: tiled ? 'list' : 'slide',\n });\n previewerRef.current = previewer;\n\n // 步骤 4: 预览 PPTX\n await previewer.preview(arrayBuffer);\n\n // 清除超时定时器\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n\n if (isMounted) {\n setLoading(false);\n }\n } finally {\n // 移除隐藏容器\n if (document.body.contains(hiddenContainer)) {\n document.body.removeChild(hiddenContainer);\n }\n }\n } catch (err) {\n // 清除超时定时器\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n\n if (isMounted) {\n let errorMsg = 'PPT 文件解析失败';\n if (err instanceof Error) {\n errorMsg = err.message;\n } else if (typeof err === 'string') {\n errorMsg = err;\n }\n setError(errorMsg);\n setLoading(false);\n }\n }\n };\n\n // 延迟执行,使用 requestAnimationFrame 确保 DOM 已准备好\n const timer = setTimeout(() => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n loadPptx();\n });\n });\n }, 150);\n\n // 清理函数\n return () => {\n isMounted = false;\n clearTimeout(timer);\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n arrayBufferRef.current = null;\n setSlideCount(0);\n if (previewerRef.current) {\n try {\n previewerRef.current.destroy();\n } catch {\n // 忽略销毁错误\n }\n }\n previewerRef.current = null;\n };\n }, [url, calculateDimensions, tiled]);\n\n return (\n <div className=\"rfp-relative rfp-flex rfp-flex-col rfp-items-center rfp-w-full rfp-h-full rfp-px-2 md:rfp-px-4\">\n {/* 加载状态 - 绝对定位覆盖 */}\n {loading && (\n <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-black/50 rfp-backdrop-blur-sm rfp-z-10 rfp-rounded-xl md:rfp-rounded-2xl\">\n <div className=\"rfp-text-center\">\n <div className=\"rfp-w-10 rfp-h-10 md:rfp-w-12 md:rfp-h-12 rfp-mx-auto rfp-mb-3 rfp-border-4 rfp-border-white/20 rfp-border-t-white rfp-rounded-full rfp-animate-spin\" />\n <p className=\"rfp-text-xs md:rfp-text-sm rfp-text-white/70 rfp-font-medium\">加载 PPT 中...</p>\n </div>\n </div>\n )}\n\n {/* 错误状态 - 绝对定位覆盖 */}\n {error && !loading && (\n <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-black/50 rfp-backdrop-blur-sm rfp-z-10 rfp-rounded-xl md:rfp-rounded-2xl\">\n <div className=\"rfp-text-center rfp-max-w-sm md:rfp-max-w-md rfp-px-4\">\n <div className=\"rfp-w-24 rfp-h-24 md:rfp-w-32 md:rfp-h-32 rfp-mx-auto rfp-mb-4 md:rfp-mb-6 rfp-rounded-2xl md:rfp-rounded-3xl rfp-bg-gradient-to-br rfp-from-orange-500 rfp-via-red-500 rfp-to-pink-500 rfp-flex rfp-items-center rfp-justify-center rfp-shadow-2xl\">\n <Presentation className=\"rfp-w-12 rfp-h-12 md:rfp-w-16 md:rfp-h-16 rfp-text-white\" />\n </div>\n <p className=\"rfp-text-lg md:rfp-text-xl rfp-text-white/90 rfp-mb-2 md:rfp-mb-3 rfp-font-medium\">PPT 加载失败</p>\n <p className=\"rfp-text-xs md:rfp-text-sm rfp-text-white/60 rfp-mb-4 md:rfp-mb-6\">\n {error}\n </p>\n <a\n href={url}\n download\n className=\"rfp-inline-flex rfp-items-center rfp-gap-2 rfp-px-4 rfp-py-2 md:rfp-px-6 md:rfp-py-3 rfp-bg-gradient-to-r rfp-from-purple-500 rfp-to-pink-500 rfp-text-white rfp-text-sm md:rfp-text-base rfp-rounded-lg md:rfp-rounded-xl hover:rfp-scale-105 rfp-transition-all rfp-shadow-lg\"\n >\n <svg className=\"rfp-w-4 rfp-h-4 md:rfp-w-5 md:rfp-h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\" />\n </svg>\n 下载文件\n </a>\n <p className=\"rfp-text-xs rfp-text-white/40 rfp-mt-3 md:rfp-mt-4\">\n 提示:可以使用 Microsoft PowerPoint 或 WPS 打开\n </p>\n </div>\n </div>\n )}\n\n {/* PPT 容器 - 仅在非错误状态下渲染 */}\n {!error && (\n <div\n ref={containerRef}\n className=\"pptx-wrapper rfp-w-full rfp-max-w-full md:rfp-max-w-6xl\"\n style={{ opacity: loading ? 0 : 1 }}\n />\n )}\n </div>\n );\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.arraysEqual = arraysEqual;\nexports.uInt2int = uInt2int;\nexports.toHexStr = toHexStr;\nexports.toHex1 = toHex1;\nexports.toHex2 = toHex2;\nexports.toHex4 = toHex4;\nexports.msftUuidStringify = msftUuidStringify;\nexports.emptyToNull = emptyToNull;\nexports.readSystemTime = readSystemTime;\nexports.readTransitionSystemTime = readTransitionSystemTime;\nexports.bin2HexUpper = bin2HexUpper;\n/**\n * @internal\n */\nfunction arraysEqual(a, b) {\n if (a === b)\n return true;\n if (a == null || b == null)\n return false;\n if (a.length != b.length)\n return false;\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i])\n return false;\n }\n return true;\n}\n/**\n * @internal\n */\nfunction uInt2int(data) {\n var result = new Array(data.length);\n for (var i = 0; i < data.length; i++) {\n result[i] = data[i] << 24 >> 24;\n }\n return result;\n}\n/**\n * @internal\n */\nfunction toHexStr(value, padding) {\n var text = \"\";\n while (value != 0) {\n text = \"0123456789abcdef\"[value & 15] + text;\n value >>= 4;\n text = \"0123456789abcdef\"[value & 15] + text;\n value >>= 4;\n }\n while (text.length < padding) {\n text = \"0\" + text;\n }\n return text;\n}\nvar hex = \"0123456789abcdef\";\n/**\n * byte to lower case hex string\n *\n * @internal\n */\nfunction toHex1(value) {\n return hex[(value >> 4) & 15]\n + hex[(value) & 15];\n}\n/**\n * little uint16 to lower case hex string\n *\n * @internal\n */\nfunction toHex2(value) {\n return hex[(value >> 12) & 15]\n + hex[(value >> 8) & 15]\n + hex[(value >> 4) & 15]\n + hex[(value) & 15];\n}\n/**\n * little uint32 to lower case hex string\n *\n * @internal\n */\nfunction toHex4(value) {\n return hex[(value >> 28) & 15]\n + hex[(value >> 24) & 15]\n + hex[(value >> 20) & 15]\n + hex[(value >> 16) & 15]\n + hex[(value >> 12) & 15]\n + hex[(value >> 8) & 15]\n + hex[(value >> 4) & 15]\n + hex[(value) & 15];\n}\n/**\n * Variant 2 UUIDs, historically used in Microsoft's COM/OLE libraries,\n * use a mixed-endian format, whereby the first three components of the UUID are little-endian,\n * and the last two are big-endian.\n * For example, `00112233-4455-6677-8899-aabbccddeeff` is encoded as the bytes\n * `33 22 11 00 55 44 77 66 88 99 aa bb cc dd ee ff`.\n *\n * @see https://en.wikipedia.org/wiki/Universally_unique_identifier\n * @internal\n */\nfunction msftUuidStringify(array, offset) {\n return \"\"\n + toHex1(array[offset + 3])\n + toHex1(array[offset + 2])\n + toHex1(array[offset + 1])\n + toHex1(array[offset + 0])\n + \"-\"\n + toHex1(array[offset + 5])\n + toHex1(array[offset + 4])\n + \"-\"\n + toHex1(array[offset + 7])\n + toHex1(array[offset + 6])\n + \"-\"\n + toHex1(array[offset + 8])\n + toHex1(array[offset + 9])\n + \"-\"\n + toHex1(array[offset + 10])\n + toHex1(array[offset + 11])\n + toHex1(array[offset + 12])\n + toHex1(array[offset + 13])\n + toHex1(array[offset + 14])\n + toHex1(array[offset + 15]);\n}\n/**\n * @internal\n */\nfunction emptyToNull(text) {\n return (text === \"\") ? null : text;\n}\n/**\n * @internal\n */\nfunction padNumber(value, maxLen) {\n return (\"\" + value).padStart(maxLen, '0');\n}\n/**\n * @internal\n */\nfunction readSystemTime(ds) {\n // SYSTEMTIME structure (minwinbase.h)\n // https://learn.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-systemtime\n var wYear = ds.readUint16();\n var wMonth = ds.readUint16();\n var wDayOfWeek = ds.readUint16();\n var wDay = ds.readUint16();\n var wHour = ds.readUint16();\n var wMinute = ds.readUint16();\n var wSecond = ds.readUint16();\n var wMilliseconds = ds.readUint16();\n var text = \"\".concat(padNumber(wYear, 4), \"-\").concat(padNumber(wMonth, 2), \"-\").concat(padNumber(wDay, 2), \"T\").concat(padNumber(wHour, 2), \":\").concat(padNumber(wMinute, 2), \":\").concat(padNumber(wSecond, 2), \"Z\");\n if (text === '0000-00-00T00:00:00Z') {\n return null;\n }\n else {\n return new Date(text);\n }\n}\n/**\n * @internal\n */\nfunction readTransitionSystemTime(ds) {\n // SYSTEMTIME structure (minwinbase.h)\n // https://learn.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-systemtime\n var wYear = ds.readUint16();\n var wMonth = ds.readUint16();\n var wDayOfWeek = ds.readUint16();\n var wDay = ds.readUint16();\n var wHour = ds.readUint16();\n var wMinute = ds.readUint16();\n var wSecond = ds.readUint16();\n var wMilliseconds = ds.readUint16();\n return {\n year: wYear,\n month: wMonth,\n dayOfWeek: wDayOfWeek,\n day: wDay,\n hour: wHour,\n minute: wMinute,\n };\n}\n/**\n * @internal\n */\nfunction bin2HexUpper(ds) {\n var text = \"\";\n while (!ds.isEof()) {\n text += toHex1(ds.readUint8());\n }\n return text.toUpperCase();\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar utils_1 = require(\"./utils\");\nexports.default = {\n FILE_HEADER: (0, utils_1.uInt2int)([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1]),\n MSG: {\n UNUSED_BLOCK: -1,\n END_OF_CHAIN: -2,\n S_BIG_BLOCK_SIZE: 0x0200,\n S_BIG_BLOCK_MARK: 9,\n L_BIG_BLOCK_SIZE: 0x1000,\n L_BIG_BLOCK_MARK: 12,\n SMALL_BLOCK_SIZE: 0x0040,\n BIG_BLOCK_MIN_DOC_SIZE: 0x1000,\n HEADER: {\n PROPERTY_START_OFFSET: 0x30,\n BAT_START_OFFSET: 0x4c,\n BAT_COUNT_OFFSET: 0x2C,\n SBAT_START_OFFSET: 0x3C,\n SBAT_COUNT_OFFSET: 0x40,\n XBAT_START_OFFSET: 0x44,\n XBAT_COUNT_OFFSET: 0x48\n },\n PROP: {\n NO_INDEX: -1,\n PROPERTY_SIZE: 0x0080,\n NAME_SIZE_OFFSET: 0x40,\n MAX_NAME_LENGTH: ( /*NAME_SIZE_OFFSET*/0x40 / 2) - 1,\n TYPE_OFFSET: 0x42,\n PREVIOUS_PROPERTY_OFFSET: 0x44,\n NEXT_PROPERTY_OFFSET: 0x48,\n CHILD_PROPERTY_OFFSET: 0x4C,\n START_BLOCK_OFFSET: 0x74,\n SIZE_OFFSET: 0x78,\n TYPE_ENUM: {\n UNALLOCATED: 0,\n DIRECTORY: 1,\n DOCUMENT: 2,\n ROOT: 5\n }\n },\n FIELD: {\n PREFIX: {\n ATTACHMENT: '__attach_version1.0',\n RECIPIENT: '__recip_version1.0',\n DOCUMENT: '__substg1.',\n NAMEID: '__nameid_version1.0'\n },\n // example (use fields as needed)\n NAME_MAPPING: {\n // email specific\n '001a': 'messageClass',\n '0037': 'subject',\n '0c1a': 'senderName',\n '0c1e': 'senderAddressType',\n '0c1f': 'senderEmail',\n '5d01': 'senderSmtpAddress',\n '5d02': 'sentRepresentingSmtpAddress',\n '5d0a': 'creatorSMTPAddress',\n '5d0b': 'lastModifierSMTPAddress',\n '1000': 'body',\n '007d': 'headers',\n '1009': 'compressedRtf',\n '3ffa': 'lastModifierName',\n '0039': 'clientSubmitTime',\n '0e06': 'messageDeliveryTime',\n '3fde': 'internetCodepage',\n '3ffd': 'messageCodepage',\n '3ff1': 'messageLocaleId',\n '0e07': 'messageFlags',\n '1035': 'messageId',\n '3fd9': 'preview',\n // attachment specific\n '3007': 'creationTime',\n '3008': 'lastModificationTime',\n '3703': 'extension',\n '3704': 'fileNameShort',\n '3707': 'fileName',\n '3712': 'pidContentId',\n '7ffe': 'attachmentHidden',\n '370e': 'attachMimeTag',\n // recipient specific\n '0c15': 'recipType',\n '3001': 'name',\n '3002': 'addressType',\n '3003': 'email',\n '39fe': 'smtpAddress',\n // contact specific\n '3a18': 'departmentName',\n '3a44': 'middleName',\n '3a05': 'generation',\n '3a11': 'surname',\n '3a27': 'addressCity',\n '3a16': 'companyName',\n '3a24': 'businessFaxNumber',\n '3a29': 'streetAddress',\n '3a51': 'businessHomePage',\n '3a06': 'givenName',\n '3a09': 'homeTelephoneNumber',\n '3a15': 'postalAddress',\n '3a17': 'title',\n '3a1c': 'mobileTelephoneNumber',\n '3a26': 'country',\n '3a28': 'stateOrProvince',\n '3a2a': 'postalCode',\n '3a45': 'displayNamePrefix',\n '0070': 'conversationTopic',\n '0e1d': 'normalizedSubject',\n '3a08': 'businessTelephoneNumber',\n '3a0d': 'location',\n },\n FULL_NAME_MAPPING: {\n '1013001f': 'bodyHtml',\n '10130102': 'html',\n },\n PIDLID_MAPPING: {\n // PSETID_Common\n \"00062008-0000-0000-c000-000000000046\": {\n 0x00008520: { id: \"PidLidVerbStream\", },\n 0x00008524: { id: \"PidLidVerbResponse\", dispid: \"votingResponse\", },\n 0x00008580: { id: \"PidLidInternetAccountName\", dispid: \"inetAcctName\", },\n },\n // PSETID_Appointment\n \"00062002-0000-0000-c000-000000000046\": {\n 0x0000820D: { id: \"PidLidAppointmentStartWhole\", dispid: \"apptStartWhole\", },\n 0x0000820E: { id: \"PidLidAppointmentEndWhole\", dispid: \"apptEndWhole\", },\n 0x00008235: { id: \"PidLidClipStart\", dispid: \"clipStart\", },\n 0x00008236: { id: \"PidLidClipEnd\", dispid: \"clipEnd\", },\n 0x00008233: { id: \"PidLidTimeZoneStruct\", dispid: \"timeZoneStruct\" },\n 0x00008234: { id: \"PidLidTimeZoneDescription\", dispid: \"timeZoneDesc\" },\n 0x0000825E: { id: \"PidLidAppointmentTimeZoneDefinitionStartDisplay\", dispid: \"apptTZDefStartDisplay\" },\n 0x0000825F: { id: \"PidLidAppointmentTimeZoneDefinitionEndDisplay\", dispid: \"apptTZDefEndDisplay\" },\n 0x00008260: { id: \"PidLidAppointmentTimeZoneDefinitionRecur\", dispid: \"apptTZDefRecur\" },\n 0x00008216: { id: \"PidLidAppointmentRecur\", dispid: \"apptRecur\" },\n 0x00008208: { id: \"PidLidLocation\", dispid: \"apptLocation\", },\n },\n // PSETID_Address\n \"00062004-0000-0000-c000-000000000046\": {\n 0x0000802c: { id: \"dispidYomiFirstName\", dispid: \"yomiFirstName\", },\n 0x00008083: { id: \"dispidEmail1EmailAddress\", dispid: \"email1EmailAddress\", },\n 0x0000802e: { id: \"dispidYomiCompanyName\", dispid: \"yomiCompanyName\", },\n 0x000080d2: { id: \"PidLidFax3AddressType\", dispid: \"fax3AddrType\", },\n 0x00008080: { id: \"PidLidEmail1DisplayName\", dispid: \"email1DisplayName\", },\n 0x00008084: { id: \"PidLidEmail1OriginalDisplayName\", dispid: \"email1OriginalDisplayName\", },\n 0x00008005: { id: \"PidLidFileUnder\", dispid: \"fileUnder\", },\n 0x0000802d: { id: \"PidLidYomiLastName\", dispid: \"yomiLastName\", },\n 0x000080b2: { id: \"PidLidFax1AddressType\", dispid: \"fax1AddrType\", },\n 0x000080c3: { id: \"PidLidFax2EmailAddress\", dispid: \"fax2EmailAddress\", },\n 0x00008046: { id: \"PidLidWorkAddressCity\", dispid: \"workAddressCity\", },\n 0x000080dd: { id: \"PidLidAddressCountryCode\", dispid: \"addressCountryCode\", },\n 0x000080c2: { id: \"PidLidFax2AddressType\", dispid: \"fax2AddrType\", },\n 0x000080c4: { id: \"PidLidFax2OriginalDisplayName\", dispid: \"fax2OriginalDisplayName\", },\n 0x00008048: { id: \"PidLidWorkAddressPostalCode\", dispid: \"workAddressPostalCode\", },\n 0x00008045: { id: \"PidLidWorkAddressStreet\", dispid: \"workAddressStreet\", },\n 0x00008047: { id: \"PidLidWorkAddressState\", dispid: \"workAddressState\", },\n 0x000080db: { id: \"PidLidWorkAddressCountryCode\", dispid: \"workAddressCountryCode\", },\n 0x00008049: { id: \"PidLidWorkAddressCountry\", dispid: \"workAddressCountry\", },\n 0x0000802b: { id: \"PidLidHtml\", dispid: \"contactHtml\", },\n 0x0000801b: { id: \"PidLidWorkAddress\", dispid: \"workAddress\", },\n 0x000080b4: { id: \"PidLidFax1OriginalDisplayName\", dispid: \"fax1OriginalDisplayName\", },\n 0x00008062: { id: \"PidLidInstantMessagingAddress\", dispid: \"instMsg\", },\n 0x00008010: { id: \"PidLidDepartment\", dispid: \"department\", },\n 0x000080b3: { id: \"PidLidFax1EmailAddress\", dispid: \"fax1EmailAddress\", },\n 0x000080d4: { id: \"PidLidFax3OriginalDisplayName\", dispid: \"fax3OriginalDisplayName\", },\n 0x000080d3: { id: \"PidLidFax3EmailAddress\", dispid: \"fax3EmailAddress\", },\n },\n // PSETID_Meeting\n \"6ed8da90-450b-101b-98da-00aa003f1305\": {\n 0x00000003: { id: \"PidLidGlobalObjectId\", dispid: \"globalAppointmentID\", },\n 0x00000028: { id: \"PidLidOldLocation\", dispid: \"apptOldLocation\", },\n },\n },\n CLASS_MAPPING: {\n ATTACHMENT_DATA: '3701'\n },\n TYPE_MAPPING: {\n '001e': 'string',\n '001f': 'unicode',\n '0040': 'time',\n '0102': 'binary',\n '0003': 'integer',\n '000b': 'boolean',\n },\n DIR_TYPE: {\n INNER_MSG: '000d'\n }\n }\n }\n};\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n var arr = new Uint8Array(1)\n var proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n var buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n var valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n var b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(\n value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n )\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n var length = byteLength(string, encoding) | 0\n var buf = createBuffer(length)\n\n var actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n var buf = createBuffer(length)\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n var copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n var buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n var buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n Buffer.from(buf).copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n var len = string.length\n var mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n var strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (var i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n var len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nvar hexSliceLookupTable = (function () {\n var alphabet = '0123456789abcdef'\n var table = new Array(256)\n for (var i = 0; i < 16; ++i) {\n var i16 = i * 16\n for (var j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n","/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue\n if (key === 'SlowBuffer' || key === 'Buffer') continue\n safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue\n if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n }\n if (value && typeof value.length === 'undefined') {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n }\n return Buffer(value, encodingOrOffset, length)\n }\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n }\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n var buf = Buffer(size)\n if (!fill || fill.length === 0) {\n buf.fill(0)\n } else if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n return buf\n }\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n } catch (e) {\n // we can't determine kStringMaxLength in environments where process.binding\n // is unsupported, so let's not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n }\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n }\n}\n\nmodule.exports = safer\n","\"use strict\";\n\nvar BOMChar = '\\uFEFF';\n\nexports.PrependBOM = PrependBOMWrapper\nfunction PrependBOMWrapper(encoder, options) {\n this.encoder = encoder;\n this.addBOM = true;\n}\n\nPrependBOMWrapper.prototype.write = function(str) {\n if (this.addBOM) {\n str = BOMChar + str;\n this.addBOM = false;\n }\n\n return this.encoder.write(str);\n}\n\nPrependBOMWrapper.prototype.end = function() {\n return this.encoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n\nexports.StripBOM = StripBOMWrapper;\nfunction StripBOMWrapper(decoder, options) {\n this.decoder = decoder;\n this.pass = false;\n this.options = options || {};\n}\n\nStripBOMWrapper.prototype.write = function(buf) {\n var res = this.decoder.write(buf);\n if (this.pass || !res)\n return res;\n\n if (res[0] === BOMChar) {\n res = res.slice(1);\n if (typeof this.options.stripBOM === 'function')\n this.options.stripBOM();\n }\n\n this.pass = true;\n return res;\n}\n\nStripBOMWrapper.prototype.end = function() {\n return this.decoder.end();\n}\n\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Export Node.js internal encodings.\n\nmodule.exports = {\n // Encodings\n utf8: { type: \"_internal\", bomAware: true},\n cesu8: { type: \"_internal\", bomAware: true},\n unicode11utf8: \"utf8\",\n\n ucs2: { type: \"_internal\", bomAware: true},\n utf16le: \"ucs2\",\n\n binary: { type: \"_internal\" },\n base64: { type: \"_internal\" },\n hex: { type: \"_internal\" },\n\n // Codec.\n _internal: InternalCodec,\n};\n\n//------------------------------------------------------------------------------\n\nfunction InternalCodec(codecOptions, iconv) {\n this.enc = codecOptions.encodingName;\n this.bomAware = codecOptions.bomAware;\n\n if (this.enc === \"base64\")\n this.encoder = InternalEncoderBase64;\n else if (this.enc === \"cesu8\") {\n this.enc = \"utf8\"; // Use utf8 for decoding.\n this.encoder = InternalEncoderCesu8;\n\n // Add decoder for versions of Node not supporting CESU-8\n if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '💩') {\n this.decoder = InternalDecoderCesu8;\n this.defaultCharUnicode = iconv.defaultCharUnicode;\n }\n }\n}\n\nInternalCodec.prototype.encoder = InternalEncoder;\nInternalCodec.prototype.decoder = InternalDecoder;\n\n//------------------------------------------------------------------------------\n\n// We use node.js internal decoder. Its signature is the same as ours.\nvar StringDecoder = require('string_decoder').StringDecoder;\n\nif (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.\n StringDecoder.prototype.end = function() {};\n\n\nfunction InternalDecoder(options, codec) {\n this.decoder = new StringDecoder(codec.enc);\n}\n\nInternalDecoder.prototype.write = function(buf) {\n if (!Buffer.isBuffer(buf)) {\n buf = Buffer.from(buf);\n }\n\n return this.decoder.write(buf);\n}\n\nInternalDecoder.prototype.end = function() {\n return this.decoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n// Encoder is mostly trivial\n\nfunction InternalEncoder(options, codec) {\n this.enc = codec.enc;\n}\n\nInternalEncoder.prototype.write = function(str) {\n return Buffer.from(str, this.enc);\n}\n\nInternalEncoder.prototype.end = function() {\n}\n\n\n//------------------------------------------------------------------------------\n// Except base64 encoder, which must keep its state.\n\nfunction InternalEncoderBase64(options, codec) {\n this.prevStr = '';\n}\n\nInternalEncoderBase64.prototype.write = function(str) {\n str = this.prevStr + str;\n var completeQuads = str.length - (str.length % 4);\n this.prevStr = str.slice(completeQuads);\n str = str.slice(0, completeQuads);\n\n return Buffer.from(str, \"base64\");\n}\n\nInternalEncoderBase64.prototype.end = function() {\n return Buffer.from(this.prevStr, \"base64\");\n}\n\n\n//------------------------------------------------------------------------------\n// CESU-8 encoder is also special.\n\nfunction InternalEncoderCesu8(options, codec) {\n}\n\nInternalEncoderCesu8.prototype.write = function(str) {\n var buf = Buffer.alloc(str.length * 3), bufIdx = 0;\n for (var i = 0; i < str.length; i++) {\n var charCode = str.charCodeAt(i);\n // Naive implementation, but it works because CESU-8 is especially easy\n // to convert from UTF-16 (which all JS strings are encoded in).\n if (charCode < 0x80)\n buf[bufIdx++] = charCode;\n else if (charCode < 0x800) {\n buf[bufIdx++] = 0xC0 + (charCode >>> 6);\n buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n }\n else { // charCode will always be < 0x10000 in javascript.\n buf[bufIdx++] = 0xE0 + (charCode >>> 12);\n buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f);\n buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n }\n }\n return buf.slice(0, bufIdx);\n}\n\nInternalEncoderCesu8.prototype.end = function() {\n}\n\n//------------------------------------------------------------------------------\n// CESU-8 decoder is not implemented in Node v4.0+\n\nfunction InternalDecoderCesu8(options, codec) {\n this.acc = 0;\n this.contBytes = 0;\n this.accBytes = 0;\n this.defaultCharUnicode = codec.defaultCharUnicode;\n}\n\nInternalDecoderCesu8.prototype.write = function(buf) {\n var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, \n res = '';\n for (var i = 0; i < buf.length; i++) {\n var curByte = buf[i];\n if ((curByte & 0xC0) !== 0x80) { // Leading byte\n if (contBytes > 0) { // Previous code is invalid\n res += this.defaultCharUnicode;\n contBytes = 0;\n }\n\n if (curByte < 0x80) { // Single-byte code\n res += String.fromCharCode(curByte);\n } else if (curByte < 0xE0) { // Two-byte code\n acc = curByte & 0x1F;\n contBytes = 1; accBytes = 1;\n } else if (curByte < 0xF0) { // Three-byte code\n acc = curByte & 0x0F;\n contBytes = 2; accBytes = 1;\n } else { // Four or more are not supported for CESU-8.\n res += this.defaultCharUnicode;\n }\n } else { // Continuation byte\n if (contBytes > 0) { // We're waiting for it.\n acc = (acc << 6) | (curByte & 0x3f);\n contBytes--; accBytes++;\n if (contBytes === 0) {\n // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)\n if (accBytes === 2 && acc < 0x80 && acc > 0)\n res += this.defaultCharUnicode;\n else if (accBytes === 3 && acc < 0x800)\n res += this.defaultCharUnicode;\n else\n // Actually add character.\n res += String.fromCharCode(acc);\n }\n } else { // Unexpected continuation byte\n res += this.defaultCharUnicode;\n }\n }\n }\n this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes;\n return res;\n}\n\nInternalDecoderCesu8.prototype.end = function() {\n var res = 0;\n if (this.contBytes > 0)\n res += this.defaultCharUnicode;\n return res;\n}\n","'use strict';\n\nvar Buffer = require('safer-buffer').Buffer;\n\n// == UTF32-LE/BE codec. ==========================================================\n\nexports._utf32 = Utf32Codec;\n\nfunction Utf32Codec(codecOptions, iconv) {\n this.iconv = iconv;\n this.bomAware = true;\n this.isLE = codecOptions.isLE;\n}\n\nexports.utf32le = { type: '_utf32', isLE: true };\nexports.utf32be = { type: '_utf32', isLE: false };\n\n// Aliases\nexports.ucs4le = 'utf32le';\nexports.ucs4be = 'utf32be';\n\nUtf32Codec.prototype.encoder = Utf32Encoder;\nUtf32Codec.prototype.decoder = Utf32Decoder;\n\n// -- Encoding\n\nfunction Utf32Encoder(options, codec) {\n this.isLE = codec.isLE;\n this.highSurrogate = 0;\n}\n\nUtf32Encoder.prototype.write = function(str) {\n var src = Buffer.from(str, 'ucs2');\n var dst = Buffer.alloc(src.length * 2);\n var write32 = this.isLE ? dst.writeUInt32LE : dst.writeUInt32BE;\n var offset = 0;\n\n for (var i = 0; i < src.length; i += 2) {\n var code = src.readUInt16LE(i);\n var isHighSurrogate = (0xD800 <= code && code < 0xDC00);\n var isLowSurrogate = (0xDC00 <= code && code < 0xE000);\n\n if (this.highSurrogate) {\n if (isHighSurrogate || !isLowSurrogate) {\n // There shouldn't be two high surrogates in a row, nor a high surrogate which isn't followed by a low\n // surrogate. If this happens, keep the pending high surrogate as a stand-alone semi-invalid character\n // (technically wrong, but expected by some applications, like Windows file names).\n write32.call(dst, this.highSurrogate, offset);\n offset += 4;\n }\n else {\n // Create 32-bit value from high and low surrogates;\n var codepoint = (((this.highSurrogate - 0xD800) << 10) | (code - 0xDC00)) + 0x10000;\n\n write32.call(dst, codepoint, offset);\n offset += 4;\n this.highSurrogate = 0;\n\n continue;\n }\n }\n\n if (isHighSurrogate)\n this.highSurrogate = code;\n else {\n // Even if the current character is a low surrogate, with no previous high surrogate, we'll\n // encode it as a semi-invalid stand-alone character for the same reasons expressed above for\n // unpaired high surrogates.\n write32.call(dst, code, offset);\n offset += 4;\n this.highSurrogate = 0;\n }\n }\n\n if (offset < dst.length)\n dst = dst.slice(0, offset);\n\n return dst;\n};\n\nUtf32Encoder.prototype.end = function() {\n // Treat any leftover high surrogate as a semi-valid independent character.\n if (!this.highSurrogate)\n return;\n\n var buf = Buffer.alloc(4);\n\n if (this.isLE)\n buf.writeUInt32LE(this.highSurrogate, 0);\n else\n buf.writeUInt32BE(this.highSurrogate, 0);\n\n this.highSurrogate = 0;\n\n return buf;\n};\n\n// -- Decoding\n\nfunction Utf32Decoder(options, codec) {\n this.isLE = codec.isLE;\n this.badChar = codec.iconv.defaultCharUnicode.charCodeAt(0);\n this.overflow = [];\n}\n\nUtf32Decoder.prototype.write = function(src) {\n if (src.length === 0)\n return '';\n\n var i = 0;\n var codepoint = 0;\n var dst = Buffer.alloc(src.length + 4);\n var offset = 0;\n var isLE = this.isLE;\n var overflow = this.overflow;\n var badChar = this.badChar;\n\n if (overflow.length > 0) {\n for (; i < src.length && overflow.length < 4; i++)\n overflow.push(src[i]);\n \n if (overflow.length === 4) {\n // NOTE: codepoint is a signed int32 and can be negative.\n // NOTE: We copied this block from below to help V8 optimize it (it works with array, not buffer).\n if (isLE) {\n codepoint = overflow[i] | (overflow[i+1] << 8) | (overflow[i+2] << 16) | (overflow[i+3] << 24);\n } else {\n codepoint = overflow[i+3] | (overflow[i+2] << 8) | (overflow[i+1] << 16) | (overflow[i] << 24);\n }\n overflow.length = 0;\n\n offset = _writeCodepoint(dst, offset, codepoint, badChar);\n }\n }\n\n // Main loop. Should be as optimized as possible.\n for (; i < src.length - 3; i += 4) {\n // NOTE: codepoint is a signed int32 and can be negative.\n if (isLE) {\n codepoint = src[i] | (src[i+1] << 8) | (src[i+2] << 16) | (src[i+3] << 24);\n } else {\n codepoint = src[i+3] | (src[i+2] << 8) | (src[i+1] << 16) | (src[i] << 24);\n }\n offset = _writeCodepoint(dst, offset, codepoint, badChar);\n }\n\n // Keep overflowing bytes.\n for (; i < src.length; i++) {\n overflow.push(src[i]);\n }\n\n return dst.slice(0, offset).toString('ucs2');\n};\n\nfunction _writeCodepoint(dst, offset, codepoint, badChar) {\n // NOTE: codepoint is signed int32 and can be negative. We keep it that way to help V8 with optimizations.\n if (codepoint < 0 || codepoint > 0x10FFFF) {\n // Not a valid Unicode codepoint\n codepoint = badChar;\n } \n\n // Ephemeral Planes: Write high surrogate.\n if (codepoint >= 0x10000) {\n codepoint -= 0x10000;\n\n var high = 0xD800 | (codepoint >> 10);\n dst[offset++] = high & 0xff;\n dst[offset++] = high >> 8;\n\n // Low surrogate is written below.\n var codepoint = 0xDC00 | (codepoint & 0x3FF);\n }\n\n // Write BMP char or low surrogate.\n dst[offset++] = codepoint & 0xff;\n dst[offset++] = codepoint >> 8;\n\n return offset;\n};\n\nUtf32Decoder.prototype.end = function() {\n this.overflow.length = 0;\n};\n\n// == UTF-32 Auto codec =============================================================\n// Decoder chooses automatically from UTF-32LE and UTF-32BE using BOM and space-based heuristic.\n// Defaults to UTF-32LE. http://en.wikipedia.org/wiki/UTF-32\n// Encoder/decoder default can be changed: iconv.decode(buf, 'utf32', {defaultEncoding: 'utf-32be'});\n\n// Encoder prepends BOM (which can be overridden with (addBOM: false}).\n\nexports.utf32 = Utf32AutoCodec;\nexports.ucs4 = 'utf32';\n\nfunction Utf32AutoCodec(options, iconv) {\n this.iconv = iconv;\n}\n\nUtf32AutoCodec.prototype.encoder = Utf32AutoEncoder;\nUtf32AutoCodec.prototype.decoder = Utf32AutoDecoder;\n\n// -- Encoding\n\nfunction Utf32AutoEncoder(options, codec) {\n options = options || {};\n\n if (options.addBOM === undefined)\n options.addBOM = true;\n\n this.encoder = codec.iconv.getEncoder(options.defaultEncoding || 'utf-32le', options);\n}\n\nUtf32AutoEncoder.prototype.write = function(str) {\n return this.encoder.write(str);\n};\n\nUtf32AutoEncoder.prototype.end = function() {\n return this.encoder.end();\n};\n\n// -- Decoding\n\nfunction Utf32AutoDecoder(options, codec) {\n this.decoder = null;\n this.initialBufs = [];\n this.initialBufsLen = 0;\n this.options = options || {};\n this.iconv = codec.iconv;\n}\n\nUtf32AutoDecoder.prototype.write = function(buf) {\n if (!this.decoder) { \n // Codec is not chosen yet. Accumulate initial bytes.\n this.initialBufs.push(buf);\n this.initialBufsLen += buf.length;\n\n if (this.initialBufsLen < 32) // We need more bytes to use space heuristic (see below)\n return '';\n\n // We have enough bytes -> detect endianness.\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var resStr = '';\n for (var i = 0; i < this.initialBufs.length; i++)\n resStr += this.decoder.write(this.initialBufs[i]);\n\n this.initialBufs.length = this.initialBufsLen = 0;\n return resStr;\n }\n\n return this.decoder.write(buf);\n};\n\nUtf32AutoDecoder.prototype.end = function() {\n if (!this.decoder) {\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var resStr = '';\n for (var i = 0; i < this.initialBufs.length; i++)\n resStr += this.decoder.write(this.initialBufs[i]);\n\n var trail = this.decoder.end();\n if (trail)\n resStr += trail;\n\n this.initialBufs.length = this.initialBufsLen = 0;\n return resStr;\n }\n\n return this.decoder.end();\n};\n\nfunction detectEncoding(bufs, defaultEncoding) {\n var b = [];\n var charsProcessed = 0;\n var invalidLE = 0, invalidBE = 0; // Number of invalid chars when decoded as LE or BE.\n var bmpCharsLE = 0, bmpCharsBE = 0; // Number of BMP chars when decoded as LE or BE.\n\n outer_loop:\n for (var i = 0; i < bufs.length; i++) {\n var buf = bufs[i];\n for (var j = 0; j < buf.length; j++) {\n b.push(buf[j]);\n if (b.length === 4) {\n if (charsProcessed === 0) {\n // Check BOM first.\n if (b[0] === 0xFF && b[1] === 0xFE && b[2] === 0 && b[3] === 0) {\n return 'utf-32le';\n }\n if (b[0] === 0 && b[1] === 0 && b[2] === 0xFE && b[3] === 0xFF) {\n return 'utf-32be';\n }\n }\n\n if (b[0] !== 0 || b[1] > 0x10) invalidBE++;\n if (b[3] !== 0 || b[2] > 0x10) invalidLE++;\n\n if (b[0] === 0 && b[1] === 0 && (b[2] !== 0 || b[3] !== 0)) bmpCharsBE++;\n if ((b[0] !== 0 || b[1] !== 0) && b[2] === 0 && b[3] === 0) bmpCharsLE++;\n\n b.length = 0;\n charsProcessed++;\n\n if (charsProcessed >= 100) {\n break outer_loop;\n }\n }\n }\n }\n\n // Make decisions.\n if (bmpCharsBE - invalidBE > bmpCharsLE - invalidLE) return 'utf-32be';\n if (bmpCharsBE - invalidBE < bmpCharsLE - invalidLE) return 'utf-32le';\n\n // Couldn't decide (likely all zeros or not enough data).\n return defaultEncoding || 'utf-32le';\n}\n","\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js\n\n// == UTF16-BE codec. ==========================================================\n\nexports.utf16be = Utf16BECodec;\nfunction Utf16BECodec() {\n}\n\nUtf16BECodec.prototype.encoder = Utf16BEEncoder;\nUtf16BECodec.prototype.decoder = Utf16BEDecoder;\nUtf16BECodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf16BEEncoder() {\n}\n\nUtf16BEEncoder.prototype.write = function(str) {\n var buf = Buffer.from(str, 'ucs2');\n for (var i = 0; i < buf.length; i += 2) {\n var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp;\n }\n return buf;\n}\n\nUtf16BEEncoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf16BEDecoder() {\n this.overflowByte = -1;\n}\n\nUtf16BEDecoder.prototype.write = function(buf) {\n if (buf.length == 0)\n return '';\n\n var buf2 = Buffer.alloc(buf.length + 1),\n i = 0, j = 0;\n\n if (this.overflowByte !== -1) {\n buf2[0] = buf[0];\n buf2[1] = this.overflowByte;\n i = 1; j = 2;\n }\n\n for (; i < buf.length-1; i += 2, j+= 2) {\n buf2[j] = buf[i+1];\n buf2[j+1] = buf[i];\n }\n\n this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1;\n\n return buf2.slice(0, j).toString('ucs2');\n}\n\nUtf16BEDecoder.prototype.end = function() {\n this.overflowByte = -1;\n}\n\n\n// == UTF-16 codec =============================================================\n// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.\n// Defaults to UTF-16LE, as it's prevalent and default in Node.\n// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le\n// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});\n\n// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).\n\nexports.utf16 = Utf16Codec;\nfunction Utf16Codec(codecOptions, iconv) {\n this.iconv = iconv;\n}\n\nUtf16Codec.prototype.encoder = Utf16Encoder;\nUtf16Codec.prototype.decoder = Utf16Decoder;\n\n\n// -- Encoding (pass-through)\n\nfunction Utf16Encoder(options, codec) {\n options = options || {};\n if (options.addBOM === undefined)\n options.addBOM = true;\n this.encoder = codec.iconv.getEncoder('utf-16le', options);\n}\n\nUtf16Encoder.prototype.write = function(str) {\n return this.encoder.write(str);\n}\n\nUtf16Encoder.prototype.end = function() {\n return this.encoder.end();\n}\n\n\n// -- Decoding\n\nfunction Utf16Decoder(options, codec) {\n this.decoder = null;\n this.initialBufs = [];\n this.initialBufsLen = 0;\n\n this.options = options || {};\n this.iconv = codec.iconv;\n}\n\nUtf16Decoder.prototype.write = function(buf) {\n if (!this.decoder) {\n // Codec is not chosen yet. Accumulate initial bytes.\n this.initialBufs.push(buf);\n this.initialBufsLen += buf.length;\n \n if (this.initialBufsLen < 16) // We need more bytes to use space heuristic (see below)\n return '';\n\n // We have enough bytes -> detect endianness.\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var resStr = '';\n for (var i = 0; i < this.initialBufs.length; i++)\n resStr += this.decoder.write(this.initialBufs[i]);\n\n this.initialBufs.length = this.initialBufsLen = 0;\n return resStr;\n }\n\n return this.decoder.write(buf);\n}\n\nUtf16Decoder.prototype.end = function() {\n if (!this.decoder) {\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var resStr = '';\n for (var i = 0; i < this.initialBufs.length; i++)\n resStr += this.decoder.write(this.initialBufs[i]);\n\n var trail = this.decoder.end();\n if (trail)\n resStr += trail;\n\n this.initialBufs.length = this.initialBufsLen = 0;\n return resStr;\n }\n return this.decoder.end();\n}\n\nfunction detectEncoding(bufs, defaultEncoding) {\n var b = [];\n var charsProcessed = 0;\n var asciiCharsLE = 0, asciiCharsBE = 0; // Number of ASCII chars when decoded as LE or BE.\n\n outer_loop:\n for (var i = 0; i < bufs.length; i++) {\n var buf = bufs[i];\n for (var j = 0; j < buf.length; j++) {\n b.push(buf[j]);\n if (b.length === 2) {\n if (charsProcessed === 0) {\n // Check BOM first.\n if (b[0] === 0xFF && b[1] === 0xFE) return 'utf-16le';\n if (b[0] === 0xFE && b[1] === 0xFF) return 'utf-16be';\n }\n\n if (b[0] === 0 && b[1] !== 0) asciiCharsBE++;\n if (b[0] !== 0 && b[1] === 0) asciiCharsLE++;\n\n b.length = 0;\n charsProcessed++;\n\n if (charsProcessed >= 100) {\n break outer_loop;\n }\n }\n }\n }\n\n // Make decisions.\n // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.\n // So, we count ASCII as if it was LE or BE, and decide from that.\n if (asciiCharsBE > asciiCharsLE) return 'utf-16be';\n if (asciiCharsBE < asciiCharsLE) return 'utf-16le';\n\n // Couldn't decide (likely all zeros or not enough data).\n return defaultEncoding || 'utf-16le';\n}\n\n\n","\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152\n// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3\n\nexports.utf7 = Utf7Codec;\nexports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7\nfunction Utf7Codec(codecOptions, iconv) {\n this.iconv = iconv;\n};\n\nUtf7Codec.prototype.encoder = Utf7Encoder;\nUtf7Codec.prototype.decoder = Utf7Decoder;\nUtf7Codec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nvar nonDirectChars = /[^A-Za-z0-9'\\(\\),-\\.\\/:\\? \\n\\r\\t]+/g;\n\nfunction Utf7Encoder(options, codec) {\n this.iconv = codec.iconv;\n}\n\nUtf7Encoder.prototype.write = function(str) {\n // Naive implementation.\n // Non-direct chars are encoded as \"+<base64>-\"; single \"+\" char is encoded as \"+-\".\n return Buffer.from(str.replace(nonDirectChars, function(chunk) {\n return \"+\" + (chunk === '+' ? '' : \n this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) \n + \"-\";\n }.bind(this)));\n}\n\nUtf7Encoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf7Decoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = '';\n}\n\nvar base64Regex = /[A-Za-z0-9\\/+]/;\nvar base64Chars = [];\nfor (var i = 0; i < 256; i++)\n base64Chars[i] = base64Regex.test(String.fromCharCode(i));\n\nvar plusChar = '+'.charCodeAt(0), \n minusChar = '-'.charCodeAt(0),\n andChar = '&'.charCodeAt(0);\n\nUtf7Decoder.prototype.write = function(buf) {\n var res = \"\", lastI = 0,\n inBase64 = this.inBase64,\n base64Accum = this.base64Accum;\n\n // The decoder is more involved as we must handle chunks in stream.\n\n for (var i = 0; i < buf.length; i++) {\n if (!inBase64) { // We're in direct mode.\n // Write direct chars until '+'\n if (buf[i] == plusChar) {\n res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n lastI = i+1;\n inBase64 = true;\n }\n } else { // We decode base64.\n if (!base64Chars[buf[i]]) { // Base64 ended.\n if (i == lastI && buf[i] == minusChar) {// \"+-\" -> \"+\"\n res += \"+\";\n } else {\n var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\");\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n if (buf[i] != minusChar) // Minus is absorbed after base64.\n i--;\n\n lastI = i+1;\n inBase64 = false;\n base64Accum = '';\n }\n }\n }\n\n if (!inBase64) {\n res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n } else {\n var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\");\n\n var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n b64str = b64str.slice(0, canBeDecoded);\n\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n this.inBase64 = inBase64;\n this.base64Accum = base64Accum;\n\n return res;\n}\n\nUtf7Decoder.prototype.end = function() {\n var res = \"\";\n if (this.inBase64 && this.base64Accum.length > 0)\n res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n this.inBase64 = false;\n this.base64Accum = '';\n return res;\n}\n\n\n// UTF-7-IMAP codec.\n// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)\n// Differences:\n// * Base64 part is started by \"&\" instead of \"+\"\n// * Direct characters are 0x20-0x7E, except \"&\" (0x26)\n// * In Base64, \",\" is used instead of \"/\"\n// * Base64 must not be used to represent direct characters.\n// * No implicit shift back from Base64 (should always end with '-')\n// * String must end in non-shifted position.\n// * \"-&\" while in base64 is not allowed.\n\n\nexports.utf7imap = Utf7IMAPCodec;\nfunction Utf7IMAPCodec(codecOptions, iconv) {\n this.iconv = iconv;\n};\n\nUtf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;\nUtf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;\nUtf7IMAPCodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf7IMAPEncoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = Buffer.alloc(6);\n this.base64AccumIdx = 0;\n}\n\nUtf7IMAPEncoder.prototype.write = function(str) {\n var inBase64 = this.inBase64,\n base64Accum = this.base64Accum,\n base64AccumIdx = this.base64AccumIdx,\n buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0;\n\n for (var i = 0; i < str.length; i++) {\n var uChar = str.charCodeAt(i);\n if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'.\n if (inBase64) {\n if (base64AccumIdx > 0) {\n bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n base64AccumIdx = 0;\n }\n\n buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n inBase64 = false;\n }\n\n if (!inBase64) {\n buf[bufIdx++] = uChar; // Write direct character\n\n if (uChar === andChar) // Ampersand -> '&-'\n buf[bufIdx++] = minusChar;\n }\n\n } else { // Non-direct character\n if (!inBase64) {\n buf[bufIdx++] = andChar; // Write '&', then go to base64 mode.\n inBase64 = true;\n }\n if (inBase64) {\n base64Accum[base64AccumIdx++] = uChar >> 8;\n base64Accum[base64AccumIdx++] = uChar & 0xFF;\n\n if (base64AccumIdx == base64Accum.length) {\n bufIdx += buf.write(base64Accum.toString('base64').replace(/\\//g, ','), bufIdx);\n base64AccumIdx = 0;\n }\n }\n }\n }\n\n this.inBase64 = inBase64;\n this.base64AccumIdx = base64AccumIdx;\n\n return buf.slice(0, bufIdx);\n}\n\nUtf7IMAPEncoder.prototype.end = function() {\n var buf = Buffer.alloc(10), bufIdx = 0;\n if (this.inBase64) {\n if (this.base64AccumIdx > 0) {\n bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n this.base64AccumIdx = 0;\n }\n\n buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n this.inBase64 = false;\n }\n\n return buf.slice(0, bufIdx);\n}\n\n\n// -- Decoding\n\nfunction Utf7IMAPDecoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = '';\n}\n\nvar base64IMAPChars = base64Chars.slice();\nbase64IMAPChars[','.charCodeAt(0)] = true;\n\nUtf7IMAPDecoder.prototype.write = function(buf) {\n var res = \"\", lastI = 0,\n inBase64 = this.inBase64,\n base64Accum = this.base64Accum;\n\n // The decoder is more involved as we must handle chunks in stream.\n // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).\n\n for (var i = 0; i < buf.length; i++) {\n if (!inBase64) { // We're in direct mode.\n // Write direct chars until '&'\n if (buf[i] == andChar) {\n res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n lastI = i+1;\n inBase64 = true;\n }\n } else { // We decode base64.\n if (!base64IMAPChars[buf[i]]) { // Base64 ended.\n if (i == lastI && buf[i] == minusChar) { // \"&-\" -> \"&\"\n res += \"&\";\n } else {\n var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\").replace(/,/g, '/');\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n if (buf[i] != minusChar) // Minus may be absorbed after base64.\n i--;\n\n lastI = i+1;\n inBase64 = false;\n base64Accum = '';\n }\n }\n }\n\n if (!inBase64) {\n res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n } else {\n var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\").replace(/,/g, '/');\n\n var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n b64str = b64str.slice(0, canBeDecoded);\n\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n this.inBase64 = inBase64;\n this.base64Accum = base64Accum;\n\n return res;\n}\n\nUtf7IMAPDecoder.prototype.end = function() {\n var res = \"\";\n if (this.inBase64 && this.base64Accum.length > 0)\n res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n this.inBase64 = false;\n this.base64Accum = '';\n return res;\n}\n\n\n","\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that\n// correspond to encoded bytes (if 128 - then lower half is ASCII). \n\nexports._sbcs = SBCSCodec;\nfunction SBCSCodec(codecOptions, iconv) {\n if (!codecOptions)\n throw new Error(\"SBCS codec is called without the data.\")\n \n // Prepare char buffer for decoding.\n if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))\n throw new Error(\"Encoding '\"+codecOptions.type+\"' has incorrect 'chars' (must be of len 128 or 256)\");\n \n if (codecOptions.chars.length === 128) {\n var asciiString = \"\";\n for (var i = 0; i < 128; i++)\n asciiString += String.fromCharCode(i);\n codecOptions.chars = asciiString + codecOptions.chars;\n }\n\n this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2');\n \n // Encoding buffer.\n var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));\n\n for (var i = 0; i < codecOptions.chars.length; i++)\n encodeBuf[codecOptions.chars.charCodeAt(i)] = i;\n\n this.encodeBuf = encodeBuf;\n}\n\nSBCSCodec.prototype.encoder = SBCSEncoder;\nSBCSCodec.prototype.decoder = SBCSDecoder;\n\n\nfunction SBCSEncoder(options, codec) {\n this.encodeBuf = codec.encodeBuf;\n}\n\nSBCSEncoder.prototype.write = function(str) {\n var buf = Buffer.alloc(str.length);\n for (var i = 0; i < str.length; i++)\n buf[i] = this.encodeBuf[str.charCodeAt(i)];\n \n return buf;\n}\n\nSBCSEncoder.prototype.end = function() {\n}\n\n\nfunction SBCSDecoder(options, codec) {\n this.decodeBuf = codec.decodeBuf;\n}\n\nSBCSDecoder.prototype.write = function(buf) {\n // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.\n var decodeBuf = this.decodeBuf;\n var newBuf = Buffer.alloc(buf.length*2);\n var idx1 = 0, idx2 = 0;\n for (var i = 0; i < buf.length; i++) {\n idx1 = buf[i]*2; idx2 = i*2;\n newBuf[idx2] = decodeBuf[idx1];\n newBuf[idx2+1] = decodeBuf[idx1+1];\n }\n return newBuf.toString('ucs2');\n}\n\nSBCSDecoder.prototype.end = function() {\n}\n","\"use strict\";\n\n// Manually added data to be used by sbcs codec in addition to generated one.\n\nmodule.exports = {\n // Not supported by iconv, not sure why.\n \"10029\": \"maccenteuro\",\n \"maccenteuro\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ\"\n },\n\n \"808\": \"cp808\",\n \"ibm808\": \"cp808\",\n \"cp808\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ \"\n },\n\n \"mik\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя└┴┬├─┼╣║╚╔╩╦╠═╬┐░▒▓│┤№§╗╝┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n\n \"cp720\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\x80\\x81éâ\\x84à\\x86çêëèïî\\x8d\\x8e\\x8f\\x90\\u0651\\u0652ô¤ـûùءآأؤ£إئابةتثجحخدذرزسشص«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ضطظعغفµقكلمنهوىي≡\\u064b\\u064c\\u064d\\u064e\\u064f\\u0650≈°∙·√ⁿ²■\\u00a0\"\n },\n\n // Aliases of generated encodings.\n \"ascii8bit\": \"ascii\",\n \"usascii\": \"ascii\",\n \"ansix34\": \"ascii\",\n \"ansix341968\": \"ascii\",\n \"ansix341986\": \"ascii\",\n \"csascii\": \"ascii\",\n \"cp367\": \"ascii\",\n \"ibm367\": \"ascii\",\n \"isoir6\": \"ascii\",\n \"iso646us\": \"ascii\",\n \"iso646irv\": \"ascii\",\n \"us\": \"ascii\",\n\n \"latin1\": \"iso88591\",\n \"latin2\": \"iso88592\",\n \"latin3\": \"iso88593\",\n \"latin4\": \"iso88594\",\n \"latin5\": \"iso88599\",\n \"latin6\": \"iso885910\",\n \"latin7\": \"iso885913\",\n \"latin8\": \"iso885914\",\n \"latin9\": \"iso885915\",\n \"latin10\": \"iso885916\",\n\n \"csisolatin1\": \"iso88591\",\n \"csisolatin2\": \"iso88592\",\n \"csisolatin3\": \"iso88593\",\n \"csisolatin4\": \"iso88594\",\n \"csisolatincyrillic\": \"iso88595\",\n \"csisolatinarabic\": \"iso88596\",\n \"csisolatingreek\" : \"iso88597\",\n \"csisolatinhebrew\": \"iso88598\",\n \"csisolatin5\": \"iso88599\",\n \"csisolatin6\": \"iso885910\",\n\n \"l1\": \"iso88591\",\n \"l2\": \"iso88592\",\n \"l3\": \"iso88593\",\n \"l4\": \"iso88594\",\n \"l5\": \"iso88599\",\n \"l6\": \"iso885910\",\n \"l7\": \"iso885913\",\n \"l8\": \"iso885914\",\n \"l9\": \"iso885915\",\n \"l10\": \"iso885916\",\n\n \"isoir14\": \"iso646jp\",\n \"isoir57\": \"iso646cn\",\n \"isoir100\": \"iso88591\",\n \"isoir101\": \"iso88592\",\n \"isoir109\": \"iso88593\",\n \"isoir110\": \"iso88594\",\n \"isoir144\": \"iso88595\",\n \"isoir127\": \"iso88596\",\n \"isoir126\": \"iso88597\",\n \"isoir138\": \"iso88598\",\n \"isoir148\": \"iso88599\",\n \"isoir157\": \"iso885910\",\n \"isoir166\": \"tis620\",\n \"isoir179\": \"iso885913\",\n \"isoir199\": \"iso885914\",\n \"isoir203\": \"iso885915\",\n \"isoir226\": \"iso885916\",\n\n \"cp819\": \"iso88591\",\n \"ibm819\": \"iso88591\",\n\n \"cyrillic\": \"iso88595\",\n\n \"arabic\": \"iso88596\",\n \"arabic8\": \"iso88596\",\n \"ecma114\": \"iso88596\",\n \"asmo708\": \"iso88596\",\n\n \"greek\" : \"iso88597\",\n \"greek8\" : \"iso88597\",\n \"ecma118\" : \"iso88597\",\n \"elot928\" : \"iso88597\",\n\n \"hebrew\": \"iso88598\",\n \"hebrew8\": \"iso88598\",\n\n \"turkish\": \"iso88599\",\n \"turkish8\": \"iso88599\",\n\n \"thai\": \"iso885911\",\n \"thai8\": \"iso885911\",\n\n \"celtic\": \"iso885914\",\n \"celtic8\": \"iso885914\",\n \"isoceltic\": \"iso885914\",\n\n \"tis6200\": \"tis620\",\n \"tis62025291\": \"tis620\",\n \"tis62025330\": \"tis620\",\n\n \"10000\": \"macroman\",\n \"10006\": \"macgreek\",\n \"10007\": \"maccyrillic\",\n \"10079\": \"maciceland\",\n \"10081\": \"macturkish\",\n\n \"cspc8codepage437\": \"cp437\",\n \"cspc775baltic\": \"cp775\",\n \"cspc850multilingual\": \"cp850\",\n \"cspcp852\": \"cp852\",\n \"cspc862latinhebrew\": \"cp862\",\n \"cpgr\": \"cp869\",\n\n \"msee\": \"cp1250\",\n \"mscyrl\": \"cp1251\",\n \"msansi\": \"cp1252\",\n \"msgreek\": \"cp1253\",\n \"msturk\": \"cp1254\",\n \"mshebr\": \"cp1255\",\n \"msarab\": \"cp1256\",\n \"winbaltrim\": \"cp1257\",\n\n \"cp20866\": \"koi8r\",\n \"20866\": \"koi8r\",\n \"ibm878\": \"koi8r\",\n \"cskoi8r\": \"koi8r\",\n\n \"cp21866\": \"koi8u\",\n \"21866\": \"koi8u\",\n \"ibm1168\": \"koi8u\",\n\n \"strk10482002\": \"rk1048\",\n\n \"tcvn5712\": \"tcvn\",\n \"tcvn57121\": \"tcvn\",\n\n \"gb198880\": \"iso646cn\",\n \"cn\": \"iso646cn\",\n\n \"csiso14jisc6220ro\": \"iso646jp\",\n \"jisc62201969ro\": \"iso646jp\",\n \"jp\": \"iso646jp\",\n\n \"cshproman8\": \"hproman8\",\n \"r8\": \"hproman8\",\n \"roman8\": \"hproman8\",\n \"xroman8\": \"hproman8\",\n \"ibm1051\": \"hproman8\",\n\n \"mac\": \"macintosh\",\n \"csmacintosh\": \"macintosh\",\n};\n\n","\"use strict\";\n\n// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.\nmodule.exports = {\n \"437\": \"cp437\",\n \"737\": \"cp737\",\n \"775\": \"cp775\",\n \"850\": \"cp850\",\n \"852\": \"cp852\",\n \"855\": \"cp855\",\n \"856\": \"cp856\",\n \"857\": \"cp857\",\n \"858\": \"cp858\",\n \"860\": \"cp860\",\n \"861\": \"cp861\",\n \"862\": \"cp862\",\n \"863\": \"cp863\",\n \"864\": \"cp864\",\n \"865\": \"cp865\",\n \"866\": \"cp866\",\n \"869\": \"cp869\",\n \"874\": \"windows874\",\n \"922\": \"cp922\",\n \"1046\": \"cp1046\",\n \"1124\": \"cp1124\",\n \"1125\": \"cp1125\",\n \"1129\": \"cp1129\",\n \"1133\": \"cp1133\",\n \"1161\": \"cp1161\",\n \"1162\": \"cp1162\",\n \"1163\": \"cp1163\",\n \"1250\": \"windows1250\",\n \"1251\": \"windows1251\",\n \"1252\": \"windows1252\",\n \"1253\": \"windows1253\",\n \"1254\": \"windows1254\",\n \"1255\": \"windows1255\",\n \"1256\": \"windows1256\",\n \"1257\": \"windows1257\",\n \"1258\": \"windows1258\",\n \"28591\": \"iso88591\",\n \"28592\": \"iso88592\",\n \"28593\": \"iso88593\",\n \"28594\": \"iso88594\",\n \"28595\": \"iso88595\",\n \"28596\": \"iso88596\",\n \"28597\": \"iso88597\",\n \"28598\": \"iso88598\",\n \"28599\": \"iso88599\",\n \"28600\": \"iso885910\",\n \"28601\": \"iso885911\",\n \"28603\": \"iso885913\",\n \"28604\": \"iso885914\",\n \"28605\": \"iso885915\",\n \"28606\": \"iso885916\",\n \"windows874\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n },\n \"win874\": \"windows874\",\n \"cp874\": \"windows874\",\n \"windows1250\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n },\n \"win1250\": \"windows1250\",\n \"cp1250\": \"windows1250\",\n \"windows1251\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n },\n \"win1251\": \"windows1251\",\n \"cp1251\": \"windows1251\",\n \"windows1252\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"win1252\": \"windows1252\",\n \"cp1252\": \"windows1252\",\n \"windows1253\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n },\n \"win1253\": \"windows1253\",\n \"cp1253\": \"windows1253\",\n \"windows1254\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n },\n \"win1254\": \"windows1254\",\n \"cp1254\": \"windows1254\",\n \"windows1255\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�\"\n },\n \"win1255\": \"windows1255\",\n \"cp1255\": \"windows1255\",\n \"windows1256\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے\"\n },\n \"win1256\": \"windows1256\",\n \"cp1256\": \"windows1256\",\n \"windows1257\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙\"\n },\n \"win1257\": \"windows1257\",\n \"cp1257\": \"windows1257\",\n \"windows1258\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n },\n \"win1258\": \"windows1258\",\n \"cp1258\": \"windows1258\",\n \"iso88591\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"cp28591\": \"iso88591\",\n \"iso88592\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n },\n \"cp28592\": \"iso88592\",\n \"iso88593\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ħ˘£¤�Ĥ§¨İŞĞĴ­�ݰħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙\"\n },\n \"cp28593\": \"iso88593\",\n \"iso88594\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙\"\n },\n \"cp28594\": \"iso88594\",\n \"iso88595\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ\"\n },\n \"cp28595\": \"iso88595\",\n \"iso88596\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ���¤�������،­�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������\"\n },\n \"cp28596\": \"iso88596\",\n \"iso88597\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ‘’£€₯¦§¨©ͺ«¬­�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n },\n \"cp28597\": \"iso88597\",\n \"iso88598\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �¢£¤¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�\"\n },\n \"cp28598\": \"iso88598\",\n \"iso88599\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n },\n \"cp28599\": \"iso88599\",\n \"iso885910\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĒĢĪĨͧĻĐŠŦŽ­ŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ\"\n },\n \"cp28600\": \"iso885910\",\n \"iso885911\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n },\n \"cp28601\": \"iso885911\",\n \"iso885913\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’\"\n },\n \"cp28603\": \"iso885913\",\n \"iso885914\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ­®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ\"\n },\n \"cp28604\": \"iso885914\",\n \"iso885915\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"cp28605\": \"iso885915\",\n \"iso885916\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄąŁ€„Чš©Ș«Ź­źŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ\"\n },\n \"cp28606\": \"iso885916\",\n \"cp437\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm437\": \"cp437\",\n \"csibm437\": \"cp437\",\n \"cp737\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ \"\n },\n \"ibm737\": \"cp737\",\n \"csibm737\": \"cp737\",\n \"cp775\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’­±“¾¶§÷„°∙·¹³²■ \"\n },\n \"ibm775\": \"cp775\",\n \"csibm775\": \"cp775\",\n \"cp850\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm850\": \"cp850\",\n \"csibm850\": \"cp850\",\n \"cp852\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ \"\n },\n \"ibm852\": \"cp852\",\n \"csibm852\": \"cp852\",\n \"cp855\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№­ыЫзЗшШэЭщЩчЧ§■ \"\n },\n \"ibm855\": \"cp855\",\n \"csibm855\": \"cp855\",\n \"cp856\": {\n \"type\": \"_sbcs\",\n \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´­±‗¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm856\": \"cp856\",\n \"csibm856\": \"cp856\",\n \"cp857\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm857\": \"cp857\",\n \"csibm857\": \"cp857\",\n \"cp858\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm858\": \"cp858\",\n \"csibm858\": \"cp858\",\n \"cp860\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñѪº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm860\": \"cp860\",\n \"csibm860\": \"cp860\",\n \"cp861\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm861\": \"cp861\",\n \"csibm861\": \"cp861\",\n \"cp862\": {\n \"type\": \"_sbcs\",\n \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm862\": \"cp862\",\n \"csibm862\": \"cp862\",\n \"cp863\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm863\": \"cp863\",\n \"csibm863\": \"cp863\",\n \"cp864\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$٪&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ­ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�\"\n },\n \"ibm864\": \"cp864\",\n \"csibm864\": \"cp864\",\n \"cp865\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm865\": \"cp865\",\n \"csibm865\": \"cp865\",\n \"cp866\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ \"\n },\n \"ibm866\": \"cp866\",\n \"csibm866\": \"cp866\",\n \"cp869\": {\n \"type\": \"_sbcs\",\n \"chars\": \"������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■ \"\n },\n \"ibm869\": \"cp869\",\n \"csibm869\": \"cp869\",\n \"cp922\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖרÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ\"\n },\n \"ibm922\": \"cp922\",\n \"csibm922\": \"cp922\",\n \"cp1046\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ﺈ×÷ﹱˆ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،­ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�\"\n },\n \"ibm1046\": \"cp1046\",\n \"csibm1046\": \"cp1046\",\n \"cp1124\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂҐЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ\"\n },\n \"ibm1124\": \"cp1124\",\n \"csibm1124\": \"cp1124\",\n \"cp1125\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ \"\n },\n \"ibm1125\": \"cp1125\",\n \"csibm1125\": \"cp1125\",\n \"cp1129\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n },\n \"ibm1129\": \"cp1129\",\n \"csibm1129\": \"cp1129\",\n \"cp1133\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�\"\n },\n \"ibm1133\": \"cp1133\",\n \"csibm1133\": \"cp1133\",\n \"cp1161\": {\n \"type\": \"_sbcs\",\n \"chars\": \"��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ \"\n },\n \"ibm1161\": \"cp1161\",\n \"csibm1161\": \"cp1161\",\n \"cp1162\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n },\n \"ibm1162\": \"cp1162\",\n \"csibm1162\": \"cp1162\",\n \"cp1163\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n },\n \"ibm1163\": \"cp1163\",\n \"csibm1163\": \"cp1163\",\n \"maccroatian\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ\"\n },\n \"maccyrillic\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n },\n \"macgreek\": {\n \"type\": \"_sbcs\",\n \"chars\": \"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�\"\n },\n \"maciceland\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macroman\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macromania\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macthai\": {\n \"type\": \"_sbcs\",\n \"chars\": \"«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู​–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����\"\n },\n \"macturkish\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macukraine\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n },\n \"koi8r\": {\n \"type\": \"_sbcs\",\n \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"koi8u\": {\n \"type\": \"_sbcs\",\n \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"koi8ru\": {\n \"type\": \"_sbcs\",\n \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"koi8t\": {\n \"type\": \"_sbcs\",\n \"chars\": \"қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬­®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"armscii8\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�\"\n },\n \"rk1048\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬­®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n },\n \"tcvn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000ÚỤ\\u0003ỪỬỮ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010ỨỰỲỶỸÝỴ\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ\"\n },\n \"georgianacademy\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"georgianps\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"pt154\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n },\n \"viscii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001Ẳ\\u0003\\u0004ẴẪ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013Ỷ\\u0015\\u0016\\u0017\\u0018Ỹ\\u001a\\u001b\\u001c\\u001dỴ\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ\"\n },\n \"iso646cn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������\"\n },\n \"iso646jp\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������\"\n },\n \"hproman8\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�\"\n },\n \"macintosh\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"ascii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"��������������������������������������������������������������������������������������������������������������������������������\"\n },\n \"tis620\": {\n \"type\": \"_sbcs\",\n \"chars\": \"���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n }\n}","\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.\n// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.\n// To save memory and loading time, we read table files only when requested.\n\nexports._dbcs = DBCSCodec;\n\nvar UNASSIGNED = -1,\n GB18030_CODE = -2,\n SEQ_START = -10,\n NODE_START = -1000,\n UNASSIGNED_NODE = new Array(0x100),\n DEF_CHAR = -1;\n\nfor (var i = 0; i < 0x100; i++)\n UNASSIGNED_NODE[i] = UNASSIGNED;\n\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec(codecOptions, iconv) {\n this.encodingName = codecOptions.encodingName;\n if (!codecOptions)\n throw new Error(\"DBCS codec is called without the data.\")\n if (!codecOptions.table)\n throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\");\n\n // Load tables.\n var mappingTable = codecOptions.table();\n\n\n // Decode tables: MBCS -> Unicode.\n\n // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.\n // Trie root is decodeTables[0].\n // Values: >= 0 -> unicode character code. can be > 0xFFFF\n // == UNASSIGNED -> unknown/unassigned sequence.\n // == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.\n // <= NODE_START -> index of the next node in our trie to process next byte.\n // <= SEQ_START -> index of the start of a character code sequence, in decodeTableSeq.\n this.decodeTables = [];\n this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.\n\n // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. \n this.decodeTableSeq = [];\n\n // Actual mapping tables consist of chunks. Use them to fill up decode tables.\n for (var i = 0; i < mappingTable.length; i++)\n this._addDecodeChunk(mappingTable[i]);\n\n // Load & create GB18030 tables when needed.\n if (typeof codecOptions.gb18030 === 'function') {\n this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.\n\n // Add GB18030 common decode nodes.\n var commonThirdByteNodeIdx = this.decodeTables.length;\n this.decodeTables.push(UNASSIGNED_NODE.slice(0));\n\n var commonFourthByteNodeIdx = this.decodeTables.length;\n this.decodeTables.push(UNASSIGNED_NODE.slice(0));\n\n // Fill out the tree\n var firstByteNode = this.decodeTables[0];\n for (var i = 0x81; i <= 0xFE; i++) {\n var secondByteNode = this.decodeTables[NODE_START - firstByteNode[i]];\n for (var j = 0x30; j <= 0x39; j++) {\n if (secondByteNode[j] === UNASSIGNED) {\n secondByteNode[j] = NODE_START - commonThirdByteNodeIdx;\n } else if (secondByteNode[j] > NODE_START) {\n throw new Error(\"gb18030 decode tables conflict at byte 2\");\n }\n\n var thirdByteNode = this.decodeTables[NODE_START - secondByteNode[j]];\n for (var k = 0x81; k <= 0xFE; k++) {\n if (thirdByteNode[k] === UNASSIGNED) {\n thirdByteNode[k] = NODE_START - commonFourthByteNodeIdx;\n } else if (thirdByteNode[k] === NODE_START - commonFourthByteNodeIdx) {\n continue;\n } else if (thirdByteNode[k] > NODE_START) {\n throw new Error(\"gb18030 decode tables conflict at byte 3\");\n }\n\n var fourthByteNode = this.decodeTables[NODE_START - thirdByteNode[k]];\n for (var l = 0x30; l <= 0x39; l++) {\n if (fourthByteNode[l] === UNASSIGNED)\n fourthByteNode[l] = GB18030_CODE;\n }\n }\n }\n }\n }\n\n this.defaultCharUnicode = iconv.defaultCharUnicode;\n\n \n // Encode tables: Unicode -> DBCS.\n\n // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.\n // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.\n // Values: >= 0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).\n // == UNASSIGNED -> no conversion found. Output a default char.\n // <= SEQ_START -> it's an index in encodeTableSeq, see below. The character starts a sequence.\n this.encodeTable = [];\n \n // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of\n // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key\n // means end of sequence (needed when one sequence is a strict subsequence of another).\n // Objects are kept separately from encodeTable to increase performance.\n this.encodeTableSeq = [];\n\n // Some chars can be decoded, but need not be encoded.\n var skipEncodeChars = {};\n if (codecOptions.encodeSkipVals)\n for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {\n var val = codecOptions.encodeSkipVals[i];\n if (typeof val === 'number')\n skipEncodeChars[val] = true;\n else\n for (var j = val.from; j <= val.to; j++)\n skipEncodeChars[j] = true;\n }\n \n // Use decode trie to recursively fill out encode tables.\n this._fillEncodeTable(0, 0, skipEncodeChars);\n\n // Add more encoding pairs when needed.\n if (codecOptions.encodeAdd) {\n for (var uChar in codecOptions.encodeAdd)\n if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))\n this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);\n }\n\n this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];\n if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];\n if (this.defCharSB === UNASSIGNED) this.defCharSB = \"?\".charCodeAt(0);\n}\n\nDBCSCodec.prototype.encoder = DBCSEncoder;\nDBCSCodec.prototype.decoder = DBCSDecoder;\n\n// Decoder helpers\nDBCSCodec.prototype._getDecodeTrieNode = function(addr) {\n var bytes = [];\n for (; addr > 0; addr >>>= 8)\n bytes.push(addr & 0xFF);\n if (bytes.length == 0)\n bytes.push(0);\n\n var node = this.decodeTables[0];\n for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie.\n var val = node[bytes[i]];\n\n if (val == UNASSIGNED) { // Create new node.\n node[bytes[i]] = NODE_START - this.decodeTables.length;\n this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));\n }\n else if (val <= NODE_START) { // Existing node.\n node = this.decodeTables[NODE_START - val];\n }\n else\n throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16));\n }\n return node;\n}\n\n\nDBCSCodec.prototype._addDecodeChunk = function(chunk) {\n // First element of chunk is the hex mbcs code where we start.\n var curAddr = parseInt(chunk[0], 16);\n\n // Choose the decoding node where we'll write our chars.\n var writeTable = this._getDecodeTrieNode(curAddr);\n curAddr = curAddr & 0xFF;\n\n // Write all other elements of the chunk to the table.\n for (var k = 1; k < chunk.length; k++) {\n var part = chunk[k];\n if (typeof part === \"string\") { // String, write as-is.\n for (var l = 0; l < part.length;) {\n var code = part.charCodeAt(l++);\n if (0xD800 <= code && code < 0xDC00) { // Decode surrogate\n var codeTrail = part.charCodeAt(l++);\n if (0xDC00 <= codeTrail && codeTrail < 0xE000)\n writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);\n else\n throw new Error(\"Incorrect surrogate pair in \" + this.encodingName + \" at chunk \" + chunk[0]);\n }\n else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used)\n var len = 0xFFF - code + 2;\n var seq = [];\n for (var m = 0; m < len; m++)\n seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.\n\n writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;\n this.decodeTableSeq.push(seq);\n }\n else\n writeTable[curAddr++] = code; // Basic char\n }\n } \n else if (typeof part === \"number\") { // Integer, meaning increasing sequence starting with prev character.\n var charCode = writeTable[curAddr - 1] + 1;\n for (var l = 0; l < part; l++)\n writeTable[curAddr++] = charCode++;\n }\n else\n throw new Error(\"Incorrect type '\" + typeof part + \"' given in \" + this.encodingName + \" at chunk \" + chunk[0]);\n }\n if (curAddr > 0xFF)\n throw new Error(\"Incorrect chunk in \" + this.encodingName + \" at addr \" + chunk[0] + \": too long\" + curAddr);\n}\n\n// Encoder helpers\nDBCSCodec.prototype._getEncodeBucket = function(uCode) {\n var high = uCode >> 8; // This could be > 0xFF because of astral characters.\n if (this.encodeTable[high] === undefined)\n this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.\n return this.encodeTable[high];\n}\n\nDBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {\n var bucket = this._getEncodeBucket(uCode);\n var low = uCode & 0xFF;\n if (bucket[low] <= SEQ_START)\n this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it.\n else if (bucket[low] == UNASSIGNED)\n bucket[low] = dbcsCode;\n}\n\nDBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {\n \n // Get the root of character tree according to first character of the sequence.\n var uCode = seq[0];\n var bucket = this._getEncodeBucket(uCode);\n var low = uCode & 0xFF;\n\n var node;\n if (bucket[low] <= SEQ_START) {\n // There's already a sequence with - use it.\n node = this.encodeTableSeq[SEQ_START-bucket[low]];\n }\n else {\n // There was no sequence object - allocate a new one.\n node = {};\n if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.\n bucket[low] = SEQ_START - this.encodeTableSeq.length;\n this.encodeTableSeq.push(node);\n }\n\n // Traverse the character tree, allocating new nodes as needed.\n for (var j = 1; j < seq.length-1; j++) {\n var oldVal = node[uCode];\n if (typeof oldVal === 'object')\n node = oldVal;\n else {\n node = node[uCode] = {}\n if (oldVal !== undefined)\n node[DEF_CHAR] = oldVal\n }\n }\n\n // Set the leaf to given dbcsCode.\n uCode = seq[seq.length-1];\n node[uCode] = dbcsCode;\n}\n\nDBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {\n var node = this.decodeTables[nodeIdx];\n var hasValues = false;\n var subNodeEmpty = {};\n for (var i = 0; i < 0x100; i++) {\n var uCode = node[i];\n var mbCode = prefix + i;\n if (skipEncodeChars[mbCode])\n continue;\n\n if (uCode >= 0) {\n this._setEncodeChar(uCode, mbCode);\n hasValues = true;\n } else if (uCode <= NODE_START) {\n var subNodeIdx = NODE_START - uCode;\n if (!subNodeEmpty[subNodeIdx]) { // Skip empty subtrees (they are too large in gb18030).\n var newPrefix = (mbCode << 8) >>> 0; // NOTE: '>>> 0' keeps 32-bit num positive.\n if (this._fillEncodeTable(subNodeIdx, newPrefix, skipEncodeChars))\n hasValues = true;\n else\n subNodeEmpty[subNodeIdx] = true;\n }\n } else if (uCode <= SEQ_START) {\n this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);\n hasValues = true;\n }\n }\n return hasValues;\n}\n\n\n\n// == Encoder ==================================================================\n\nfunction DBCSEncoder(options, codec) {\n // Encoder state\n this.leadSurrogate = -1;\n this.seqObj = undefined;\n \n // Static data\n this.encodeTable = codec.encodeTable;\n this.encodeTableSeq = codec.encodeTableSeq;\n this.defaultCharSingleByte = codec.defCharSB;\n this.gb18030 = codec.gb18030;\n}\n\nDBCSEncoder.prototype.write = function(str) {\n var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)),\n leadSurrogate = this.leadSurrogate,\n seqObj = this.seqObj, nextChar = -1,\n i = 0, j = 0;\n\n while (true) {\n // 0. Get next character.\n if (nextChar === -1) {\n if (i == str.length) break;\n var uCode = str.charCodeAt(i++);\n }\n else {\n var uCode = nextChar;\n nextChar = -1; \n }\n\n // 1. Handle surrogates.\n if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates.\n if (uCode < 0xDC00) { // We've got lead surrogate.\n if (leadSurrogate === -1) {\n leadSurrogate = uCode;\n continue;\n } else {\n leadSurrogate = uCode;\n // Double lead surrogate found.\n uCode = UNASSIGNED;\n }\n } else { // We've got trail surrogate.\n if (leadSurrogate !== -1) {\n uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);\n leadSurrogate = -1;\n } else {\n // Incomplete surrogate pair - only trail surrogate found.\n uCode = UNASSIGNED;\n }\n \n }\n }\n else if (leadSurrogate !== -1) {\n // Incomplete surrogate pair - only lead surrogate found.\n nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char.\n leadSurrogate = -1;\n }\n\n // 2. Convert uCode character.\n var dbcsCode = UNASSIGNED;\n if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence\n var resCode = seqObj[uCode];\n if (typeof resCode === 'object') { // Sequence continues.\n seqObj = resCode;\n continue;\n\n } else if (typeof resCode == 'number') { // Sequence finished. Write it.\n dbcsCode = resCode;\n\n } else if (resCode == undefined) { // Current character is not part of the sequence.\n\n // Try default character for this sequence\n resCode = seqObj[DEF_CHAR];\n if (resCode !== undefined) {\n dbcsCode = resCode; // Found. Write it.\n nextChar = uCode; // Current character will be written too in the next iteration.\n\n } else {\n // TODO: What if we have no default? (resCode == undefined)\n // Then, we should write first char of the sequence as-is and try the rest recursively.\n // Didn't do it for now because no encoding has this situation yet.\n // Currently, just skip the sequence and write current char.\n }\n }\n seqObj = undefined;\n }\n else if (uCode >= 0) { // Regular character\n var subtable = this.encodeTable[uCode >> 8];\n if (subtable !== undefined)\n dbcsCode = subtable[uCode & 0xFF];\n \n if (dbcsCode <= SEQ_START) { // Sequence start\n seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];\n continue;\n }\n\n if (dbcsCode == UNASSIGNED && this.gb18030) {\n // Use GB18030 algorithm to find character(s) to write.\n var idx = findIdx(this.gb18030.uChars, uCode);\n if (idx != -1) {\n var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);\n newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600;\n newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260;\n newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10;\n newBuf[j++] = 0x30 + dbcsCode;\n continue;\n }\n }\n }\n\n // 3. Write dbcsCode character.\n if (dbcsCode === UNASSIGNED)\n dbcsCode = this.defaultCharSingleByte;\n \n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode;\n }\n else if (dbcsCode < 0x10000) {\n newBuf[j++] = dbcsCode >> 8; // high byte\n newBuf[j++] = dbcsCode & 0xFF; // low byte\n }\n else if (dbcsCode < 0x1000000) {\n newBuf[j++] = dbcsCode >> 16;\n newBuf[j++] = (dbcsCode >> 8) & 0xFF;\n newBuf[j++] = dbcsCode & 0xFF;\n } else {\n newBuf[j++] = dbcsCode >>> 24;\n newBuf[j++] = (dbcsCode >>> 16) & 0xFF;\n newBuf[j++] = (dbcsCode >>> 8) & 0xFF;\n newBuf[j++] = dbcsCode & 0xFF;\n }\n }\n\n this.seqObj = seqObj;\n this.leadSurrogate = leadSurrogate;\n return newBuf.slice(0, j);\n}\n\nDBCSEncoder.prototype.end = function() {\n if (this.leadSurrogate === -1 && this.seqObj === undefined)\n return; // All clean. Most often case.\n\n var newBuf = Buffer.alloc(10), j = 0;\n\n if (this.seqObj) { // We're in the sequence.\n var dbcsCode = this.seqObj[DEF_CHAR];\n if (dbcsCode !== undefined) { // Write beginning of the sequence.\n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode;\n }\n else {\n newBuf[j++] = dbcsCode >> 8; // high byte\n newBuf[j++] = dbcsCode & 0xFF; // low byte\n }\n } else {\n // See todo above.\n }\n this.seqObj = undefined;\n }\n\n if (this.leadSurrogate !== -1) {\n // Incomplete surrogate pair - only lead surrogate found.\n newBuf[j++] = this.defaultCharSingleByte;\n this.leadSurrogate = -1;\n }\n \n return newBuf.slice(0, j);\n}\n\n// Export for testing\nDBCSEncoder.prototype.findIdx = findIdx;\n\n\n// == Decoder ==================================================================\n\nfunction DBCSDecoder(options, codec) {\n // Decoder state\n this.nodeIdx = 0;\n this.prevBytes = [];\n\n // Static data\n this.decodeTables = codec.decodeTables;\n this.decodeTableSeq = codec.decodeTableSeq;\n this.defaultCharUnicode = codec.defaultCharUnicode;\n this.gb18030 = codec.gb18030;\n}\n\nDBCSDecoder.prototype.write = function(buf) {\n var newBuf = Buffer.alloc(buf.length*2),\n nodeIdx = this.nodeIdx, \n prevBytes = this.prevBytes, prevOffset = this.prevBytes.length,\n seqStart = -this.prevBytes.length, // idx of the start of current parsed sequence.\n uCode;\n\n for (var i = 0, j = 0; i < buf.length; i++) {\n var curByte = (i >= 0) ? buf[i] : prevBytes[i + prevOffset];\n\n // Lookup in current trie node.\n var uCode = this.decodeTables[nodeIdx][curByte];\n\n if (uCode >= 0) { \n // Normal character, just use it.\n }\n else if (uCode === UNASSIGNED) { // Unknown char.\n // TODO: Callback with seq.\n uCode = this.defaultCharUnicode.charCodeAt(0);\n i = seqStart; // Skip one byte ('i' will be incremented by the for loop) and try to parse again.\n }\n else if (uCode === GB18030_CODE) {\n if (i >= 3) {\n var ptr = (buf[i-3]-0x81)*12600 + (buf[i-2]-0x30)*1260 + (buf[i-1]-0x81)*10 + (curByte-0x30);\n } else {\n var ptr = (prevBytes[i-3+prevOffset]-0x81)*12600 + \n (((i-2 >= 0) ? buf[i-2] : prevBytes[i-2+prevOffset])-0x30)*1260 + \n (((i-1 >= 0) ? buf[i-1] : prevBytes[i-1+prevOffset])-0x81)*10 + \n (curByte-0x30);\n }\n var idx = findIdx(this.gb18030.gbChars, ptr);\n uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];\n }\n else if (uCode <= NODE_START) { // Go to next trie node.\n nodeIdx = NODE_START - uCode;\n continue;\n }\n else if (uCode <= SEQ_START) { // Output a sequence of chars.\n var seq = this.decodeTableSeq[SEQ_START - uCode];\n for (var k = 0; k < seq.length - 1; k++) {\n uCode = seq[k];\n newBuf[j++] = uCode & 0xFF;\n newBuf[j++] = uCode >> 8;\n }\n uCode = seq[seq.length-1];\n }\n else\n throw new Error(\"iconv-lite internal error: invalid decoding table value \" + uCode + \" at \" + nodeIdx + \"/\" + curByte);\n\n // Write the character to buffer, handling higher planes using surrogate pair.\n if (uCode >= 0x10000) { \n uCode -= 0x10000;\n var uCodeLead = 0xD800 | (uCode >> 10);\n newBuf[j++] = uCodeLead & 0xFF;\n newBuf[j++] = uCodeLead >> 8;\n\n uCode = 0xDC00 | (uCode & 0x3FF);\n }\n newBuf[j++] = uCode & 0xFF;\n newBuf[j++] = uCode >> 8;\n\n // Reset trie node.\n nodeIdx = 0; seqStart = i+1;\n }\n\n this.nodeIdx = nodeIdx;\n this.prevBytes = (seqStart >= 0)\n ? Array.prototype.slice.call(buf, seqStart)\n : prevBytes.slice(seqStart + prevOffset).concat(Array.prototype.slice.call(buf));\n\n return newBuf.slice(0, j).toString('ucs2');\n}\n\nDBCSDecoder.prototype.end = function() {\n var ret = '';\n\n // Try to parse all remaining chars.\n while (this.prevBytes.length > 0) {\n // Skip 1 character in the buffer.\n ret += this.defaultCharUnicode;\n var bytesArr = this.prevBytes.slice(1);\n\n // Parse remaining as usual.\n this.prevBytes = [];\n this.nodeIdx = 0;\n if (bytesArr.length > 0)\n ret += this.write(bytesArr);\n }\n\n this.prevBytes = [];\n this.nodeIdx = 0;\n return ret;\n}\n\n// Binary search for GB18030. Returns largest i such that table[i] <= val.\nfunction findIdx(table, val) {\n if (table[0] > val)\n return -1;\n\n var l = 0, r = table.length;\n while (l < r-1) { // always table[l] <= val < table[r]\n var mid = l + ((r-l+1) >> 1);\n if (table[mid] <= val)\n l = mid;\n else\n r = mid;\n }\n return l;\n}\n\n","\"use strict\";\n\n// Description of supported double byte encodings and aliases.\n// Tables are not require()-d until they are needed to speed up library load.\n// require()-s are direct to support Browserify.\n\nmodule.exports = {\n \n // == Japanese/ShiftJIS ====================================================\n // All japanese encodings are based on JIS X set of standards:\n // JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF.\n // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. \n // Has several variations in 1978, 1983, 1990 and 1997.\n // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.\n // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.\n // 2 planes, first is superset of 0208, second - revised 0212.\n // Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)\n\n // Byte encodings are:\n // * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte\n // encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.\n // Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.\n // * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes.\n // 0x00-0x7F - lower part of 0201\n // 0x8E, 0xA1-0xDF - upper part of 0201\n // (0xA1-0xFE)x2 - 0208 plane (94x94).\n // 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).\n // * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.\n // Used as-is in ISO2022 family.\n // * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, \n // 0201-1976 Roman, 0208-1978, 0208-1983.\n // * ISO2022-JP-1: Adds esc seq for 0212-1990.\n // * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.\n // * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.\n // * ISO2022-JP-2004: Adds 0213-2004 Plane 1.\n //\n // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.\n //\n // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html\n\n 'shiftjis': {\n type: '_dbcs',\n table: function() { return require('./tables/shiftjis.json') },\n encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n encodeSkipVals: [{from: 0xED40, to: 0xF940}],\n },\n 'csshiftjis': 'shiftjis',\n 'mskanji': 'shiftjis',\n 'sjis': 'shiftjis',\n 'windows31j': 'shiftjis',\n 'ms31j': 'shiftjis',\n 'xsjis': 'shiftjis',\n 'windows932': 'shiftjis',\n 'ms932': 'shiftjis',\n '932': 'shiftjis',\n 'cp932': 'shiftjis',\n\n 'eucjp': {\n type: '_dbcs',\n table: function() { return require('./tables/eucjp.json') },\n encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n },\n\n // TODO: KDDI extension to Shift_JIS\n // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.\n // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.\n\n\n // == Chinese/GBK ==========================================================\n // http://en.wikipedia.org/wiki/GBK\n // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder\n\n // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936\n 'gb2312': 'cp936',\n 'gb231280': 'cp936',\n 'gb23121980': 'cp936',\n 'csgb2312': 'cp936',\n 'csiso58gb231280': 'cp936',\n 'euccn': 'cp936',\n\n // Microsoft's CP936 is a subset and approximation of GBK.\n 'windows936': 'cp936',\n 'ms936': 'cp936',\n '936': 'cp936',\n 'cp936': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json') },\n },\n\n // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.\n 'gbk': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n },\n 'xgbk': 'gbk',\n 'isoir58': 'gbk',\n\n // GB18030 is an algorithmic extension of GBK.\n // Main source: https://www.w3.org/TR/encoding/#gbk-encoder\n // http://icu-project.org/docs/papers/gb18030.html\n // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml\n // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0\n 'gb18030': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n gb18030: function() { return require('./tables/gb18030-ranges.json') },\n encodeSkipVals: [0x80],\n encodeAdd: {'€': 0xA2E3},\n },\n\n 'chinese': 'gb18030',\n\n\n // == Korean ===============================================================\n // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.\n 'windows949': 'cp949',\n 'ms949': 'cp949',\n '949': 'cp949',\n 'cp949': {\n type: '_dbcs',\n table: function() { return require('./tables/cp949.json') },\n },\n\n 'cseuckr': 'cp949',\n 'csksc56011987': 'cp949',\n 'euckr': 'cp949',\n 'isoir149': 'cp949',\n 'korean': 'cp949',\n 'ksc56011987': 'cp949',\n 'ksc56011989': 'cp949',\n 'ksc5601': 'cp949',\n\n\n // == Big5/Taiwan/Hong Kong ================================================\n // There are lots of tables for Big5 and cp950. Please see the following links for history:\n // http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html\n // Variations, in roughly number of defined chars:\n // * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT\n // * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/\n // * Big5-2003 (Taiwan standard) almost superset of cp950.\n // * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.\n // * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. \n // many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.\n // Plus, it has 4 combining sequences.\n // Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299\n // because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.\n // Implementations are not consistent within browsers; sometimes labeled as just big5.\n // MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.\n // Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31\n // In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.\n // Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt\n // http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt\n // \n // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder\n // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.\n\n 'windows950': 'cp950',\n 'ms950': 'cp950',\n '950': 'cp950',\n 'cp950': {\n type: '_dbcs',\n table: function() { return require('./tables/cp950.json') },\n },\n\n // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.\n 'big5': 'big5hkscs',\n 'big5hkscs': {\n type: '_dbcs',\n table: function() { return require('./tables/cp950.json').concat(require('./tables/big5-added.json')) },\n encodeSkipVals: [\n // Although Encoding Standard says we should avoid encoding to HKSCS area (See Step 1 of\n // https://encoding.spec.whatwg.org/#index-big5-pointer), we still do it to increase compatibility with ICU.\n // But if a single unicode point can be encoded both as HKSCS and regular Big5, we prefer the latter.\n 0x8e69, 0x8e6f, 0x8e7e, 0x8eab, 0x8eb4, 0x8ecd, 0x8ed0, 0x8f57, 0x8f69, 0x8f6e, 0x8fcb, 0x8ffe,\n 0x906d, 0x907a, 0x90c4, 0x90dc, 0x90f1, 0x91bf, 0x92af, 0x92b0, 0x92b1, 0x92b2, 0x92d1, 0x9447, 0x94ca,\n 0x95d9, 0x96fc, 0x9975, 0x9b76, 0x9b78, 0x9b7b, 0x9bc6, 0x9bde, 0x9bec, 0x9bf6, 0x9c42, 0x9c53, 0x9c62,\n 0x9c68, 0x9c6b, 0x9c77, 0x9cbc, 0x9cbd, 0x9cd0, 0x9d57, 0x9d5a, 0x9dc4, 0x9def, 0x9dfb, 0x9ea9, 0x9eef,\n 0x9efd, 0x9f60, 0x9fcb, 0xa077, 0xa0dc, 0xa0df, 0x8fcc, 0x92c8, 0x9644, 0x96ed,\n\n // Step 2 of https://encoding.spec.whatwg.org/#index-big5-pointer: Use last pointer for U+2550, U+255E, U+2561, U+256A, U+5341, or U+5345\n 0xa2a4, 0xa2a5, 0xa2a7, 0xa2a6, 0xa2cc, 0xa2ce,\n ],\n },\n\n 'cnbig5': 'big5hkscs',\n 'csbig5': 'big5hkscs',\n 'xxbig5': 'big5hkscs',\n};\n","\"use strict\";\n\n// Update this array if you add/rename/remove files in this directory.\n// We support Browserify by skipping automatic module discovery and requiring modules directly.\nvar modules = [\n require(\"./internal\"),\n require(\"./utf32\"),\n require(\"./utf16\"),\n require(\"./utf7\"),\n require(\"./sbcs-codec\"),\n require(\"./sbcs-data\"),\n require(\"./sbcs-data-generated\"),\n require(\"./dbcs-codec\"),\n require(\"./dbcs-data\"),\n];\n\n// Put all encoding/alias/codec definitions to single object and export it.\nfor (var i = 0; i < modules.length; i++) {\n var module = modules[i];\n for (var enc in module)\n if (Object.prototype.hasOwnProperty.call(module, enc))\n exports[enc] = module[enc];\n}\n","\"use strict\";\n\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// NOTE: Due to 'stream' module being pretty large (~100Kb, significant in browser environments), \n// we opt to dependency-inject it instead of creating a hard dependency.\nmodule.exports = function(stream_module) {\n var Transform = stream_module.Transform;\n\n // == Encoder stream =======================================================\n\n function IconvLiteEncoderStream(conv, options) {\n this.conv = conv;\n options = options || {};\n options.decodeStrings = false; // We accept only strings, so we don't need to decode them.\n Transform.call(this, options);\n }\n\n IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteEncoderStream }\n });\n\n IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {\n if (typeof chunk != 'string')\n return done(new Error(\"Iconv encoding stream needs strings as its input.\"));\n try {\n var res = this.conv.write(chunk);\n if (res && res.length) this.push(res);\n done();\n }\n catch (e) {\n done(e);\n }\n }\n\n IconvLiteEncoderStream.prototype._flush = function(done) {\n try {\n var res = this.conv.end();\n if (res && res.length) this.push(res);\n done();\n }\n catch (e) {\n done(e);\n }\n }\n\n IconvLiteEncoderStream.prototype.collect = function(cb) {\n var chunks = [];\n this.on('error', cb);\n this.on('data', function(chunk) { chunks.push(chunk); });\n this.on('end', function() {\n cb(null, Buffer.concat(chunks));\n });\n return this;\n }\n\n\n // == Decoder stream =======================================================\n\n function IconvLiteDecoderStream(conv, options) {\n this.conv = conv;\n options = options || {};\n options.encoding = this.encoding = 'utf8'; // We output strings.\n Transform.call(this, options);\n }\n\n IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteDecoderStream }\n });\n\n IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {\n if (!Buffer.isBuffer(chunk) && !(chunk instanceof Uint8Array))\n return done(new Error(\"Iconv decoding stream needs buffers as its input.\"));\n try {\n var res = this.conv.write(chunk);\n if (res && res.length) this.push(res, this.encoding);\n done();\n }\n catch (e) {\n done(e);\n }\n }\n\n IconvLiteDecoderStream.prototype._flush = function(done) {\n try {\n var res = this.conv.end();\n if (res && res.length) this.push(res, this.encoding); \n done();\n }\n catch (e) {\n done(e);\n }\n }\n\n IconvLiteDecoderStream.prototype.collect = function(cb) {\n var res = '';\n this.on('error', cb);\n this.on('data', function(chunk) { res += chunk; });\n this.on('end', function() {\n cb(null, res);\n });\n return this;\n }\n\n return {\n IconvLiteEncoderStream: IconvLiteEncoderStream,\n IconvLiteDecoderStream: IconvLiteDecoderStream,\n };\n};\n","export default {}","\"use strict\";\n\nvar Buffer = require(\"safer-buffer\").Buffer;\n\nvar bomHandling = require(\"./bom-handling\"),\n iconv = module.exports;\n\n// All codecs and aliases are kept here, keyed by encoding name/alias.\n// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.\niconv.encodings = null;\n\n// Characters emitted in case of error.\niconv.defaultCharUnicode = '�';\niconv.defaultCharSingleByte = '?';\n\n// Public API.\niconv.encode = function encode(str, encoding, options) {\n str = \"\" + (str || \"\"); // Ensure string.\n\n var encoder = iconv.getEncoder(encoding, options);\n\n var res = encoder.write(str);\n var trail = encoder.end();\n \n return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;\n}\n\niconv.decode = function decode(buf, encoding, options) {\n if (typeof buf === 'string') {\n if (!iconv.skipDecodeWarning) {\n console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding');\n iconv.skipDecodeWarning = true;\n }\n\n buf = Buffer.from(\"\" + (buf || \"\"), \"binary\"); // Ensure buffer.\n }\n\n var decoder = iconv.getDecoder(encoding, options);\n\n var res = decoder.write(buf);\n var trail = decoder.end();\n\n return trail ? (res + trail) : res;\n}\n\niconv.encodingExists = function encodingExists(enc) {\n try {\n iconv.getCodec(enc);\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Legacy aliases to convert functions\niconv.toEncoding = iconv.encode;\niconv.fromEncoding = iconv.decode;\n\n// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.\niconv._codecDataCache = {};\niconv.getCodec = function getCodec(encoding) {\n if (!iconv.encodings)\n iconv.encodings = require(\"../encodings\"); // Lazy load all encoding definitions.\n \n // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n var enc = iconv._canonicalizeEncoding(encoding);\n\n // Traverse iconv.encodings to find actual codec.\n var codecOptions = {};\n while (true) {\n var codec = iconv._codecDataCache[enc];\n if (codec)\n return codec;\n\n var codecDef = iconv.encodings[enc];\n\n switch (typeof codecDef) {\n case \"string\": // Direct alias to other encoding.\n enc = codecDef;\n break;\n\n case \"object\": // Alias with options. Can be layered.\n for (var key in codecDef)\n codecOptions[key] = codecDef[key];\n\n if (!codecOptions.encodingName)\n codecOptions.encodingName = enc;\n \n enc = codecDef.type;\n break;\n\n case \"function\": // Codec itself.\n if (!codecOptions.encodingName)\n codecOptions.encodingName = enc;\n\n // The codec function must load all tables and return object with .encoder and .decoder methods.\n // It'll be called only once (for each different options object).\n codec = new codecDef(codecOptions, iconv);\n\n iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later.\n return codec;\n\n default:\n throw new Error(\"Encoding not recognized: '\" + encoding + \"' (searched as: '\"+enc+\"')\");\n }\n }\n}\n\niconv._canonicalizeEncoding = function(encoding) {\n // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n return (''+encoding).toLowerCase().replace(/:\\d{4}$|[^0-9a-z]/g, \"\");\n}\n\niconv.getEncoder = function getEncoder(encoding, options) {\n var codec = iconv.getCodec(encoding),\n encoder = new codec.encoder(options, codec);\n\n if (codec.bomAware && options && options.addBOM)\n encoder = new bomHandling.PrependBOM(encoder, options);\n\n return encoder;\n}\n\niconv.getDecoder = function getDecoder(encoding, options) {\n var codec = iconv.getCodec(encoding),\n decoder = new codec.decoder(options, codec);\n\n if (codec.bomAware && !(options && options.stripBOM === false))\n decoder = new bomHandling.StripBOM(decoder, options);\n\n return decoder;\n}\n\n// Streaming API\n// NOTE: Streaming API naturally depends on 'stream' module from Node.js. Unfortunately in browser environments this module can add\n// up to 100Kb to the output bundle. To avoid unnecessary code bloat, we don't enable Streaming API in browser by default.\n// If you would like to enable it explicitly, please add the following code to your app:\n// > iconv.enableStreamingAPI(require('stream'));\niconv.enableStreamingAPI = function enableStreamingAPI(stream_module) {\n if (iconv.supportsStreams)\n return;\n\n // Dependency-inject stream module to create IconvLite stream classes.\n var streams = require(\"./streams\")(stream_module);\n\n // Not public API yet, but expose the stream classes.\n iconv.IconvLiteEncoderStream = streams.IconvLiteEncoderStream;\n iconv.IconvLiteDecoderStream = streams.IconvLiteDecoderStream;\n\n // Streaming API.\n iconv.encodeStream = function encodeStream(encoding, options) {\n return new iconv.IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);\n }\n\n iconv.decodeStream = function decodeStream(encoding, options) {\n return new iconv.IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);\n }\n\n iconv.supportsStreams = true;\n}\n\n// Enable Streaming API automatically if 'stream' module is available and non-empty (the majority of environments).\nvar stream_module;\ntry {\n stream_module = require(\"stream\");\n} catch (e) {}\n\nif (stream_module && stream_module.Transform) {\n iconv.enableStreamingAPI(stream_module);\n\n} else {\n // In rare cases where 'stream' module is not available by default, throw a helpful exception.\n iconv.encodeStream = iconv.decodeStream = function() {\n throw new Error(\"iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.\");\n };\n}\n\nif (\"Ā\" != \"\\u0100\") {\n console.error(\"iconv-lite warning: js files use non-utf8 encoding. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.\");\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar iconv = require('iconv-lite');\n/**\n * This DataStream is for internal use.\n */\nvar DataStream = /** @class */ (function () {\n /**\n DataStream reads scalars, arrays and structs of data from an ArrayBuffer.\n It's like a file-like DataView on steroids.\n \n @param arrayBuffer ArrayBuffer to read from.\n @param byteOffset Offset from arrayBuffer beginning for the DataStream.\n @param endianness {@link DataStream.BIG_ENDIAN} or {@link DataStream.LITTLE_ENDIAN} (the default).\n */\n function DataStream(arrayBuffer, byteOffset, endianness) {\n /**\n @internal\n */\n this._dynamicSize = true;\n /**\n Virtual byte length of the DataStream backing buffer.\n Updated to be max of original buffer size and last written size.\n If dynamicSize is false is set to buffer size.\n \n @internal\n */\n this._byteLength = 0;\n /**\n Seek position where {@link readStruct} ran into a problem.\n Useful for debugging struct parsing.\n \n */\n this.failurePosition = 0;\n this._byteOffset = byteOffset || 0;\n if (arrayBuffer instanceof ArrayBuffer) {\n this.buffer = arrayBuffer;\n }\n else if (arrayBuffer instanceof DataView) {\n this.dataView = arrayBuffer;\n }\n else if (arrayBuffer && arrayBuffer.buffer instanceof ArrayBuffer) {\n this._byteOffset += arrayBuffer.byteOffset;\n this._buffer = arrayBuffer.buffer;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._dataView.byteLength + this._byteOffset;\n }\n else {\n throw new Error(\"Unknown arrayBuffer\");\n }\n this.position = 0;\n this.endianness = endianness == null ? DataStream.LITTLE_ENDIAN : endianness;\n }\n ;\n /**\n Saves the DataStream contents to the given filename.\n Uses Chrome's anchor download property to initiate download.\n \n @param filename Filename to save as.\n */\n DataStream.prototype.save = function (filename) {\n var blob = new Blob([this.buffer]);\n var URL = (window[\"webkitURL\"] || window.URL);\n if (URL && URL.createObjectURL) {\n var url = URL.createObjectURL(blob);\n var a = document.createElement('a');\n a.setAttribute('href', url);\n a.setAttribute('download', filename);\n a.click();\n URL.revokeObjectURL(url);\n }\n else {\n throw (\"DataStream.save: Can't create object URL.\");\n }\n };\n ;\n Object.defineProperty(DataStream.prototype, \"dynamicSize\", {\n /**\n * Whether to extend DataStream buffer when trying to write beyond its size.\n * If set, the buffer is reallocated to twice its current size until the\n * requested write fits the buffer.\n */\n get: function () {\n return this._dynamicSize;\n },\n set: function (v) {\n if (!v) {\n this._trimAlloc();\n }\n this._dynamicSize = v;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(DataStream.prototype, \"byteLength\", {\n /**\n Returns the byte length of the DataStream object.\n */\n get: function () {\n return this._byteLength - this._byteOffset;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(DataStream.prototype, \"buffer\", {\n /**\n Set/get the backing ArrayBuffer of the DataStream object.\n The setter updates the DataView to point to the new buffer.\n */\n get: function () {\n this._trimAlloc();\n return this._buffer;\n },\n set: function (v) {\n this._buffer = v;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._buffer.byteLength;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(DataStream.prototype, \"byteOffset\", {\n /**\n Set/get the byteOffset of the DataStream object.\n The setter updates the DataView to point to the new byteOffset.\n */\n get: function () {\n return this._byteOffset;\n },\n set: function (v) {\n this._byteOffset = v;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._buffer.byteLength;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(DataStream.prototype, \"dataView\", {\n /**\n Set/get the backing DataView of the DataStream object.\n The setter updates the buffer and byteOffset to point to the DataView values.\n */\n get: function () {\n return this._dataView;\n },\n set: function (v) {\n this._byteOffset = v.byteOffset;\n this._buffer = v.buffer;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._byteOffset + v.byteLength;\n },\n enumerable: false,\n configurable: true\n });\n /**\n Internal function to resize the DataStream buffer when required.\n @param extra Number of bytes to add to the buffer allocation.\n */\n DataStream.prototype._realloc = function (extra) {\n if (!this._dynamicSize) {\n return;\n }\n var req = this._byteOffset + this.position + extra;\n var blen = this._buffer.byteLength;\n if (req <= blen) {\n if (req > this._byteLength) {\n this._byteLength = req;\n }\n return;\n }\n if (blen < 1) {\n blen = 1;\n }\n while (req > blen) {\n blen *= 2;\n }\n var buf = new ArrayBuffer(blen);\n var src = new Uint8Array(this._buffer);\n var dst = new Uint8Array(buf, 0, src.length);\n dst.set(src);\n this.buffer = buf;\n this._byteLength = req;\n };\n ;\n /**\n Internal function to trim the DataStream buffer when required.\n Used for stripping out the extra bytes from the backing buffer when\n the virtual byteLength is smaller than the buffer byteLength (happens after\n growing the buffer with writes and not filling the extra space completely).\n \n */\n DataStream.prototype._trimAlloc = function () {\n if (this._byteLength == this._buffer.byteLength) {\n return;\n }\n var buf = new ArrayBuffer(this._byteLength);\n var dst = new Uint8Array(buf);\n var src = new Uint8Array(this._buffer, 0, dst.length);\n dst.set(src);\n this.buffer = buf;\n };\n ;\n /**\n Sets the DataStream read/write position to given position.\n Clamps between 0 and DataStream length.\n \n @param pos Position to seek to.\n */\n DataStream.prototype.seek = function (pos) {\n var npos = Math.max(0, Math.min(this.byteLength, pos));\n this.position = (isNaN(npos) || !isFinite(npos)) ? 0 : npos;\n };\n ;\n /**\n Returns true if the DataStream seek pointer is at the end of buffer and\n there's no more data to read.\n \n @return True if the seek pointer is at the end of the buffer.\n */\n DataStream.prototype.isEof = function () {\n return (this.position >= this.byteLength);\n };\n ;\n /**\n Maps an Int32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n \n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n \n @param length Number of elements to map.\n @param e Endianness of the data to read.\n @return Int32Array to the DataStream backing buffer.\n */\n DataStream.prototype.mapInt32Array = function (length, e) {\n this._realloc(length * 4);\n var arr = new Int32Array(this._buffer, this.byteOffset + this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n };\n ;\n /**\n Maps an Int16Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n \n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n \n @param length Number of elements to map.\n @param e Endianness of the data to read.\n @return Int16Array to the DataStream backing buffer.\n */\n DataStream.prototype.mapInt16Array = function (length, e) {\n this._realloc(length * 2);\n var arr = new Int16Array(this._buffer, this.byteOffset + this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 2;\n return arr;\n };\n ;\n /**\n Maps an Int8Array into the DataStream buffer.\n \n Nice for quickly reading in data.\n \n @param length Number of elements to map.\n @param e Endianness of the data to read.\n @return Int8Array to the DataStream backing buffer.\n */\n DataStream.prototype.mapInt8Array = function (length) {\n this._realloc(length * 1);\n var arr = new Int8Array(this._buffer, this.byteOffset + this.position, length);\n this.position += length * 1;\n return arr;\n };\n ;\n /**\n Maps a Uint32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n \n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n \n @param length Number of elements to map.\n @param e Endianness of the data to read.\n @return Uint32Array to the DataStream backing buffer.\n */\n DataStream.prototype.mapUint32Array = function (length, e) {\n this._realloc(length * 4);\n var arr = new Uint32Array(this._buffer, this.byteOffset + this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n };\n ;\n /**\n Maps a Uint16Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n \n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n \n @param length Number of elements to map.\n @param e Endianness of the data to read.\n @return Uint16Array to the DataStream backing buffer.\n */\n DataStream.prototype.mapUint16Array = function (length, e) {\n this._realloc(length * 2);\n var arr = new Uint16Array(this._buffer, this.byteOffset + this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 2;\n return arr;\n };\n ;\n /**\n Maps a Uint8Array into the DataStream buffer.\n \n Nice for quickly reading in data.\n \n @param length Number of elements to map.\n @param e Endianness of the data to read.\n @return Uint8Array to the DataStream backing buffer.\n */\n DataStream.prototype.mapUint8Array = function (length) {\n this._realloc(length * 1);\n var arr = new Uint8Array(this._buffer, this.byteOffset + this.position, length);\n this.position += length * 1;\n return arr;\n };\n ;\n /**\n Maps a Float64Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n \n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n \n @param length Number of elements to map.\n @param e Endianness of the data to read.\n @return Float64Array to the DataStream backing buffer.\n */\n DataStream.prototype.mapFloat64Array = function (length, e) {\n this._realloc(length * 8);\n var arr = new Float64Array(this._buffer, this.byteOffset + this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 8;\n return arr;\n };\n ;\n /**\n Maps a Float32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n \n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n \n @param length Number of elements to map.\n @param e Endianness of the data to read.\n @return Float32Array to the DataStream backing buffer.\n */\n DataStream.prototype.mapFloat32Array = function (length, e) {\n this._realloc(length * 4);\n var arr = new Float32Array(this._buffer, this.byteOffset + this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n };\n ;\n /**\n Reads an Int32Array of desired length and endianness from the DataStream.\n \n @param length Number of elements to map.\n @param e Endianness of the data to read.\n @return The read Int32Array.\n */\n DataStream.prototype.readInt32Array = function (length, e) {\n length = length == null ? (this.byteLength - this.position) / 4 : length;\n var arr = new Int32Array(length);\n DataStream.memcpy(arr.buffer, 0, this.buffer, this.byteOffset + this.position, length * arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n };\n ;\n /**\n Reads an Int16Array of desired length and endianness from the DataStream.\n \n @param length Number of elements to map.\n @param e Endianness of the data to read.\n @return The read Int16Array.\n */\n DataStream.prototype.readInt16Array = function (length, e) {\n length = length == null ? (this.byteLength - this.position) / 2 : length;\n var arr = new Int16Array(length);\n DataStream.memcpy(arr.buffer, 0, this.buffer, this.byteOffset + this.position, length * arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n };\n ;\n /**\n Reads an Int8Array of desired length from the DataStream.\n \n @param length Number of elements to map.\n @param e Endianness of the data to read.\n @return The read Int8Array.\n */\n DataStream.prototype.readInt8Array = function (length) {\n length = length == null ? (this.byteLength - this.position) : length;\n var arr = new Int8Array(length);\n DataStream.memcpy(arr.buffer, 0, this.buffer, this.byteOffset + this.position, length * arr.BYTES_PER_ELEMENT);\n this.position += arr.byteLength;\n return arr;\n };\n ;\n /**\n Reads a Uint32Array of desired length and endianness from the DataStream.\n \n @param length Number of elements to map.\n @param e Endianness of the data to read.\n @return The read Uint32Array.\n */\n DataStream.prototype.readUint32Array = function (length, e) {\n length = length == null ? (this.byteLength - this.position) / 4 : length;\n var arr = new Uint32Array(length);\n DataStream.memcpy(arr.buffer, 0, this.buffer, this.byteOffset + this.position, length * arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n };\n ;\n /**\n Reads a Uint16Array of desired length and endianness from the DataStream.\n \n @param length Number of elements to map.\n @param e Endianness of the data to read.\n @return The read Uint16Array.\n */\n DataStream.prototype.readUint16Array = function (length, e) {\n length = length == null ? (this.byteLength - this.position) / 2 : length;\n var arr = new Uint16Array(length);\n DataStream.memcpy(arr.buffer, 0, this.buffer, this.byteOffset + this.position, length * arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n };\n ;\n /**\n Reads a Uint8Array of desired length from the DataStream.\n \n @param length Number of elements to map.\n @param e Endianness of the data to read.\n @return The read Uint8Array.\n */\n DataStream.prototype.readUint8Array = function (length) {\n length = length == null ? (this.byteLength - this.position) : length;\n var arr = new Uint8Array(length);\n DataStream.memcpy(arr.buffer, 0, this.buffer, this.byteOffset + this.position, length * arr.BYTES_PER_ELEMENT);\n this.position += arr.byteLength;\n return arr;\n };\n ;\n /**\n * @internal\n */\n DataStream.prototype.readToUint8Array = function (length, arr, dstOffset) {\n length = length == null ? (this.byteLength - this.position) : length;\n DataStream.memcpy(arr.buffer, dstOffset, this.buffer, this.byteOffset + this.position, length * arr.BYTES_PER_ELEMENT);\n this.position += arr.byteLength;\n };\n ;\n /**\n Reads a Float64Array of desired length and endianness from the DataStream.\n \n @param length Number of elements to map.\n @param e Endianness of the data to read.\n @return The read Float64Array.\n */\n DataStream.prototype.readFloat64Array = function (length, e) {\n length = length == null ? (this.byteLength - this.position) / 8 : length;\n var arr = new Float64Array(length);\n DataStream.memcpy(arr.buffer, 0, this.buffer, this.byteOffset + this.position, length * arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n };\n ;\n /**\n Reads a Float32Array of desired length and endianness from the DataStream.\n \n @param length Number of elements to map.\n @param e Endianness of the data to read.\n @return The read Float32Array.\n */\n DataStream.prototype.readFloat32Array = function (length, e) {\n length = length == null ? (this.byteLength - this.position) / 4 : length;\n var arr = new Float32Array(length);\n DataStream.memcpy(arr.buffer, 0, this.buffer, this.byteOffset + this.position, length * arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n };\n ;\n /**\n Writes an Int32Array of specified endianness to the DataStream.\n \n @param arr The array to write.\n @param e Endianness of the data to write.\n */\n DataStream.prototype.writeInt32Array = function (arr, e) {\n this._realloc(arr.length * 4);\n if (arr instanceof Int32Array &&\n this.byteOffset + this.position % arr.BYTES_PER_ELEMENT == 0) {\n DataStream.memcpy(this._buffer, this.byteOffset + this.position, arr.buffer, 0, arr.byteLength);\n this.mapInt32Array(arr.length, e);\n }\n else {\n for (var i = 0; i < arr.length; i++) {\n this.writeInt32(arr[i], e);\n }\n }\n };\n ;\n /**\n Writes an Int16Array of specified endianness to the DataStream.\n \n @param arr The array to write.\n @param e Endianness of the data to write.\n */\n DataStream.prototype.writeInt16Array = function (arr, e) {\n this._realloc(arr.length * 2);\n if (arr instanceof Int16Array &&\n this.byteOffset + this.position % arr.BYTES_PER_ELEMENT == 0) {\n DataStream.memcpy(this._buffer, this.byteOffset + this.position, arr.buffer, 0, arr.byteLength);\n this.mapInt16Array(arr.length, e);\n }\n else {\n for (var i = 0; i < arr.length; i++) {\n this.writeInt16(arr[i], e);\n }\n }\n };\n ;\n /**\n Writes an Int8Array to the DataStream.\n \n @param arr The array to write.\n */\n DataStream.prototype.writeInt8Array = function (arr) {\n this._realloc(arr.length * 1);\n if (arr instanceof Int8Array &&\n this.byteOffset + this.position % arr.BYTES_PER_ELEMENT == 0) {\n DataStream.memcpy(this._buffer, this.byteOffset + this.position, arr.buffer, 0, arr.byteLength);\n this.mapInt8Array(arr.length);\n }\n else {\n for (var i = 0; i < arr.length; i++) {\n this.writeInt8(arr[i]);\n }\n }\n };\n ;\n /**\n Writes a Uint32Array of specified endianness to the DataStream.\n \n @param arr The array to write.\n @param e Endianness of the data to write.\n */\n DataStream.prototype.writeUint32Array = function (arr, e) {\n this._realloc(arr.length * 4);\n if (arr instanceof Uint32Array &&\n this.byteOffset + this.position % arr.BYTES_PER_ELEMENT == 0) {\n DataStream.memcpy(this._buffer, this.byteOffset + this.position, arr.buffer, 0, arr.byteLength);\n this.mapUint32Array(arr.length, e);\n }\n else {\n for (var i = 0; i < arr.length; i++) {\n this.writeUint32(arr[i], e);\n }\n }\n };\n ;\n /**\n Writes a Uint16Array of specified endianness to the DataStream.\n \n @param arr The array to write.\n @param e Endianness of the data to write.\n */\n DataStream.prototype.writeUint16Array = function (arr, e) {\n this._realloc(arr.length * 2);\n if (arr instanceof Uint16Array &&\n this.byteOffset + this.position % arr.BYTES_PER_ELEMENT == 0) {\n DataStream.memcpy(this._buffer, this.byteOffset + this.position, arr.buffer, 0, arr.byteLength);\n this.mapUint16Array(arr.length, e);\n }\n else {\n for (var i = 0; i < arr.length; i++) {\n this.writeUint16(arr[i], e);\n }\n }\n };\n ;\n /**\n Writes a Uint8Array to the DataStream.\n \n @param arr The array to write.\n */\n DataStream.prototype.writeUint8Array = function (arr) {\n this._realloc(arr.length * 1);\n if (arr instanceof Uint8Array &&\n this.byteOffset + this.position % arr.BYTES_PER_ELEMENT == 0) {\n DataStream.memcpy(this._buffer, this.byteOffset + this.position, arr.buffer, 0, arr.byteLength);\n this.mapUint8Array(arr.length);\n }\n else {\n for (var i = 0; i < arr.length; i++) {\n this.writeUint8(arr[i]);\n }\n }\n };\n ;\n /**\n Writes a Float64Array of specified endianness to the DataStream.\n \n @param arr The array to write.\n @param e Endianness of the data to write.\n */\n DataStream.prototype.writeFloat64Array = function (arr, e) {\n this._realloc(arr.length * 8);\n if (arr instanceof Float64Array &&\n this.byteOffset + this.position % arr.BYTES_PER_ELEMENT == 0) {\n DataStream.memcpy(this._buffer, this.byteOffset + this.position, arr.buffer, 0, arr.byteLength);\n this.mapFloat64Array(arr.length, e);\n }\n else {\n for (var i = 0; i < arr.length; i++) {\n this.writeFloat64(arr[i], e);\n }\n }\n };\n ;\n /**\n Writes a Float32Array of specified endianness to the DataStream.\n \n @param arr The array to write.\n @param e Endianness of the data to write.\n */\n DataStream.prototype.writeFloat32Array = function (arr, e) {\n this._realloc(arr.length * 4);\n if (arr instanceof Float32Array &&\n this.byteOffset + this.position % arr.BYTES_PER_ELEMENT == 0) {\n DataStream.memcpy(this._buffer, this.byteOffset + this.position, arr.buffer, 0, arr.byteLength);\n this.mapFloat32Array(arr.length, e);\n }\n else {\n for (var i = 0; i < arr.length; i++) {\n this.writeFloat32(arr[i], e);\n }\n }\n };\n ;\n /**\n Reads a 32-bit int from the DataStream with the desired endianness.\n \n @param e Endianness of the number.\n @return The read number.\n */\n DataStream.prototype.readInt32 = function (e) {\n var v = this._dataView.getInt32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n };\n ;\n /**\n Reads a 32-bit int from the DataStream with the offset.\n \n @param offset The offset.\n @return The read number.\n */\n DataStream.prototype.readInt = function (offset) {\n this.seek(offset);\n return this.readInt32();\n };\n ;\n /**\n Reads a 16-bit int from the DataStream with the desired endianness.\n \n @param e Endianness of the number.\n @return The read number.\n */\n DataStream.prototype.readInt16 = function (e) {\n var v = this._dataView.getInt16(this.position, e == null ? this.endianness : e);\n this.position += 2;\n return v;\n };\n ;\n /**\n Reads a 16-bit int from the DataStream with the offset\n \n @param offset The offset.\n @return The read number.\n */\n DataStream.prototype.readShort = function (offset) {\n this.seek(offset);\n return this.readInt16();\n };\n ;\n /**\n Reads an 8-bit int from the DataStream.\n \n @return The read number.\n */\n DataStream.prototype.readInt8 = function () {\n var v = this._dataView.getInt8(this.position);\n this.position += 1;\n return v;\n };\n ;\n /**\n Reads an 8-bit int from the DataStream with the offset.\n \n @param offset The offset.\n @return The read number.\n */\n DataStream.prototype.readByte = function (offset) {\n this.seek(offset);\n return this.readInt8();\n };\n ;\n /**\n Reads a 32-bit unsigned int from the DataStream with the desired endianness.\n \n @param e Endianness of the number.\n @return The read number.\n */\n DataStream.prototype.readUint32 = function (e) {\n var v = this._dataView.getUint32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n };\n ;\n /**\n Reads a 16-bit unsigned int from the DataStream with the desired endianness.\n \n @param e Endianness of the number.\n @return The read number.\n */\n DataStream.prototype.readUint16 = function (e) {\n var v = this._dataView.getUint16(this.position, e == null ? this.endianness : e);\n this.position += 2;\n return v;\n };\n ;\n /**\n Reads an 8-bit unsigned int from the DataStream.\n \n @return The read number.\n */\n DataStream.prototype.readUint8 = function () {\n var v = this._dataView.getUint8(this.position);\n this.position += 1;\n return v;\n };\n ;\n /**\n Reads a 32-bit float from the DataStream with the desired endianness.\n \n @param e Endianness of the number.\n @return The read number.\n */\n DataStream.prototype.readFloat32 = function (e) {\n var v = this._dataView.getFloat32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n };\n ;\n /**\n Reads a 64-bit float from the DataStream with the desired endianness.\n \n @param e Endianness of the number.\n @return The read number.\n */\n DataStream.prototype.readFloat64 = function (e) {\n var v = this._dataView.getFloat64(this.position, e == null ? this.endianness : e);\n this.position += 8;\n return v;\n };\n ;\n /**\n Writes a 32-bit int to the DataStream with the desired endianness.\n \n @param v Number to write.\n @param e Endianness of the number.\n */\n DataStream.prototype.writeInt32 = function (v, e) {\n this._realloc(4);\n this._dataView.setInt32(this.position, v, e == null ? this.endianness : e);\n this.position += 4;\n };\n ;\n /**\n Writes a 16-bit int to the DataStream with the desired endianness.\n \n @param v Number to write.\n @param e Endianness of the number.\n */\n DataStream.prototype.writeInt16 = function (v, e) {\n this._realloc(2);\n this._dataView.setInt16(this.position, v, e == null ? this.endianness : e);\n this.position += 2;\n };\n ;\n /**\n Writes an 8-bit int to the DataStream.\n \n @param v Number to write.\n */\n DataStream.prototype.writeInt8 = function (v) {\n this._realloc(1);\n this._dataView.setInt8(this.position, v);\n this.position += 1;\n };\n ;\n /**\n Writes a 32-bit unsigned int to the DataStream with the desired endianness.\n \n @param v Number to write.\n @param e Endianness of the number.\n */\n DataStream.prototype.writeUint32 = function (v, e) {\n this._realloc(4);\n this._dataView.setUint32(this.position, v, e == null ? this.endianness : e);\n this.position += 4;\n };\n ;\n /**\n Writes a 16-bit unsigned int to the DataStream with the desired endianness.\n \n @param v Number to write.\n @param e Endianness of the number.\n */\n DataStream.prototype.writeUint16 = function (v, e) {\n this._realloc(2);\n this._dataView.setUint16(this.position, v, e == null ? this.endianness : e);\n this.position += 2;\n };\n ;\n /**\n Writes an 8-bit unsigned int to the DataStream.\n \n @param v Number to write.\n */\n DataStream.prototype.writeUint8 = function (v) {\n this._realloc(1);\n this._dataView.setUint8(this.position, v);\n this.position += 1;\n };\n ;\n /**\n Writes a 32-bit float to the DataStream with the desired endianness.\n \n @param v Number to write.\n @param e Endianness of the number.\n */\n DataStream.prototype.writeFloat32 = function (v, e) {\n this._realloc(4);\n this._dataView.setFloat32(this.position, v, e == null ? this.endianness : e);\n this.position += 4;\n };\n ;\n /**\n Writes a 64-bit float to the DataStream with the desired endianness.\n \n @param v Number to write.\n @param e Endianness of the number.\n */\n DataStream.prototype.writeFloat64 = function (v, e) {\n this._realloc(8);\n this._dataView.setFloat64(this.position, v, e == null ? this.endianness : e);\n this.position += 8;\n };\n ;\n /**\n Copies byteLength bytes from the src buffer at srcOffset to the\n dst buffer at dstOffset.\n \n @param dst Destination ArrayBuffer to write to.\n @param dstOffset Offset to the destination ArrayBuffer.\n @param src Source ArrayBuffer to read from.\n @param srcOffset Offset to the source ArrayBuffer.\n @param byteLength Number of bytes to copy.\n */\n DataStream.memcpy = function (dst, dstOffset, src, srcOffset, byteLength) {\n var dstU8 = new Uint8Array(dst, dstOffset, byteLength);\n var srcU8 = new Uint8Array(src, srcOffset, byteLength);\n dstU8.set(srcU8);\n };\n ;\n /**\n Converts array to native endianness in-place.\n \n @param array Typed array to convert.\n @param arrayIsLittleEndian True if the data in the array is\n little-endian. Set false for big-endian.\n @return The converted typed array.\n */\n DataStream.arrayToNative = function (array, arrayIsLittleEndian) {\n if (arrayIsLittleEndian == this.endianness) {\n return array;\n }\n else {\n return this.flipArrayEndianness(array);\n }\n };\n ;\n /**\n Converts native endianness array to desired endianness in-place.\n \n @param array Typed array to convert.\n @param littleEndian True if the converted array should be\n little-endian. Set false for big-endian.\n @return The converted typed array.\n */\n DataStream.nativeToEndian = function (array, littleEndian) {\n if (this.endianness == littleEndian) {\n return array;\n }\n else {\n return this.flipArrayEndianness(array);\n }\n };\n ;\n /**\n Flips typed array endianness in-place.\n \n @param array Typed array to flip.\n @return The converted typed array.\n */\n DataStream.flipArrayEndianness = function (array) {\n var u8 = new Uint8Array(array.buffer, array.byteOffset, array.byteLength);\n for (var i = 0; i < array.byteLength; i += array.BYTES_PER_ELEMENT) {\n for (var j = i + array.BYTES_PER_ELEMENT - 1, k = i; j > k; j--, k++) {\n var tmp = u8[k];\n u8[k] = u8[j];\n u8[j] = tmp;\n }\n }\n return array;\n };\n ;\n /**\n Creates an array from an array of character codes.\n Uses String.fromCharCode on the character codes and concats the results into a string.\n \n @param array Array of character codes.\n @return String created from the character codes.\n **/\n DataStream.createStringFromArray = function (array) {\n var str = \"\";\n for (var i = 0; i < array.length; i++) {\n str += String.fromCharCode(array[i]);\n }\n return str;\n };\n ;\n /**\n Reads a struct of data from the DataStream. The struct is defined as\n a flat array of [name, type]-pairs. See the example below:\n \n ds.readStruct([\n 'headerTag', 'uint32', // Uint32 in DataStream endianness.\n 'headerTag2', 'uint32be', // Big-endian Uint32.\n 'headerTag3', 'uint32le', // Little-endian Uint32.\n 'array', ['[]', 'uint32', 16], // Uint32Array of length 16.\n 'array2Length', 'uint32',\n 'array2', ['[]', 'uint32', 'array2Length'] // Uint32Array of length array2Length\n ]);\n \n The possible values for the type are as follows:\n \n // Number types\n \n // Unsuffixed number types use DataStream endianness.\n // To explicitly specify endianness, suffix the type with\n // 'le' for little-endian or 'be' for big-endian,\n // e.g. 'int32be' for big-endian int32.\n \n 'uint8' -- 8-bit unsigned int\n 'uint16' -- 16-bit unsigned int\n 'uint32' -- 32-bit unsigned int\n 'int8' -- 8-bit int\n 'int16' -- 16-bit int\n 'int32' -- 32-bit int\n 'float32' -- 32-bit float\n 'float64' -- 64-bit float\n \n // String types\n 'cstring' -- ASCII string terminated by a zero byte.\n 'string:N' -- ASCII string of length N, where N is a literal integer.\n 'string:variableName' -- ASCII string of length $variableName,\n where 'variableName' is a previously parsed number in the current struct.\n 'string,CHARSET:N' -- String of byteLength N encoded with given CHARSET.\n 'u16string:N' -- UCS-2 string of length N in DataStream endianness.\n 'u16stringle:N' -- UCS-2 string of length N in little-endian.\n 'u16stringbe:N' -- UCS-2 string of length N in big-endian.\n \n // Complex types\n [name, type, name_2, type_2, ..., name_N, type_N] -- Struct\n function(dataStream, struct) {} -- Callback function to read and return data.\n {get: function(dataStream, struct) {},\n set: function(dataStream, struct) {}}\n -- Getter/setter functions to read and return data, handy for using the same\n struct definition for reading and writing structs.\n ['[]', type, length] -- Array of given type and length. The length can be either\n a number, a string that references a previously-read\n field, or a callback function(struct, dataStream, type){}.\n If length is '*', reads in as many elements as it can.\n \n @param structDefinition Struct definition object.\n @return The read struct. Null if failed to read struct.\n */\n DataStream.prototype.readStruct = function (structDefinition) {\n var struct = {}, t, v, n;\n var p = this.position;\n for (var i = 0; i < structDefinition.length; i += 2) {\n t = structDefinition[i + 1];\n v = this.readType(t, struct);\n if (v == null) {\n if (this.failurePosition == 0) {\n this.failurePosition = this.position;\n }\n this.position = p;\n return null;\n }\n struct[structDefinition[i]] = v;\n }\n return struct;\n };\n ;\n /**\n Read UCS-2 string of desired length and endianness from the DataStream.\n \n @param length The length of the string to read.\n @param endianness The endianness of the string data in the DataStream.\n @return The read string.\n */\n DataStream.prototype.readUCS2String = function (length, endianness) {\n return DataStream.createStringFromArray(this.readUint16Array(length, endianness));\n };\n ;\n /**\n Read UCS-2 string of desired length and offset from the DataStream.\n \n @param offset The offset.\n @param length The length of the string to read.\n @return The read string.\n */\n DataStream.prototype.readStringAt = function (offset, length) {\n this.seek(offset);\n return this.readUCS2String(length);\n };\n ;\n /**\n Write a UCS-2 string of desired endianness to the DataStream. The\n lengthOverride argument lets you define the number of characters to write.\n If the string is shorter than lengthOverride, the extra space is padded with\n zeroes.\n \n @param str The string to write.\n @param endianness The endianness to use for the written string data.\n @param lengthOverride The number of characters to write.\n */\n DataStream.prototype.writeUCS2String = function (str, endianness, lengthOverride) {\n if (lengthOverride == null) {\n lengthOverride = str.length;\n }\n for (var i = 0; i < str.length && i < lengthOverride; i++) {\n this.writeUint16(str.charCodeAt(i), endianness);\n }\n for (; i < lengthOverride; i++) {\n this.writeUint16(0, endianness);\n }\n };\n ;\n /**\n Read a string of desired length and encoding from the DataStream.\n \n @param length The length of the string to read in bytes.\n @param encoding The encoding of the string data in the DataStream.\n Defaults to ASCII.\n @return The read string.\n */\n DataStream.prototype.readString = function (length, encoding) {\n if (encoding == null || encoding == \"ASCII\") {\n return DataStream.createStringFromArray(this.mapUint8Array(length == null ? this.byteLength - this.position : length));\n }\n else {\n return iconv.decode(this.mapUint8Array(length), encoding);\n }\n };\n ;\n /**\n Writes a string of desired length and encoding to the DataStream.\n \n @param s The string to write.\n @param encoding The encoding for the written string data.\n Defaults to ASCII.\n @param length The number of characters to write.\n */\n DataStream.prototype.writeString = function (s, encoding, length) {\n if (encoding == null || encoding == \"ASCII\") {\n if (length != null) {\n var i = 0;\n var len = Math.min(s.length, length);\n for (i = 0; i < len; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n for (; i < length; i++) {\n this.writeUint8(0);\n }\n }\n else {\n for (var i = 0; i < s.length; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n }\n }\n else {\n this.writeUint8Array(iconv.encode(s.substring(0, length), encoding));\n }\n };\n ;\n /**\n Read null-terminated string of desired length from the DataStream. Truncates\n the returned string so that the null byte is not a part of it.\n \n @param length The length of the string to read.\n @return The read string.\n */\n DataStream.prototype.readCString = function (length) {\n var blen = this.byteLength - this.position;\n var u8 = new Uint8Array(this._buffer, this._byteOffset + this.position);\n var len = blen;\n if (length != null) {\n len = Math.min(length, blen);\n }\n for (var i = 0; i < len && u8[i] != 0; i++)\n ; // find first zero byte\n var s = DataStream.createStringFromArray(this.mapUint8Array(i));\n if (length != null) {\n this.position += len - i;\n }\n else if (i != blen) {\n this.position += 1; // trailing zero if not at end of buffer\n }\n return s;\n };\n ;\n /**\n Writes a null-terminated string to DataStream and zero-pads it to length\n bytes. If length is not given, writes the string followed by a zero.\n If string is longer than length, the written part of the string does not have\n a trailing zero.\n \n @param s The string to write.\n @param length The number of characters to write.\n */\n DataStream.prototype.writeCString = function (s, length) {\n if (length != null) {\n var i = 0;\n var len = Math.min(s.length, length);\n for (i = 0; i < len; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n for (; i < length; i++) {\n this.writeUint8(0);\n }\n }\n else {\n for (var i = 0; i < s.length; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n this.writeUint8(0);\n }\n };\n ;\n /**\n Reads an object of type t from the DataStream, passing struct as the thus-far\n read struct to possible callbacks that refer to it. Used by readStruct for\n reading in the values, so the type is one of the readStruct types.\n \n @param t Type of the object to read.\n @param struct Struct to refer to when resolving length references\n and for calling callbacks.\n @return Returns the object on successful read, null on unsuccessful.\n */\n DataStream.prototype.readType = function (t, struct) {\n if (typeof t == \"function\") {\n return t(this, struct);\n }\n else if (typeof t == \"object\" && !(t instanceof Array)) {\n return t.get(this, struct);\n }\n else if (t instanceof Array && t.length != 3) {\n return this.readStruct(t);\n }\n var v = null;\n var lengthOverride = null;\n var charset = \"ASCII\";\n var pos = this.position;\n var len;\n if (typeof t == 'string' && /:/.test(t)) {\n var tp = t.split(\":\");\n t = tp[0];\n len = tp[1];\n // allow length to be previously parsed variable\n // e.g. 'string:fieldLength', if `fieldLength` has\n // been parsed previously.\n if (struct[len] != null) {\n lengthOverride = parseInt(struct[len]);\n }\n else {\n // assume literal integer e.g., 'string:4'\n lengthOverride = parseInt(tp[1]);\n }\n }\n if (typeof t == 'string' && /,/.test(t)) {\n var tp = t.split(\",\");\n t = tp[0];\n charset = parseInt(tp[1]).toString();\n }\n switch (t) {\n case 'uint8':\n v = this.readUint8();\n break;\n case 'int8':\n v = this.readInt8();\n break;\n case 'uint16':\n v = this.readUint16(this.endianness);\n break;\n case 'int16':\n v = this.readInt16(this.endianness);\n break;\n case 'uint32':\n v = this.readUint32(this.endianness);\n break;\n case 'int32':\n v = this.readInt32(this.endianness);\n break;\n case 'float32':\n v = this.readFloat32(this.endianness);\n break;\n case 'float64':\n v = this.readFloat64(this.endianness);\n break;\n case 'uint16be':\n v = this.readUint16(DataStream.BIG_ENDIAN);\n break;\n case 'int16be':\n v = this.readInt16(DataStream.BIG_ENDIAN);\n break;\n case 'uint32be':\n v = this.readUint32(DataStream.BIG_ENDIAN);\n break;\n case 'int32be':\n v = this.readInt32(DataStream.BIG_ENDIAN);\n break;\n case 'float32be':\n v = this.readFloat32(DataStream.BIG_ENDIAN);\n break;\n case 'float64be':\n v = this.readFloat64(DataStream.BIG_ENDIAN);\n break;\n case 'uint16le':\n v = this.readUint16(DataStream.LITTLE_ENDIAN);\n break;\n case 'int16le':\n v = this.readInt16(DataStream.LITTLE_ENDIAN);\n break;\n case 'uint32le':\n v = this.readUint32(DataStream.LITTLE_ENDIAN);\n break;\n case 'int32le':\n v = this.readInt32(DataStream.LITTLE_ENDIAN);\n break;\n case 'float32le':\n v = this.readFloat32(DataStream.LITTLE_ENDIAN);\n break;\n case 'float64le':\n v = this.readFloat64(DataStream.LITTLE_ENDIAN);\n break;\n case 'cstring':\n v = this.readCString(lengthOverride);\n break;\n case 'string':\n v = this.readString(lengthOverride, charset);\n break;\n case 'u16string':\n v = this.readUCS2String(lengthOverride, this.endianness);\n break;\n case 'u16stringle':\n v = this.readUCS2String(lengthOverride, DataStream.LITTLE_ENDIAN);\n break;\n case 'u16stringbe':\n v = this.readUCS2String(lengthOverride, DataStream.BIG_ENDIAN);\n break;\n default:\n if (t.length == 3) {\n var ta = t[1];\n var len = t[2];\n var length = 0;\n if (typeof len == 'function') {\n length = len(struct, this, t);\n }\n else if (typeof len == 'string' && struct[len] != null) {\n length = parseInt(struct[len]);\n }\n else {\n length = parseInt(len);\n }\n if (typeof ta == \"string\") {\n var tap = ta.replace(/(le|be)$/, '');\n var endianness = null;\n if (/le$/.test(ta)) {\n endianness = DataStream.LITTLE_ENDIAN;\n }\n else if (/be$/.test(ta)) {\n endianness = DataStream.BIG_ENDIAN;\n }\n if (len == '*') {\n length = null;\n }\n switch (tap) {\n case 'uint8':\n v = this.readUint8Array(length);\n break;\n case 'uint16':\n v = this.readUint16Array(length, endianness);\n break;\n case 'uint32':\n v = this.readUint32Array(length, endianness);\n break;\n case 'int8':\n v = this.readInt8Array(length);\n break;\n case 'int16':\n v = this.readInt16Array(length, endianness);\n break;\n case 'int32':\n v = this.readInt32Array(length, endianness);\n break;\n case 'float32':\n v = this.readFloat32Array(length, endianness);\n break;\n case 'float64':\n v = this.readFloat64Array(length, endianness);\n break;\n case 'cstring':\n case 'utf16string':\n case 'string':\n if (length == null) {\n v = [];\n while (!this.isEof()) {\n var u = this.readType(ta, struct);\n if (u == null)\n break;\n v.push(u);\n }\n }\n else {\n v = new Array(length);\n for (var i = 0; i < length; i++) {\n v[i] = this.readType(ta, struct);\n }\n }\n break;\n }\n }\n else {\n if (len == '*') {\n v = [];\n this.buffer;\n while (true) {\n var p = this.position;\n try {\n var o = this.readType(ta, struct);\n if (o == null) {\n this.position = p;\n break;\n }\n v.push(o);\n }\n catch (e) {\n this.position = p;\n break;\n }\n }\n }\n else {\n v = new Array(length);\n for (var i = 0; i < length; i++) {\n var u = this.readType(ta, struct);\n if (u == null)\n return null;\n v[i] = u;\n }\n }\n }\n break;\n }\n }\n if (lengthOverride != null) {\n this.position = pos + lengthOverride;\n }\n return v;\n };\n ;\n /**\n Writes a struct to the DataStream. Takes a structDefinition that gives the\n types and a struct object that gives the values. Refer to readStruct for the\n structure of structDefinition.\n \n @param structDefinition Type definition of the struct.\n @param struct The struct data object.\n */\n DataStream.prototype.writeStruct = function (structDefinition, struct) {\n for (var i = 0; i < structDefinition.length; i += 2) {\n var t = structDefinition[i + 1];\n this.writeType(t, struct[structDefinition[i]], struct);\n }\n };\n ;\n /**\n Writes object v of type t to the DataStream.\n \n @param t Type of data to write.\n @param v Value of data to write.\n @param struct Struct to pass to write callback functions.\n */\n DataStream.prototype.writeType = function (t, v, struct) {\n if (typeof t == \"function\") {\n return t(this, v);\n }\n else if (typeof t == \"object\" && !(t instanceof Array)) {\n return t.set(this, v, struct);\n }\n var lengthOverride = null;\n var charset = \"ASCII\";\n var pos = this.position;\n if (typeof (t) == 'string' && /:/.test(t)) {\n var tp = t.split(\":\");\n t = tp[0];\n lengthOverride = parseInt(tp[1]);\n }\n if (typeof t == 'string' && /,/.test(t)) {\n var tp = t.split(\",\");\n t = tp[0];\n charset = parseInt(tp[1]).toString();\n }\n switch (t) {\n case 'uint8':\n this.writeUint8(v);\n break;\n case 'int8':\n this.writeInt8(v);\n break;\n case 'uint16':\n this.writeUint16(v, this.endianness);\n break;\n case 'int16':\n this.writeInt16(v, this.endianness);\n break;\n case 'uint32':\n this.writeUint32(v, this.endianness);\n break;\n case 'int32':\n this.writeInt32(v, this.endianness);\n break;\n case 'float32':\n this.writeFloat32(v, this.endianness);\n break;\n case 'float64':\n this.writeFloat64(v, this.endianness);\n break;\n case 'uint16be':\n this.writeUint16(v, DataStream.BIG_ENDIAN);\n break;\n case 'int16be':\n this.writeInt16(v, DataStream.BIG_ENDIAN);\n break;\n case 'uint32be':\n this.writeUint32(v, DataStream.BIG_ENDIAN);\n break;\n case 'int32be':\n this.writeInt32(v, DataStream.BIG_ENDIAN);\n break;\n case 'float32be':\n this.writeFloat32(v, DataStream.BIG_ENDIAN);\n break;\n case 'float64be':\n this.writeFloat64(v, DataStream.BIG_ENDIAN);\n break;\n case 'uint16le':\n this.writeUint16(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'int16le':\n this.writeInt16(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'uint32le':\n this.writeUint32(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'int32le':\n this.writeInt32(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'float32le':\n this.writeFloat32(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'float64le':\n this.writeFloat64(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'cstring':\n this.writeCString(v, lengthOverride);\n break;\n case 'string':\n this.writeString(v, charset, lengthOverride);\n break;\n case 'u16string':\n this.writeUCS2String(v, this.endianness, lengthOverride);\n break;\n case 'u16stringle':\n this.writeUCS2String(v, DataStream.LITTLE_ENDIAN, lengthOverride);\n break;\n case 'u16stringbe':\n this.writeUCS2String(v, DataStream.BIG_ENDIAN, lengthOverride);\n break;\n default:\n if (t.length == 3) {\n var ta = t[1];\n for (var i = 0; i < v.length; i++) {\n this.writeType(ta, v[i], t[2]);\n }\n break;\n }\n else {\n this.writeStruct(t, v);\n break;\n }\n }\n if (lengthOverride != null) {\n this.position = pos;\n this._realloc(lengthOverride);\n this.position = pos + lengthOverride;\n }\n };\n ;\n /**\n Big-endian const to use as default endianness.\n */\n DataStream.BIG_ENDIAN = false;\n /**\n Little-endian const to use as default endianness.\n */\n DataStream.LITTLE_ENDIAN = true;\n /**\n Native endianness. Either DataStream.BIG_ENDIAN or DataStream.LITTLE_ENDIAN\n depending on the platform endianness.\n \n */\n DataStream.endianness = new Int8Array(new Int16Array([1]).buffer)[0] > 0;\n return DataStream;\n}());\nexports.default = DataStream;\n/* Fix for Opera 12 not defining BYTES_PER_ELEMENT in typed array prototypes. */\nif (Uint8Array.prototype.BYTES_PER_ELEMENT === undefined) {\n Object.defineProperties(Uint8Array.prototype, { BYTES_PER_ELEMENT: { value: Uint8Array.BYTES_PER_ELEMENT } });\n Object.defineProperties(Int8Array.prototype, { BYTES_PER_ELEMENT: { value: Int8Array.BYTES_PER_ELEMENT } });\n Object.defineProperties(Uint8ClampedArray.prototype, { BYTES_PER_ELEMENT: { value: Uint8ClampedArray.BYTES_PER_ELEMENT } });\n Object.defineProperties(Uint16Array.prototype, { BYTES_PER_ELEMENT: { value: Uint16Array.BYTES_PER_ELEMENT } });\n Object.defineProperties(Int16Array.prototype, { BYTES_PER_ELEMENT: { value: Int16Array.BYTES_PER_ELEMENT } });\n Object.defineProperties(Uint32Array.prototype, { BYTES_PER_ELEMENT: { value: Uint32Array.BYTES_PER_ELEMENT } });\n Object.defineProperties(Int32Array.prototype, { BYTES_PER_ELEMENT: { value: Int32Array.BYTES_PER_ELEMENT } });\n Object.defineProperties(Float64Array.prototype, { BYTES_PER_ELEMENT: { value: Float64Array.BYTES_PER_ELEMENT } });\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Reader = exports.TypeEnum = void 0;\nvar DataStream_1 = __importDefault(require(\"./DataStream\"));\nvar utils_1 = require(\"./utils\");\nvar const_1 = __importDefault(require(\"./const\"));\n/**\n * `Object Type` in `2.6.1 Compound File Directory Entry`\n *\n * See also: [[MS-CFB]: Compound File Directory Entry | Microsoft Docs](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-cfb/60fe8611-66c3-496b-b70d-a504c94c9ace)\n */\nvar TypeEnum;\n(function (TypeEnum) {\n /**\n * `Storage Object`\n *\n * storage object: An object in a compound file that is analogous to a file system directory. The parent object of a storage object must be another storage object or the root storage object.\n *\n * See also:\n *\n * - [[MS-CFB]: Other Directory Entries | Microsoft Docs](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-cfb/b37413bb-f3ef-4adc-b18e-29bddd62c26e)\n * - [[MS-CFB]: Glossary | Microsoft Docs](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-cfb/59ccb2ef-1ce5-41e3-bc30-075dea759d0a#gt_c3ddf892-3f55-4561-8804-20325dbc8fba)\n */\n TypeEnum[TypeEnum[\"DIRECTORY\"] = 1] = \"DIRECTORY\";\n /**\n * `Stream Object`\n *\n * - stream object: An object in a compound file that is analogous to a file system file. The parent object of a stream object must be a storage object or the root storage object.\n *\n * See also:\n * - [[MS-CFB]: Compound File User-Defined Data Sectors | Microsoft Docs](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-cfb/b089deda-be20-4b4a-aad5-fbe68bb19672)\n * - [[MS-CFB]: Glossary | Microsoft Docs](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-cfb/59ccb2ef-1ce5-41e3-bc30-075dea759d0a#gt_9f598e1c-0d65-4845-8f06-8d50f7a32fd5)\n */\n TypeEnum[TypeEnum[\"DOCUMENT\"] = 2] = \"DOCUMENT\";\n /**\n * `Root Storage Object`\n *\n * - root storage object: A storage object in a compound file that must be accessed before any other storage objects and stream objects are referenced. It is the uppermost parent object in the storage object and stream object hierarchy.\n *\n * See also:\n * - [[MS-CFB]: Root Directory Entry | Microsoft Docs](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-cfb/026fde6e-143d-41bf-a7da-c08b2130d50e)\n * - [[MS-CFB]: Glossary | Microsoft Docs](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-cfb/59ccb2ef-1ce5-41e3-bc30-075dea759d0a#gt_d49237e3-04dd-4823-a0a5-5e23f750a5f4)\n */\n TypeEnum[TypeEnum[\"ROOT\"] = 5] = \"ROOT\";\n})(TypeEnum || (exports.TypeEnum = TypeEnum = {}));\n/**\n * Original msg file (CFBF) reader which was implemented in MsgReader.\n */\nvar Reader = /** @class */ (function () {\n function Reader(arrayBuffer) {\n this.ds = new DataStream_1.default(arrayBuffer, 0, DataStream_1.default.LITTLE_ENDIAN);\n }\n Reader.prototype.isMSGFile = function () {\n this.ds.seek(0);\n return (0, utils_1.arraysEqual)(const_1.default.FILE_HEADER, this.ds.readInt8Array(const_1.default.FILE_HEADER.length));\n };\n Reader.prototype.headerData = function () {\n this.bigBlockSize = this.ds.readByte(30) == const_1.default.MSG.L_BIG_BLOCK_MARK ? const_1.default.MSG.L_BIG_BLOCK_SIZE : const_1.default.MSG.S_BIG_BLOCK_SIZE;\n this.bigBlockLength = this.bigBlockSize / 4;\n // system data\n this.xBlockLength = this.bigBlockLength - 1;\n // header data\n this.batCount = this.ds.readInt(const_1.default.MSG.HEADER.BAT_COUNT_OFFSET);\n this.propertyStart = this.ds.readInt(const_1.default.MSG.HEADER.PROPERTY_START_OFFSET);\n this.sbatStart = this.ds.readInt(const_1.default.MSG.HEADER.SBAT_START_OFFSET);\n this.sbatCount = this.ds.readInt(const_1.default.MSG.HEADER.SBAT_COUNT_OFFSET);\n this.xbatStart = this.ds.readInt(const_1.default.MSG.HEADER.XBAT_START_OFFSET);\n this.xbatCount = this.ds.readInt(const_1.default.MSG.HEADER.XBAT_COUNT_OFFSET);\n };\n Reader.prototype.convertName = function (offset) {\n var nameLength = this.ds.readShort(offset + const_1.default.MSG.PROP.NAME_SIZE_OFFSET);\n if (nameLength < 1) {\n return '';\n }\n else {\n return this.ds.readStringAt(offset, nameLength / 2).split('\\0')[0];\n }\n };\n Reader.prototype.convertProperty = function (offset) {\n return {\n type: this.ds.readByte(offset + const_1.default.MSG.PROP.TYPE_OFFSET),\n name: this.convertName(offset),\n // hierarchy\n previousProperty: this.ds.readInt(offset + const_1.default.MSG.PROP.PREVIOUS_PROPERTY_OFFSET),\n nextProperty: this.ds.readInt(offset + const_1.default.MSG.PROP.NEXT_PROPERTY_OFFSET),\n childProperty: this.ds.readInt(offset + const_1.default.MSG.PROP.CHILD_PROPERTY_OFFSET),\n // data offset\n startBlock: this.ds.readInt(offset + const_1.default.MSG.PROP.START_BLOCK_OFFSET),\n sizeBlock: this.ds.readInt(offset + const_1.default.MSG.PROP.SIZE_OFFSET),\n };\n };\n Reader.prototype.convertBlockToProperties = function (propertyBlockOffset, props) {\n var propertyCount = this.bigBlockSize / const_1.default.MSG.PROP.PROPERTY_SIZE;\n var propertyOffset = this.getBlockOffsetAt(propertyBlockOffset);\n for (var i = 0; i < propertyCount; i++) {\n if (this.ds.byteLength < propertyOffset + const_1.default.MSG.PROP.TYPE_OFFSET) {\n break;\n }\n var propertyType = this.ds.readByte(propertyOffset + const_1.default.MSG.PROP.TYPE_OFFSET);\n switch (propertyType) {\n case const_1.default.MSG.PROP.TYPE_ENUM.ROOT:\n case const_1.default.MSG.PROP.TYPE_ENUM.DIRECTORY:\n case const_1.default.MSG.PROP.TYPE_ENUM.DOCUMENT:\n props.push(this.convertProperty(propertyOffset));\n break;\n case const_1.default.MSG.PROP.TYPE_ENUM.UNALLOCATED:\n default:\n props.push({\n type: propertyType,\n name: '',\n previousProperty: -1,\n nextProperty: -1,\n childProperty: -1,\n startBlock: 0,\n sizeBlock: 0,\n });\n break;\n }\n propertyOffset += const_1.default.MSG.PROP.PROPERTY_SIZE;\n }\n };\n Reader.prototype.createPropertyHierarchy = function (props, nodeProperty) {\n if (!nodeProperty || nodeProperty.childProperty == const_1.default.MSG.PROP.NO_INDEX) {\n return;\n }\n nodeProperty.children = [];\n var children = [{ currentMode: \"walk\", currentIndex: nodeProperty.childProperty }];\n while (children.length != 0) {\n var _a = children.pop(), currentMode = _a.currentMode, currentIndex = _a.currentIndex;\n var current = props[currentIndex];\n if (currentMode === \"push\") {\n nodeProperty.children.push(currentIndex);\n }\n else {\n if (current.type == const_1.default.MSG.PROP.TYPE_ENUM.DIRECTORY) {\n this.createPropertyHierarchy(props, current);\n }\n if (current.nextProperty != const_1.default.MSG.PROP.NO_INDEX) {\n children.push({ currentMode: \"walk\", currentIndex: current.nextProperty, });\n }\n children.push({ currentMode: \"push\", currentIndex: currentIndex, });\n if (current.previousProperty != const_1.default.MSG.PROP.NO_INDEX) {\n children.push({ currentMode: \"walk\", currentIndex: current.previousProperty, });\n }\n }\n }\n };\n Reader.prototype.propertyDataReader = function (propertyStart) {\n var props = [];\n var currentOffset = propertyStart;\n while (currentOffset != const_1.default.MSG.END_OF_CHAIN) {\n this.convertBlockToProperties(currentOffset, props);\n currentOffset = this.getNextBlock(currentOffset);\n }\n this.createPropertyHierarchy(props, props[0]);\n return props;\n };\n /**\n * Parse msg file.\n */\n Reader.prototype.parse = function () {\n this.headerData();\n this.batData = this.batDataReader();\n if (this.xbatCount > 0) {\n this.xbatDataReader();\n }\n this.sbatData = this.sbatDataReader();\n this.propertyData = this.propertyDataReader(this.propertyStart);\n this.bigBlockTable = this.readBigBlockTable();\n };\n Reader.prototype.batCountInHeader = function () {\n var maxBatsInHeader = (const_1.default.MSG.S_BIG_BLOCK_SIZE - const_1.default.MSG.HEADER.BAT_START_OFFSET) / 4;\n return Math.min(this.batCount, maxBatsInHeader);\n };\n Reader.prototype.batDataReader = function () {\n var result = new Array(this.batCountInHeader());\n this.ds.seek(const_1.default.MSG.HEADER.BAT_START_OFFSET);\n for (var i = 0; i < result.length; i++) {\n result[i] = this.ds.readInt32();\n }\n return result;\n };\n Reader.prototype.getBlockOffsetAt = function (offset) {\n return (offset + 1) * this.bigBlockSize;\n };\n Reader.prototype.getBlockAt = function (offset) {\n var startOffset = this.getBlockOffsetAt(offset);\n this.ds.seek(startOffset);\n return this.ds.readInt32Array(this.bigBlockLength);\n };\n Reader.prototype.getBlockValueAt = function (offset, index) {\n var startOffset = this.getBlockOffsetAt(offset);\n this.ds.seek(startOffset + 4 * index);\n return this.ds.readInt32();\n };\n Reader.prototype.getNextBlockInner = function (offset, blockOffsetData) {\n var currentBlock = Math.floor(offset / this.bigBlockLength);\n var currentBlockIndex = offset % this.bigBlockLength;\n var startBlockOffset = blockOffsetData[currentBlock];\n if (typeof startBlockOffset === \"undefined\") {\n return const_1.default.MSG.END_OF_CHAIN;\n }\n return this.getBlockValueAt(startBlockOffset, currentBlockIndex);\n };\n Reader.prototype.getNextBlock = function (offset) {\n return this.getNextBlockInner(offset, this.batData);\n };\n Reader.prototype.sbatDataReader = function () {\n var result = [];\n var startIndex = this.sbatStart;\n for (var i = 0; i < this.sbatCount && startIndex && startIndex != const_1.default.MSG.END_OF_CHAIN; i++) {\n result.push(startIndex);\n startIndex = this.getNextBlock(startIndex);\n }\n return result;\n };\n Reader.prototype.xbatDataReader = function () {\n var batCount = this.batCountInHeader();\n var batCountTotal = this.batCount;\n var remainingBlocks = batCountTotal - batCount;\n var nextBlockAt = this.xbatStart;\n for (var i = 0; i < this.xbatCount; i++) {\n var xBatBlock = this.getBlockAt(nextBlockAt);\n var blocksToProcess = Math.min(remainingBlocks, this.xBlockLength);\n for (var j = 0; j < blocksToProcess; j++) {\n var blockStartAt = xBatBlock[j];\n if (blockStartAt == const_1.default.MSG.UNUSED_BLOCK || blockStartAt == const_1.default.MSG.END_OF_CHAIN) {\n break;\n }\n this.batData.push(blockStartAt);\n }\n remainingBlocks -= blocksToProcess;\n nextBlockAt = xBatBlock[this.xBlockLength];\n if (nextBlockAt == const_1.default.MSG.UNUSED_BLOCK || nextBlockAt == const_1.default.MSG.END_OF_CHAIN) {\n break;\n }\n }\n };\n Reader.prototype.getNextBlockSmall = function (offset) {\n return this.getNextBlockInner(offset, this.sbatData);\n };\n Reader.prototype.getChainByBlockSmall = function (fieldProperty) {\n var blockChain = [];\n var nextBlockSmall = fieldProperty.startBlock;\n while (nextBlockSmall != const_1.default.MSG.END_OF_CHAIN) {\n blockChain.push(nextBlockSmall);\n nextBlockSmall = this.getNextBlockSmall(nextBlockSmall);\n }\n return blockChain;\n };\n Reader.prototype.readBigBlockTable = function () {\n var rootProp = this.propertyData[0];\n var table = [];\n var nextBlock = rootProp.startBlock;\n for (var i = 0; nextBlock != const_1.default.MSG.END_OF_CHAIN; i++) {\n table.push(nextBlock);\n nextBlock = this.getNextBlock(nextBlock);\n }\n return table;\n };\n Reader.prototype.readDataByBlockSmall = function (startBlock, blockSize, arr, dstOffset) {\n var byteOffset = startBlock * const_1.default.MSG.SMALL_BLOCK_SIZE;\n var bigBlockNumber = Math.floor(byteOffset / this.bigBlockSize);\n var bigBlockOffset = byteOffset % this.bigBlockSize;\n var nextBlock = this.bigBlockTable[bigBlockNumber];\n var blockStartOffset = this.getBlockOffsetAt(nextBlock);\n this.ds.seek(blockStartOffset + bigBlockOffset);\n return this.ds.readToUint8Array(blockSize, arr, dstOffset);\n };\n Reader.prototype.readChainDataByBlockSmall = function (fieldProperty, chain) {\n var resultData = new Uint8Array(fieldProperty.sizeBlock);\n for (var i = 0, idx = 0; i < chain.length; i++) {\n var readLen = (resultData.length < idx + const_1.default.MSG.SMALL_BLOCK_SIZE)\n ? resultData.length - idx\n : const_1.default.MSG.SMALL_BLOCK_SIZE;\n this.readDataByBlockSmall(chain[i], readLen, resultData, idx);\n idx += readLen;\n }\n return resultData;\n };\n Reader.prototype.readProperty = function (fieldProperty) {\n if (!fieldProperty.sizeBlock) {\n return new Uint8Array(0);\n }\n else if (fieldProperty.sizeBlock < const_1.default.MSG.BIG_BLOCK_MIN_DOC_SIZE) {\n var chain = this.getChainByBlockSmall(fieldProperty);\n if (chain.length == 1) {\n var resultData = new Uint8Array(fieldProperty.sizeBlock);\n this.readDataByBlockSmall(fieldProperty.startBlock, fieldProperty.sizeBlock, resultData, 0);\n return resultData;\n }\n else if (chain.length > 1) {\n return this.readChainDataByBlockSmall(fieldProperty, chain);\n }\n return new Uint8Array(0);\n }\n else {\n var nextBlock = fieldProperty.startBlock;\n var remaining = fieldProperty.sizeBlock;\n var position = 0;\n var resultData = new Uint8Array(fieldProperty.sizeBlock);\n while (1 <= remaining) {\n var blockStartOffset = this.getBlockOffsetAt(nextBlock);\n this.ds.seek(blockStartOffset);\n var partSize = Math.min(remaining, this.bigBlockSize);\n var part = this.ds.readUint8Array(partSize);\n resultData.set(part, position);\n position += partSize;\n remaining -= partSize;\n nextBlock = this.getNextBlock(nextBlock);\n }\n return resultData;\n }\n };\n /**\n * Get binary from document in CFBF.\n *\n * @param index entry index\n * @returns binary\n * @internal\n */\n Reader.prototype.readFileOf = function (index) {\n return this.readProperty(this.propertyData[index]);\n };\n Reader.prototype.folderOf = function (index) {\n var _this = this;\n var propertyData = this.propertyData;\n if (!propertyData) {\n return null;\n }\n var folder = propertyData[index];\n return {\n dataId: index,\n name: folder.name,\n fileNames: function () {\n var children = folder.children;\n if (children) {\n return children\n .map(function (subIndex) { return propertyData[subIndex]; })\n .filter(function (it) { return it.type === TypeEnum.DOCUMENT; })\n .map(function (it) { return it.name; });\n }\n return [];\n },\n fileNameSets: function () {\n var children = folder.children;\n if (children) {\n return children\n .map(function (subIndex) { return ({\n subIndex: subIndex,\n entry: propertyData[subIndex]\n }); })\n .filter(function (it) { return it.entry.type === TypeEnum.DOCUMENT; })\n .map(function (it) { return ({\n name: it.entry.name,\n length: it.entry.sizeBlock,\n dataId: it.subIndex,\n provider: function () { return _this.readProperty(it.entry); },\n }); });\n }\n return [];\n },\n subFolders: function () {\n var children = folder.children;\n if (children) {\n return children\n .filter(function (subIndex) { return propertyData[subIndex].type == TypeEnum.DIRECTORY; })\n .map(function (subIndex) { return _this.folderOf(subIndex); });\n }\n return [];\n },\n readFile: function (fileName) {\n var children = folder.children;\n if (children) {\n for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {\n var subIndex = children_1[_i];\n var file = propertyData[subIndex];\n if (file && file.type === TypeEnum.DOCUMENT && file.name === fileName) {\n return _this.readProperty(file);\n }\n }\n }\n return null;\n },\n };\n };\n /**\n * Get reader access to CFBF (valid after successful call of {@link parse}).\n *\n * @returns root folder\n */\n Reader.prototype.rootFolder = function () {\n return this.folderOf(0);\n };\n return Reader;\n}());\nexports.Reader = Reader;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.burn = burn;\nvar Reader_1 = require(\"./Reader\");\nvar DataStream_1 = __importDefault(require(\"./DataStream\"));\nvar const_1 = __importDefault(require(\"./const\"));\nfunction RoundUpto4096(num) {\n return (num + 4095) & (~4095);\n}\nfunction RoundUpto512(bytes) {\n return (bytes + 511) & (~511);\n}\nfunction RoundUpto64(bytes) {\n return (bytes + 63) & (~63);\n}\nfunction repeatValue(value, count) {\n var array = [];\n for (var x = 0; x < count; x++) {\n array.push(value);\n }\n return array;\n}\nvar LiteFat = /** @class */ (function () {\n function LiteFat(source) {\n this.sectors = source;\n }\n LiteFat.prototype.allocate = function (count) {\n var first = this.sectors.length;\n for (var x = 0; x < count; x++) {\n var next = (x + 1 === count) ? -2 : first + x + 1;\n this.sectors.push(next);\n }\n return first;\n };\n LiteFat.prototype.allocateAs = function (count, value) {\n var first = this.sectors.length;\n for (var x = 0; x < count; x++) {\n this.sectors.push(value);\n }\n return first;\n };\n LiteFat.prototype.finalize = function (boundary, value) {\n var num = (boundary - (this.sectors.length % boundary)) % boundary;\n for (; num >= 1; num -= 1) {\n this.sectors.push(value);\n }\n return this;\n };\n LiteFat.prototype.count = function () {\n return this.sectors.length;\n };\n return LiteFat;\n}());\nvar LiteBurner = /** @class */ (function () {\n function LiteBurner(entries) {\n this.fat = new LiteFat([]);\n this.miniFat = new LiteFat([]);\n this.liteEnts = entries\n .map(function (it) { return ({\n entry: it,\n left: -1,\n right: -1,\n child: -1,\n firstSector: 0,\n isMini: it.length < 4096,\n isRed: false,\n }); });\n this.buildTree(0);\n var entriesFirstSector = this.fat.allocate(RoundUpto512(128 * this.liteEnts.length) / 512);\n for (var _i = 0, _a = this.liteEnts\n .filter(function (it) { return true\n && it.entry.type == Reader_1.TypeEnum.DOCUMENT\n && it.isMini === false; }); _i < _a.length; _i++) {\n var liteEnt = _a[_i];\n liteEnt.firstSector = (liteEnt.entry.length === 0)\n ? -2\n : this.fat.allocate(RoundUpto512(liteEnt.entry.length) / 512);\n }\n for (var _b = 0, _c = this.liteEnts\n .filter(function (it) { return true\n && it.entry.type == Reader_1.TypeEnum.DOCUMENT\n && it.isMini === true; }); _b < _c.length; _b++) {\n var liteEnt = _c[_b];\n liteEnt.firstSector = (liteEnt.entry.length === 0)\n ? -2\n : this.miniFat.allocate(RoundUpto64(liteEnt.entry.length) / 64);\n }\n var numMiniFatSectors = RoundUpto512(4 * this.miniFat.count()) / 512;\n var firstMiniFatSector = (numMiniFatSectors !== 0)\n ? this.fat.allocate(numMiniFatSectors)\n : -2;\n var bytesMiniFat = 64 * this.miniFat.count();\n var firstMiniDataSector = this.fat.allocate(RoundUpto512(bytesMiniFat) / 512);\n this.liteEnts[0].firstSector = firstMiniDataSector;\n var firstFatSector = this.fat.allocateAs(RoundUpto512(4 * (this.fat.count() + this.fat.count() / 128 + this.fat.count() / (128 * 109))) / 512, -3);\n var numFatSectors = this.fat.count() - firstFatSector;\n var numDifatSectors = (numFatSectors > 109)\n ? RoundUpto512(4 * Math.floor((numFatSectors - 109) / 127 * 128)) / 512\n : 0;\n var firstDifatSector = (numDifatSectors !== 0)\n ? this.fat.allocateAs(numDifatSectors, -4)\n : -2;\n var array = new ArrayBuffer(512 * (1 + this.fat.count()));\n var ds = new DataStream_1.default(array, 0, DataStream_1.default.LITTLE_ENDIAN);\n ds.dynamicSize = false;\n this.miniFat.finalize(512 / 4, -1);\n var difat1 = [];\n var difat2 = [];\n {\n var x = 0;\n for (; x < 109 && x < numFatSectors; x++) {\n difat1.push(firstFatSector + x);\n }\n var nextDifatSector = firstDifatSector + 1;\n for (; x < numFatSectors; x++) {\n difat2.push(firstFatSector + x);\n var remain = (difat2.length & 127);\n if (remain === 127) {\n difat2.push(nextDifatSector);\n nextDifatSector++;\n }\n }\n while (true) {\n var remain = (difat2.length & 127);\n if (remain === 0) {\n break;\n }\n difat2.push((remain === 127) ? -2 : -1);\n }\n }\n // header\n {\n ds.seek(0);\n ds.writeUint8Array(const_1.default.FILE_HEADER);\n ds.seek(0x18);\n ds.writeUint16(0x3E); //ushort MinorVersion\n ds.writeUint16(0x03); //ushort MajorVersion\n ds.writeUint16(0xFFFE); //ushort ByteOrder\n ds.writeUint16(9); //ushort SectorShift\n ds.writeUint16(6); //ushort MiniSectorShift\n ds.seek(0x2C);\n ds.writeInt32(numFatSectors); //int32 NumberOfFATSectors\n ds.writeInt32(entriesFirstSector); //int32 FirstDirectorySectorLocation\n ds.seek(0x38);\n ds.writeInt32(4096); //int32 MiniStreamCutoffSize\n ds.writeInt32(firstMiniFatSector); //int32 FirstMiniFATSectorLocation\n ds.writeInt32(numMiniFatSectors); //int32 NumberOfMiniFATSectors\n ds.writeInt32(firstDifatSector); //int32 FirstDIFATSectorLocation\n ds.writeInt32(numDifatSectors); //int32 NumberOfDIFATSectors\n var x = 0;\n for (; x < difat1.length; x++) {\n ds.writeInt32(difat1[x]); //int32 DIFAT[x]\n }\n for (; x < 109; x++) {\n ds.writeInt32(-1); //int32 DIFAT[x]\n }\n }\n // entries\n for (var x = 0; x < this.liteEnts.length; x++) {\n var liteEnt = this.liteEnts[x];\n var pos = 512 * (1 + entriesFirstSector) + 128 * x;\n ds.seek(pos);\n ds.writeUCS2String(liteEnt.entry.name, null, null);\n var numBytesName = ds.position - pos;\n ds.seek(pos + 0x40);\n ds.writeUint16(Math.min(64, numBytesName + 2));\n ds.writeUint8(liteEnt.entry.type);\n ds.writeUint8(liteEnt.isRed ? 0 : 1);\n ds.writeInt32(liteEnt.left);\n ds.writeInt32(liteEnt.right);\n ds.writeInt32(liteEnt.child);\n if (x === 0) {\n ds.seek(pos + 0x50);\n ds.writeUint8Array([0x0B, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]);\n }\n var length_1 = (x === 0)\n ? bytesMiniFat\n : liteEnt.entry.length;\n var firstSector = (length_1 !== 0)\n ? liteEnt.firstSector\n : (liteEnt.entry.type === Reader_1.TypeEnum.DIRECTORY ? 0 : -2);\n ds.seek(pos + 0x74);\n ds.writeInt32(firstSector);\n ds.writeInt32(length_1);\n }\n for (var _d = 0, _e = this.liteEnts\n .filter(function (it) { return true\n && it.entry.type == Reader_1.TypeEnum.DOCUMENT\n && it.isMini === false; }); _d < _e.length; _d++) {\n var liteEnt = _e[_d];\n var bytes = liteEnt.entry.binaryProvider();\n ds.seek(512 * (1 + liteEnt.firstSector));\n ds.writeUint8Array(bytes);\n }\n for (var _f = 0, _g = this.liteEnts\n .filter(function (it) { return true\n && it.entry.type == Reader_1.TypeEnum.DOCUMENT\n && it.isMini === true; }); _f < _g.length; _f++) {\n var liteEnt = _g[_f];\n var bytes = liteEnt.entry.binaryProvider();\n ds.seek(512 * (1 + firstMiniDataSector) + 64 * liteEnt.firstSector);\n ds.writeUint8Array(bytes);\n }\n // minifat\n ds.seek(512 * (1 + firstMiniFatSector));\n ds.writeInt32Array(this.miniFat.sectors);\n // fat\n this.fat.finalize(512 / 4, -1);\n ds.seek(512 * (1 + firstFatSector));\n ds.writeInt32Array(this.fat.sectors);\n // difat\n if (numDifatSectors >= 1) {\n ds.seek(512 * (1 + firstDifatSector));\n ds.writeInt32Array(difat2);\n }\n this.array = array;\n }\n /**\n * CFBF dedicated name comparer\n *\n * - At first compare UTF-16 length.\n * - Then compare upper cased UTF-16 string.\n */\n LiteBurner.prototype.compareName = function (a, b) {\n var t = a.length - b.length;\n if (t === 0) {\n var x = a.toUpperCase();\n var y = b.toUpperCase();\n if (x > y) {\n t = 1;\n }\n else if (x < y) {\n t = -1;\n }\n }\n return t;\n };\n /**\n * Build the directory tree.\n *\n * @param dirIndex The index of the directory entry to be built.\n */\n LiteBurner.prototype.buildTree = function (dirIndex) {\n var _this = this;\n var liteEnts = this.liteEnts;\n var liteEntry = liteEnts[dirIndex];\n if (liteEntry.entry.type === Reader_1.TypeEnum.DOCUMENT) {\n throw new Error(\"It must be a storage!\");\n }\n // Array.sort is destructive, so copy it by concat() before changing\n var children = liteEntry.entry.children.concat();\n if (1 <= children.length) {\n children.sort(function (a, b) {\n return _this.compareName(liteEnts[a].entry.name, liteEnts[b].entry.name);\n });\n // ( | 0 )\n // ( 0 | 1 )\n // ( 0 | 1 2 )\n // (left, right), returns first right node\n var split2_1 = function (start, end, isRed) {\n if (start < end) {\n var midNum = Math.floor((start + end) / 2);\n var entryIndex = children[midNum];\n var entry = liteEnts[entryIndex];\n entry.isRed = isRed;\n entry.left = split2_1(start, midNum, !isRed);\n entry.right = split2_1(midNum + 1, end, !isRed);\n return entryIndex;\n }\n else {\n return -1;\n }\n };\n // ( | 0 | )\n // ( | 0 | 1 )\n // ( 0 | 1 | 2 )\n // ( 0 | 1 | 2 3 )\n // ( 0 1 | 2 | 3 4 )\n // (left, root, right), returns root node\n var split3 = function () {\n var midNum = Math.floor(children.length / 2);\n var entryIndex = children[midNum];\n var entry = liteEnts[entryIndex];\n entry.isRed = false;\n entry.left = split2_1(0, midNum, true);\n entry.right = split2_1(midNum + 1, children.length, true);\n return entryIndex;\n };\n liteEntry.child = split3();\n for (var _i = 0, _a = children\n .filter(function (it) { return liteEnts[it].entry.type === Reader_1.TypeEnum.DIRECTORY; }); _i < _a.length; _i++) {\n var subIndex = _a[_i];\n this.buildTree(subIndex);\n }\n }\n };\n return LiteBurner;\n}());\n/**\n * Burn CFBF file on the fly.\n *\n * CFBF = Compound File Binary Format\n *\n * @param entries The flattened (not tree) entries starting with `Root Entry`.\n * @returns The binary.\n */\nfunction burn(entries) {\n return new Uint8Array(new LiteBurner(entries).array);\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parse = parse;\nvar DataStream_1 = __importDefault(require(\"./DataStream\"));\n/**\n * @internal\n */\nfunction parse(array) {\n var ds = new DataStream_1.default(array, 0, DataStream_1.default.LITTLE_ENDIAN);\n var ret = [];\n while (!ds.isEof()) {\n var key = ds.readUint32();\n var low = ds.readUint16();\n var hi = ds.readUint16();\n ret.push({\n key: key,\n isStringProperty: (low & 1) != 0,\n guidIndex: (low >> 1) & 32767,\n propertyIndex: hi,\n });\n }\n return ret;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parse = parse;\n/**\n * @internal\n */\nfunction parse(ds) {\n // 2.2.1.74.1 VoteOption Structure\n // https://docs.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-oxomsg/87488eff-3eec-4502-bc94-2368c04e3109\n var items = [];\n var count = 0;\n while (!ds.isEof()) {\n var version = ds.readUint16();\n if (version === 258) {\n count = ds.readUint16();\n var dummy1 = ds.readUint16();\n for (var index = 0; index < count; index += 1) {\n var VerbType = ds.readInt32();\n var DisplayNameCount = ds.readUint8();\n var DisplayName = ds.readString(DisplayNameCount);\n var MsgClsNameCount = ds.readUint8();\n var MsgClsName = ds.readString(MsgClsNameCount);\n var Internal1StringCount = ds.readUint8();\n var Internal1String = ds.readString(Internal1StringCount);\n var DisplayNameCountRepeat = ds.readUint8();\n var DisplayNameRepeat = ds.readString(DisplayNameCountRepeat);\n var Internal2 = ds.readInt32();\n var Internal3 = ds.readUint8();\n var fUseUSHeaders = ds.readInt32();\n var Internal4 = ds.readInt32();\n var SendBehavior = ds.readInt32();\n var Internal5 = ds.readInt32();\n var ID = ds.readInt32();\n var Internal6 = ds.readInt32();\n items.push({ VerbType: VerbType, DisplayName: DisplayName });\n }\n }\n else if (version === 260) {\n for (var index = 0; index < count; index += 1) {\n var DisplayNameCount = ds.readUint8();\n var DisplayName = ds.readUCS2String(DisplayNameCount);\n var DisplayNameCountRepeat = ds.readUint8();\n var DisplayNameRepeat = ds.readUCS2String(DisplayNameCountRepeat);\n items[index].DisplayName = DisplayName;\n }\n }\n }\n return items\n .filter(function (it) { return it.VerbType === 4; })\n .map(function (it) { return it.DisplayName; })\n .join(\";\");\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parse = parse;\nvar utils_1 = require(\"./utils\");\nvar TZDEFINITION_FLAG_VALID_GUID = 1;\nvar TZDEFINITION_FLAG_VALID_KEYNAME = 2;\nvar TZRULE_FLAG_EFFECTIVE_TZREG = 2;\nvar TZRULE_FLAG_RECUR_CURRENT_TZREG = 1;\n/**\n * @internal\n */\nfunction parse(ds) {\n // About persisting TZDEFINITION to a stream to commit to a binary property\n // https://learn.microsoft.com/en-us/office/client-developer/outlook/auxiliary/about-persisting-tzdefinition-to-a-stream-to-commit-to-a-binary-property?redirectedfrom=MSDN\n var tz = { rules: [] };\n if (!ds.isEof()) {\n var bMajorVersion = ds.readUint8();\n if (bMajorVersion !== 2) {\n throw new Error(\"TZDEFINITION major version not supported\");\n }\n var bMinorVersion = ds.readUint8();\n if (bMajorVersion < 1) {\n throw new Error(\"TZDEFINITION minor version not supported\");\n }\n var cbHeader = ds.readUint16();\n var wFlags = ds.readUint16();\n if (wFlags & TZDEFINITION_FLAG_VALID_GUID) {\n ds.readInt32();\n ds.readInt32();\n ds.readInt32();\n ds.readInt32();\n }\n if (wFlags & TZDEFINITION_FLAG_VALID_KEYNAME) {\n var cchKeyName = ds.readUint16();\n tz.keyName = ds.readUCS2String(cchKeyName);\n }\n var cRules = ds.readUint16();\n ds.seek(4 + cbHeader);\n for (var x = 0; x < cRules; x++) {\n var bMajorVersion_1 = ds.readUint8();\n if (bMajorVersion_1 !== 2) {\n break;\n }\n var bMinorVersion_1 = ds.readUint8();\n if (bMajorVersion_1 < 1) {\n break;\n }\n var cbRule = ds.readUint16();\n var basePos = ds.position;\n var wFlags_1 = ds.readUint16();\n var stStart = (0, utils_1.readSystemTime)(ds);\n var lBias = ds.readInt32();\n var lStandardBias = ds.readInt32();\n var lDaylightBias = ds.readInt32();\n var stStandardDate = (0, utils_1.readTransitionSystemTime)(ds);\n var stDaylightDate = (0, utils_1.readTransitionSystemTime)(ds);\n var rule = Object.assign({}, {\n flags: wFlags_1,\n start: (stStart === null || stStart === void 0 ? void 0 : stStart.toUTCString()) || null,\n bias: lBias,\n standardBias: lStandardBias,\n daylightBias: lDaylightBias,\n standardDate: stStandardDate,\n daylightDate: stDaylightDate,\n });\n tz.rules.push(rule);\n ds.seek(basePos + cbRule);\n }\n }\n return tz;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parse = parse;\nvar utils_1 = require(\"./utils\");\n/**\n * @internal\n */\nfunction parse(ds) {\n // PidLidTimeZoneStruct Canonical Property\n // https://learn.microsoft.com/en-us/office/client-developer/outlook/mapi/pidlidtimezonestruct-canonical-property\n if (!ds.isEof()) {\n var lBias = ds.readInt32();\n var lStandardBias = ds.readInt32();\n var lDaylightBias = ds.readInt32();\n var wStandardYear = ds.readUint16();\n var stStandardDate = (0, utils_1.readTransitionSystemTime)(ds);\n var wDaylightYear = ds.readUint16();\n var stDaylightDate = (0, utils_1.readTransitionSystemTime)(ds);\n return Object.assign({}, {\n bias: lBias,\n standardBias: lStandardBias,\n daylightBias: lDaylightBias,\n standardYear: wStandardYear,\n standardDate: stStandardDate,\n daylightYear: wDaylightYear,\n daylightDate: stDaylightDate,\n });\n }\n return null;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OverrideFlags = exports.EndType = exports.CalendarType = exports.PatternType = exports.RecurFrequency = void 0;\nexports.parse = parse;\n/**\n * RecurFrequency\n *\n * @see [[MS-OXOCAL]: RecurrencePattern Structure | Microsoft Learn](https://learn.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-oxocal/cf7153b4-f8b5-4cb6-bf14-e78d21f94814)\n */\nvar RecurFrequency;\n(function (RecurFrequency) {\n RecurFrequency[RecurFrequency[\"Daily\"] = 8202] = \"Daily\";\n RecurFrequency[RecurFrequency[\"Weekly\"] = 8203] = \"Weekly\";\n RecurFrequency[RecurFrequency[\"Monthly\"] = 8204] = \"Monthly\";\n RecurFrequency[RecurFrequency[\"Yearly\"] = 8205] = \"Yearly\";\n})(RecurFrequency || (exports.RecurFrequency = RecurFrequency = {}));\n/**\n * PatternType\n *\n * @see [[MS-OXOCAL]: RecurrencePattern Structure | Microsoft Learn](https://learn.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-oxocal/cf7153b4-f8b5-4cb6-bf14-e78d21f94814)\n */\nvar PatternType;\n(function (PatternType) {\n /**\n * The event has a daily recurrence.\n */\n PatternType[PatternType[\"Day\"] = 0] = \"Day\";\n /**\n * The event has a weekly recurrence.\n */\n PatternType[PatternType[\"Week\"] = 1] = \"Week\";\n /**\n * The event has a monthly recurrence.\n */\n PatternType[PatternType[\"Month\"] = 2] = \"Month\";\n /**\n * The event has a month-end recurrence.\n */\n PatternType[PatternType[\"MonthEnd\"] = 4] = \"MonthEnd\";\n /**\n * The event has an every nth month pattern.\n */\n PatternType[PatternType[\"MonthNth\"] = 3] = \"MonthNth\";\n /**\n * The event has a monthly recurrence in the Hijri calendar.\n * For this value in the PatternType field, the value of the CalendarType field SHOULD be set to 0x0000.\n */\n PatternType[PatternType[\"HjMonth\"] = 10] = \"HjMonth\";\n /**\n * The event has an every nth month pattern in the Hijri calendar.\n * For this value in the PatternType field, the value of the CalendarType field MUST be set to 0x0000.\n */\n PatternType[PatternType[\"HjMonthNth\"] = 11] = \"HjMonthNth\";\n /**\n * The event has a month end recurrence in the Hijri calendar.\n * For this value in the PatternType field, the value of the CalendarType field MUST be set to 0x0000.\n */\n PatternType[PatternType[\"HjMonthEnd\"] = 12] = \"HjMonthEnd\";\n})(PatternType || (exports.PatternType = PatternType = {}));\nvar CalendarType;\n(function (CalendarType) {\n /**\n * The default value for the calendar type is Gregorian.\n */\n CalendarType[CalendarType[\"Default\"] = 0] = \"Default\";\n /**\n * Gregorian (localized) calendar\n */\n CalendarType[CalendarType[\"CAL_GREGORIAN\"] = 1] = \"CAL_GREGORIAN\";\n /**\n * Gregorian (U.S.) calendar\n */\n CalendarType[CalendarType[\"CAL_GREGORIAN_US\"] = 2] = \"CAL_GREGORIAN_US\";\n /**\n * Japanese Emperor era calendar\n */\n CalendarType[CalendarType[\"CAL_JAPAN\"] = 3] = \"CAL_JAPAN\";\n /**\n * Taiwan calendar\n */\n CalendarType[CalendarType[\"CAL_TAIWAN\"] = 4] = \"CAL_TAIWAN\";\n /**\n * Korean Tangun era calendar\n */\n CalendarType[CalendarType[\"CAL_KOREA\"] = 5] = \"CAL_KOREA\";\n /**\n * Hijri (Arabic Lunar) calendar\n */\n CalendarType[CalendarType[\"CAL_HIJRI\"] = 6] = \"CAL_HIJRI\";\n /**\n * Thai calendar\n */\n CalendarType[CalendarType[\"CAL_THAI\"] = 7] = \"CAL_THAI\";\n /**\n * Hebrew lunar calendar\n */\n CalendarType[CalendarType[\"CAL_HEBREW\"] = 8] = \"CAL_HEBREW\";\n /**\n * Gregorian Middle East French calendar\n */\n CalendarType[CalendarType[\"CAL_GREGORIAN_ME_FRENCH\"] = 9] = \"CAL_GREGORIAN_ME_FRENCH\";\n /**\n * Gregorian Arabic calendar\n */\n CalendarType[CalendarType[\"CAL_GREGORIAN_ARABIC\"] = 10] = \"CAL_GREGORIAN_ARABIC\";\n /**\n * Gregorian transliterated English calendar\n */\n CalendarType[CalendarType[\"CAL_GREGORIAN_XLIT_ENGLISH\"] = 11] = \"CAL_GREGORIAN_XLIT_ENGLISH\";\n /**\n * Gregorian transliterated French calendar\n */\n CalendarType[CalendarType[\"CAL_GREGORIAN_XLIT_FRENCH\"] = 12] = \"CAL_GREGORIAN_XLIT_FRENCH\";\n /**\n * Japanese lunar calendar\n */\n CalendarType[CalendarType[\"CAL_LUNAR_JAPANESE\"] = 14] = \"CAL_LUNAR_JAPANESE\";\n /**\n * Chinese lunar calendar\n */\n CalendarType[CalendarType[\"CAL_CHINESE_LUNAR\"] = 15] = \"CAL_CHINESE_LUNAR\";\n /**\n * Saka era calendar\n */\n CalendarType[CalendarType[\"CAL_SAKA\"] = 16] = \"CAL_SAKA\";\n /**\n * Lunar ETO Chinese calendar\n */\n CalendarType[CalendarType[\"CAL_LUNAR_ETO_CHN\"] = 17] = \"CAL_LUNAR_ETO_CHN\";\n /**\n * Lunar ETO Korean calendar\n */\n CalendarType[CalendarType[\"CAL_LUNAR_ETO_KOR\"] = 18] = \"CAL_LUNAR_ETO_KOR\";\n /**\n * Lunar Rokuyou calendar\n */\n CalendarType[CalendarType[\"CAL_LUNAR_ROKUYOU\"] = 19] = \"CAL_LUNAR_ROKUYOU\";\n /**\n * Korean lunar calendar\n */\n CalendarType[CalendarType[\"CAL_LUNAR_KOREAN\"] = 20] = \"CAL_LUNAR_KOREAN\";\n /**\n * Um Al Qura calendar\n */\n CalendarType[CalendarType[\"CAL_UMALQURA\"] = 23] = \"CAL_UMALQURA\";\n})(CalendarType || (exports.CalendarType = CalendarType = {}));\nvar EndType;\n(function (EndType) {\n EndType[EndType[\"EndAfterDate\"] = 8225] = \"EndAfterDate\";\n EndType[EndType[\"EndAfterNOccurrences\"] = 8226] = \"EndAfterNOccurrences\";\n EndType[EndType[\"NeverEnd\"] = 8227] = \"NeverEnd\";\n EndType[EndType[\"NeverEnd2\"] = 4294967295] = \"NeverEnd2\";\n})(EndType || (exports.EndType = EndType = {}));\n/**\n * OverrideFlags\n *\n * @see [[MS-OXOCAL]: ExceptionInfo Structure | Microsoft Learn](https://learn.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-oxocal/0980d033-3bf1-43e9-a1e6-af51c564e24a)\n */\nvar OverrideFlags;\n(function (OverrideFlags) {\n /**\n * Indicates that the Subject, SubjectLength, and SubjectLength2 fields are present.\n */\n OverrideFlags[OverrideFlags[\"ARO_SUBJECT\"] = 1] = \"ARO_SUBJECT\";\n /**\n * Indicates that the MeetingType field is present.\n */\n OverrideFlags[OverrideFlags[\"ARO_MEETINGTYPE\"] = 2] = \"ARO_MEETINGTYPE\";\n /**\n * Indicates that the ReminderDelta field is present.\n */\n OverrideFlags[OverrideFlags[\"ARO_REMINDERDELTA\"] = 4] = \"ARO_REMINDERDELTA\";\n /**\n * Indicates that the ReminderSet field is present.\n */\n OverrideFlags[OverrideFlags[\"ARO_REMINDER\"] = 8] = \"ARO_REMINDER\";\n /**\n * Indicates that the Location, LocationLength, and LocationLength2 fields are present.\n */\n OverrideFlags[OverrideFlags[\"ARO_LOCATION\"] = 16] = \"ARO_LOCATION\";\n /**\n * Indicates that the BusyStatus field is present.\n */\n OverrideFlags[OverrideFlags[\"ARO_BUSYSTATUS\"] = 32] = \"ARO_BUSYSTATUS\";\n /**\n * Indicates that the attachment field is present.\n */\n OverrideFlags[OverrideFlags[\"ARO_ATTACHMENT\"] = 64] = \"ARO_ATTACHMENT\";\n /**\n * Indicates that the SubType field is present.\n */\n OverrideFlags[OverrideFlags[\"ARO_SUBTYPE\"] = 128] = \"ARO_SUBTYPE\";\n /**\n * Indicates that the AppointmentColor field is present.\n */\n OverrideFlags[OverrideFlags[\"ARO_APPTCOLOR\"] = 256] = \"ARO_APPTCOLOR\";\n /**\n * Indicates that the Exception Embedded Message object has the PidTagRtfCompressed property\n * ([MS-OXCMSG] section 2.2.1.56.4) set on it.\n */\n OverrideFlags[OverrideFlags[\"ARO_EXCEPTIONAL_BODY\"] = 512] = \"ARO_EXCEPTIONAL_BODY\";\n})(OverrideFlags || (exports.OverrideFlags = OverrideFlags = {}));\n;\nfunction parseRecurrencePattern(ds) {\n var ReaderVersion = ds.readUint16();\n if (ReaderVersion !== 0x3004) {\n throw new Error(\"ReaderVersion not supported\");\n }\n var WriterVersion = ds.readUint16();\n if (WriterVersion !== 0x3004) {\n throw new Error(\"WriterVersion not supported\");\n }\n var recurFrequency = ds.readUint16();\n var patternType = ds.readUint16();\n var calendarType = ds.readUint16();\n var firstDateTime = ds.readUint32();\n var period = ds.readUint32();\n var slidingFlag = ds.readUint32();\n var patternTypeWeek = undefined;\n var patternTypeMonth = undefined;\n var patternTypeMonthNth = undefined;\n if (false) { }\n else if (false\n || patternType === PatternType.Week) {\n patternTypeWeek = {\n dayOfWeekBits: ds.readUint32(),\n };\n }\n else if (false\n || patternType === PatternType.Month\n || patternType === PatternType.MonthEnd\n || patternType === PatternType.HjMonth\n || patternType === PatternType.HjMonthEnd) {\n patternTypeMonth = {\n day: ds.readUint32(),\n };\n }\n else if (false\n || patternType === PatternType.MonthNth\n || patternType === PatternType.HjMonthNth) {\n patternTypeMonthNth = {\n dayOfWeekBits: ds.readUint32(),\n n: ds.readUint32(),\n };\n }\n var endType = ds.readUint32();\n var occurrenceCount = ds.readUint32();\n var firstDOW = ds.readUint32();\n var deletedInstanceCount = ds.readUint32();\n var deletedInstanceDates = Array.from(ds.readUint32Array(deletedInstanceCount));\n var modifiedInstanceCount = ds.readUint32();\n var modifiedInstanceDates = Array.from(ds.readUint32Array(modifiedInstanceCount));\n var startDate = ds.readUint32();\n var endDate = ds.readUint32();\n return Object.assign({\n recurFrequency: recurFrequency,\n patternType: patternType,\n calendarType: calendarType,\n firstDateTime: firstDateTime,\n period: period,\n slidingFlag: slidingFlag,\n endType: endType,\n occurrenceCount: occurrenceCount,\n firstDOW: firstDOW,\n deletedInstanceDates: deletedInstanceDates,\n modifiedInstanceDates: modifiedInstanceDates,\n startDate: startDate,\n endDate: endDate,\n }, patternTypeWeek ? { patternTypeWeek: patternTypeWeek } : {}, patternTypeMonth ? { patternTypeMonth: patternTypeMonth } : {}, patternTypeMonthNth ? { patternTypeMonthNth: patternTypeMonthNth } : {});\n}\n/**\n * @internal\n */\nfunction parse(ds, ansiEncoding) {\n var recurrencePattern = parseRecurrencePattern(ds);\n var readerVersion2 = ds.readUint32();\n if (readerVersion2 !== 0x3006) {\n throw new Error(\"ReaderVersion2 not supported\");\n }\n var writerVersion2 = ds.readUint32();\n if (writerVersion2 < 0x3006) {\n throw new Error(\"WriterVersion2 not supported\");\n }\n var startTimeOffset = ds.readUint32();\n var endTimeOffset = ds.readUint32();\n var exceptionCount = ds.readUint16();\n var exceptionInfo = [];\n for (var x = 0; x < exceptionCount; x++) {\n var startDateTime = ds.readUint32();\n var endDateTime = ds.readUint32();\n var originalStartTime = ds.readUint32();\n var overrideFlags = ds.readUint16();\n var subject = undefined;\n if (overrideFlags & OverrideFlags.ARO_SUBJECT) {\n var subjectLength = ds.readUint16();\n var subjectLength2 = ds.readUint16();\n if (subjectLength - 1 !== subjectLength2) {\n throw new Error(\"subjectLength \".concat(subjectLength, \" and subjectLength2 \").concat(subjectLength2, \" are not close!\"));\n }\n subject = ds.readString(subjectLength2, ansiEncoding);\n }\n var meetingType = undefined;\n if (overrideFlags & OverrideFlags.ARO_MEETINGTYPE) {\n meetingType = ds.readUint32();\n }\n var reminderDelta = undefined;\n if (overrideFlags & OverrideFlags.ARO_REMINDERDELTA) {\n reminderDelta = ds.readUint32();\n }\n var reminderSet = undefined;\n if (overrideFlags & OverrideFlags.ARO_REMINDER) {\n reminderSet = ds.readUint32();\n }\n var location_1 = undefined;\n if (overrideFlags & OverrideFlags.ARO_LOCATION) {\n var locationLength = ds.readUint16();\n var locationLength2 = ds.readUint16();\n if (locationLength - 1 !== locationLength2) {\n throw new Error(\"locationLength \".concat(locationLength, \" and locationLength2 \").concat(locationLength2, \" are not close!\"));\n }\n location_1 = ds.readString(locationLength2, ansiEncoding);\n }\n var busyStatus = undefined;\n if (overrideFlags & OverrideFlags.ARO_BUSYSTATUS) {\n busyStatus = ds.readUint32();\n }\n var attachment = undefined;\n if (overrideFlags & OverrideFlags.ARO_ATTACHMENT) {\n attachment = ds.readUint32();\n }\n var subType = undefined;\n if (overrideFlags & OverrideFlags.ARO_SUBTYPE) {\n subType = ds.readUint32();\n }\n var appointmentColor = undefined;\n if (overrideFlags & OverrideFlags.ARO_APPTCOLOR) {\n appointmentColor = ds.readUint32();\n }\n exceptionInfo.push(Object.assign({\n startDateTime: startDateTime,\n endDateTime: endDateTime,\n originalStartTime: originalStartTime,\n overrideFlags: overrideFlags,\n }, subject ? { subject: subject } : {}, meetingType ? { meetingType: meetingType } : {}, reminderDelta ? { reminderDelta: reminderDelta } : {}, reminderSet ? { reminderSet: reminderSet } : {}, location_1 ? { location: location_1 } : {}, busyStatus ? { busyStatus: busyStatus } : {}, attachment ? { attachment: attachment } : {}, subType ? { subType: subType } : {}, appointmentColor ? { appointmentColor: appointmentColor } : {}));\n }\n var reservedBlock1Size = ds.readUint32();\n if (reservedBlock1Size !== 0) {\n throw new Error(\"reservedBlock1Size \".concat(reservedBlock1Size, \" is not zero, AppointmentRecur is broken\"));\n }\n for (var x = 0; x < exceptionCount; x++) {\n var one = exceptionInfo[x];\n if (0x00003009 <= writerVersion2) {\n var changeHighlightSize = ds.readUint32();\n one.changeHighlight = ds.readUint32();\n ds.position += changeHighlightSize - 4;\n }\n var reservedBlockEE1Size = ds.readUint32();\n if (reservedBlockEE1Size !== 0) {\n throw new Error(\"reservedBlockEE1Size \".concat(reservedBlockEE1Size, \" is not zero, AppointmentRecur is broken\"));\n }\n if (one.overrideFlags & (OverrideFlags.ARO_SUBJECT | OverrideFlags.ARO_LOCATION)) {\n var startDateTime = ds.readUint32();\n var endDateTime = ds.readUint32();\n var originalStartDate = ds.readUint32();\n if (one.overrideFlags & (OverrideFlags.ARO_SUBJECT)) {\n var wideCharSubjectLength = ds.readUint16();\n one.subject = ds.readUCS2String(wideCharSubjectLength);\n }\n if (one.overrideFlags & (OverrideFlags.ARO_LOCATION)) {\n var wideCharLocationLength = ds.readUint16();\n one.location = ds.readUCS2String(wideCharLocationLength);\n }\n var reservedBlockEE2Size = ds.readUint32();\n if (reservedBlockEE2Size !== 0) {\n throw new Error(\"reservedBlockEE2Size \".concat(reservedBlockEE2Size, \" is not zero, AppointmentRecur is broken\"));\n }\n }\n }\n var reservedBlock2Size = ds.readUint32();\n if (reservedBlock2Size !== 0) {\n throw new Error(\"reservedBlock2Size \".concat(reservedBlock2Size, \" is not zero, AppointmentRecur is broken\"));\n }\n return {\n recurrencePattern: recurrencePattern,\n startTimeOffset: startTimeOffset,\n endTimeOffset: endTimeOffset,\n exceptionInfo: exceptionInfo,\n };\n}\n","\"use strict\";\n/* Copyright 2016 Yury Karpovich\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*\n MSG Reader\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OverrideFlags = exports.EndType = exports.CalendarType = exports.PatternType = exports.RecurFrequency = void 0;\nvar const_1 = __importDefault(require(\"./const\"));\nvar DataStream_1 = __importDefault(require(\"./DataStream\"));\nvar Reader_1 = require(\"./Reader\");\nvar Burner_1 = require(\"./Burner\");\nvar utils_1 = require(\"./utils\");\nvar EntryStreamParser_1 = require(\"./EntryStreamParser\");\nvar VerbStreamParser_1 = require(\"./VerbStreamParser\");\nvar TZDEFINITIONParser_1 = require(\"./TZDEFINITIONParser\");\nvar TZREGParser_1 = require(\"./TZREGParser\");\nvar AppointmentRecurParser_1 = require(\"./AppointmentRecurParser\");\nvar AppointmentRecurParser_2 = require(\"./AppointmentRecurParser\");\nObject.defineProperty(exports, \"RecurFrequency\", { enumerable: true, get: function () { return AppointmentRecurParser_2.RecurFrequency; } });\nObject.defineProperty(exports, \"PatternType\", { enumerable: true, get: function () { return AppointmentRecurParser_2.PatternType; } });\nObject.defineProperty(exports, \"CalendarType\", { enumerable: true, get: function () { return AppointmentRecurParser_2.CalendarType; } });\nObject.defineProperty(exports, \"EndType\", { enumerable: true, get: function () { return AppointmentRecurParser_2.EndType; } });\nObject.defineProperty(exports, \"OverrideFlags\", { enumerable: true, get: function () { return AppointmentRecurParser_2.OverrideFlags; } });\n/**\n * CONST.MSG.PROP.TYPE_ENUM\n */\nvar TypeEnum;\n(function (TypeEnum) {\n TypeEnum[TypeEnum[\"DIRECTORY\"] = 1] = \"DIRECTORY\";\n TypeEnum[TypeEnum[\"DOCUMENT\"] = 2] = \"DOCUMENT\";\n TypeEnum[TypeEnum[\"ROOT\"] = 5] = \"ROOT\";\n})(TypeEnum || (TypeEnum = {}));\nvar KeyType;\n(function (KeyType) {\n KeyType[KeyType[\"root\"] = 0] = \"root\";\n KeyType[KeyType[\"toSub\"] = 1] = \"toSub\";\n KeyType[KeyType[\"named\"] = 2] = \"named\";\n})(KeyType || (KeyType = {}));\nfunction fileTimeToUnixEpoch(time) {\n return (time - 116444736000000000) / 10000;\n}\nfunction removeTrailingNull(text) {\n var index = text.indexOf(\"\\0\");\n if (index !== -1) {\n return text.substring(0, index);\n }\n return text;\n}\n/**\n * The core implementation of MsgReader\n */\nvar MsgReader = /** @class */ (function () {\n function MsgReader(arrayBuffer) {\n this.reader = new Reader_1.Reader(arrayBuffer);\n }\n MsgReader.prototype.decodeField = function (fieldClass, fieldType, provider, ansiEncoding, insideProps) {\n var array = provider();\n var ds = new DataStream_1.default(array, 0, DataStream_1.default.LITTLE_ENDIAN);\n var key = const_1.default.MSG.FIELD.FULL_NAME_MAPPING[\"\".concat(fieldClass).concat(fieldType)]\n || const_1.default.MSG.FIELD.NAME_MAPPING[fieldClass];\n var keyType = KeyType.root;\n var propertySet = undefined;\n var propertyLid = undefined;\n var classValue = parseInt(\"0x\".concat(fieldClass));\n if (classValue >= 0x8000) {\n var keyed = this.privatePidToKeyed[classValue];\n if (keyed) {\n if (keyed.useName) {\n key = keyed.name;\n keyType = KeyType.named;\n }\n else {\n propertySet = keyed.propertySet;\n propertyLid = (0, utils_1.toHex4)(keyed.propertyLid);\n var lidDict = const_1.default.MSG.FIELD.PIDLID_MAPPING[keyed.propertySet];\n if (lidDict !== undefined) {\n var prop = lidDict[keyed.propertyLid];\n if (prop !== undefined) {\n if (prop.dispid !== undefined) {\n key = prop.dispid; // e.g. `votingResponse`\n keyType = KeyType.root;\n }\n else {\n key = prop.id; // e.g. `PidLidVerbStream` listed in SomeParsedOxProps\n keyType = KeyType.toSub;\n }\n }\n }\n }\n }\n }\n var value = array;\n var skip = false;\n var decodeAs = const_1.default.MSG.FIELD.TYPE_MAPPING[fieldType];\n if (0) { }\n else if (decodeAs === \"string\") {\n value = removeTrailingNull(ds.readString(array.length, ansiEncoding));\n skip = insideProps;\n }\n else if (decodeAs === \"unicode\") {\n value = removeTrailingNull(ds.readUCS2String(array.length / 2));\n skip = insideProps;\n }\n else if (decodeAs === \"binary\") {\n skip = insideProps;\n }\n else if (decodeAs === \"integer\") {\n value = ds.readUint32();\n }\n else if (decodeAs === \"boolean\") {\n value = ds.readUint16() ? true : false;\n }\n else if (decodeAs === \"time\") {\n var lo = ds.readUint32();\n var fileTime = lo + (4294967296.0 * ds.readUint32());\n value = new Date(fileTimeToUnixEpoch(fileTime)).toUTCString();\n }\n if (skip) {\n key = undefined;\n }\n if (0) { }\n else if (key === \"PidLidVerbStream\") {\n key = \"votingOptions\";\n keyType = KeyType.root;\n value = (0, VerbStreamParser_1.parse)(ds);\n }\n else if (false\n || key === \"apptTZDefStartDisplay\"\n || key === \"apptTZDefEndDisplay\"\n || key === \"apptTZDefRecur\") {\n keyType = KeyType.root;\n value = (0, TZDEFINITIONParser_1.parse)(ds);\n }\n else if (key === \"timeZoneStruct\") {\n value = (0, TZREGParser_1.parse)(ds);\n }\n else if (key === \"apptRecur\") {\n try {\n value = (0, AppointmentRecurParser_1.parse)(ds, ansiEncoding);\n }\n catch (ex) {\n console.debug(ex);\n // drop this data\n key = undefined;\n }\n }\n else if (key === \"recipType\") {\n var MAPI_TO = 1;\n var MAPI_CC = 2;\n var MAPI_BCC = 3;\n if (0) { }\n else if (value === MAPI_TO) {\n value = \"to\";\n }\n else if (value === MAPI_CC) {\n value = \"cc\";\n }\n else if (value === MAPI_BCC) {\n value = \"bcc\";\n }\n }\n else if (key === \"globalAppointmentID\") {\n value = (0, utils_1.bin2HexUpper)(ds);\n }\n var propertyTag = \"\".concat(fieldClass).concat(fieldType);\n return { key: key, keyType: keyType, value: value, notForRawProp: skip, propertyTag: propertyTag, propertySet: propertySet, propertyLid: propertyLid, };\n };\n MsgReader.prototype.fieldsDataDocument = function (parserConfig, documentProperty, fields) {\n var value = documentProperty.name.substring(12).toLowerCase();\n var fieldClass = value.substring(0, 4);\n var fieldType = value.substring(4, 8);\n parserConfig.propertyObserver && parserConfig.propertyObserver(fields, parseInt(value.substring(0, 8), 16), documentProperty.provider());\n if (fieldClass == const_1.default.MSG.FIELD.CLASS_MAPPING.ATTACHMENT_DATA) {\n // attachment specific info\n fields.dataId = documentProperty.dataId;\n fields.contentLength = documentProperty.length;\n }\n else {\n this.setDecodedFieldTo(parserConfig, fields, this.decodeField(fieldClass, fieldType, documentProperty.provider, parserConfig.ansiEncoding, false));\n }\n };\n MsgReader.prototype.setDecodedFieldTo = function (parserConfig, fields, pair) {\n var key = pair.key, keyType = pair.keyType, value = pair.value;\n if (key !== undefined) {\n if (keyType === KeyType.root) {\n fields[key] = value;\n }\n }\n if (parserConfig.includeRawProps === true) {\n fields.rawProps = fields.rawProps || [];\n if (!pair.notForRawProp) {\n fields.rawProps.push({\n propertyTag: pair.propertyTag,\n propertySet: pair.propertySet,\n propertyLid: pair.propertyLid,\n propertyName: (pair.keyType === KeyType.named) ? pair.key : undefined,\n value: value,\n });\n }\n }\n };\n MsgReader.prototype.getFieldType = function (fieldProperty) {\n var value = fieldProperty.name.substring(12).toLowerCase();\n return value.substring(4, 8);\n };\n MsgReader.prototype.fieldsDataDirInner = function (parserConfig, dirProperty, rootFolder, fields) {\n var _this = this;\n if (dirProperty.name.indexOf(const_1.default.MSG.FIELD.PREFIX.ATTACHMENT) == 0) {\n // attachment\n var attachmentField = {\n dataType: \"attachment\",\n };\n fields.attachments.push(attachmentField);\n this.fieldsDataDir(parserConfig, dirProperty, rootFolder, attachmentField, \"attachment\");\n }\n else if (dirProperty.name.indexOf(const_1.default.MSG.FIELD.PREFIX.RECIPIENT) == 0) {\n // recipient\n var recipientField = {\n dataType: \"recipient\",\n };\n fields.recipients.push(recipientField);\n this.fieldsDataDir(parserConfig, dirProperty, rootFolder, recipientField, \"recip\");\n }\n else if (dirProperty.name.indexOf(const_1.default.MSG.FIELD.PREFIX.NAMEID) == 0) {\n // unknown, read\n this.fieldsNameIdDir(parserConfig, dirProperty, rootFolder, fields);\n }\n else {\n // other dir\n var childFieldType = this.getFieldType(dirProperty);\n if (childFieldType != const_1.default.MSG.FIELD.DIR_TYPE.INNER_MSG) {\n // ignore\n }\n else {\n var innerMsgContentFields = {\n dataType: \"msg\",\n attachments: [],\n recipients: [],\n };\n this.fieldsDataDir(parserConfig, dirProperty, rootFolder, innerMsgContentFields, \"sub\");\n fields.innerMsgContentFields = innerMsgContentFields;\n fields.innerMsgContent = true;\n fields.folderId = dirProperty.dataId;\n this.innerMsgBurners[dirProperty.dataId] = function () { return _this.burnMsg(dirProperty, rootFolder); };\n }\n }\n };\n MsgReader.prototype.burnMsg = function (folder, rootFolder) {\n var entries = [\n {\n name: \"Root Entry\",\n type: TypeEnum.ROOT,\n children: [],\n length: 0,\n }\n ];\n this.registerFolder(entries, 0, folder, rootFolder, 0);\n return (0, Burner_1.burn)(entries);\n };\n MsgReader.prototype.registerFolder = function (entries, index, folder, rootFolder, depth) {\n var _loop_1 = function (set) {\n var provider = set.provider, length_1 = set.length;\n if (depth === 0 && set.name === \"__properties_version1.0\") {\n var src = provider();\n var dst_1 = new Uint8Array(src.length + 8);\n dst_1.set(src.subarray(0, 24), 0);\n dst_1.set(src.subarray(24), 32);\n provider = function () { return dst_1; };\n length_1 = dst_1.length;\n }\n var subIndex = entries.length;\n entries[index].children.push(subIndex);\n entries.push({\n name: set.name,\n type: TypeEnum.DOCUMENT,\n binaryProvider: provider,\n length: length_1,\n });\n };\n for (var _i = 0, _a = folder.fileNameSets(); _i < _a.length; _i++) {\n var set = _a[_i];\n _loop_1(set);\n }\n if (depth === 0) {\n // include root `__nameid_version1.0` folder.\n var sources = rootFolder.subFolders()\n .filter(function (it) { return it.name === const_1.default.MSG.FIELD.PREFIX.NAMEID; });\n for (var _b = 0, sources_1 = sources; _b < sources_1.length; _b++) {\n var source = sources_1[_b];\n var subIndex = entries.length;\n entries[index].children.push(subIndex);\n entries.push({\n name: source.name,\n type: TypeEnum.DIRECTORY,\n children: [],\n length: 0,\n });\n this.registerFolder(entries, subIndex, source, rootFolder, depth + 1);\n }\n }\n for (var _c = 0, _d = folder.subFolders(); _c < _d.length; _c++) {\n var subFolder = _d[_c];\n var subIndex = entries.length;\n entries[index].children.push(subIndex);\n entries.push({\n name: subFolder.name,\n type: TypeEnum.DIRECTORY,\n children: [],\n length: 0,\n });\n this.registerFolder(entries, subIndex, subFolder, rootFolder, depth + 1);\n }\n };\n MsgReader.prototype.fieldsRecipAndAttachmentProperties = function (parserConfig, documentProperty, fields) {\n var propertiesBinary = documentProperty.provider();\n var propertiesDs = new DataStream_1.default(propertiesBinary, 8, DataStream_1.default.LITTLE_ENDIAN);\n this.importPropertiesFromFile(parserConfig, propertiesDs, fields);\n };\n MsgReader.prototype.importPropertiesFromFile = function (parserConfig, propertiesDs, fields) {\n // See: [MS-OXMSG]: Outlook Item (.msg) File Format, 2.4 Property Stream\n // https://docs.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-oxmsg/20c1125f-043d-42d9-b1dc-cb9b7e5198ef\n var typeConverters = {\n 0x0040: function (dataView) {\n var fileTime = dataView.getUint32(0, true) + (4294967296.0 * dataView.getUint32(4, true));\n return new Date(fileTimeToUnixEpoch(fileTime)).toUTCString();\n },\n };\n var _loop_2 = function () {\n var propertyTag = propertiesDs.readUint32();\n if (propertyTag === 0) {\n return \"break\";\n }\n var flags = propertiesDs.readUint32();\n var arr = propertiesDs.readUint8Array(8);\n parserConfig.propertyObserver(fields, propertyTag, arr);\n var fieldClass = (0, utils_1.toHex2)((propertyTag / 65536) & 0xFFFF);\n var fieldType = (0, utils_1.toHex2)(propertyTag & 0xFFFF);\n this_1.setDecodedFieldTo(parserConfig, fields, this_1.decodeField(fieldClass, fieldType, function () { return arr; }, parserConfig.ansiEncoding, true));\n };\n var this_1 = this;\n while (!propertiesDs.isEof()) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n };\n MsgReader.prototype.fieldsRootProperties = function (parserConfig, documentProperty, fields) {\n var propertiesBinary = documentProperty.provider();\n var propertiesDs = new DataStream_1.default(propertiesBinary, 32, DataStream_1.default.LITTLE_ENDIAN);\n this.importPropertiesFromFile(parserConfig, propertiesDs, fields);\n };\n MsgReader.prototype.fieldsDataDir = function (parserConfig, dirProperty, rootFolder, fields, subClass) {\n for (var _i = 0, _a = dirProperty.subFolders(); _i < _a.length; _i++) {\n var subFolder = _a[_i];\n this.fieldsDataDirInner(parserConfig, subFolder, rootFolder, fields);\n }\n for (var _b = 0, _c = dirProperty.fileNameSets(); _b < _c.length; _b++) {\n var fileSet = _c[_b];\n if (0) { }\n else if (fileSet.name.indexOf(const_1.default.MSG.FIELD.PREFIX.DOCUMENT) == 0) {\n this.fieldsDataDocument(parserConfig, fileSet, fields);\n }\n else if (fileSet.name === \"__properties_version1.0\") {\n if (subClass === \"recip\" || subClass === \"attachment\" || subClass === \"sub\") {\n this.fieldsRecipAndAttachmentProperties(parserConfig, fileSet, fields);\n }\n else if (subClass === \"root\") {\n this.fieldsRootProperties(parserConfig, fileSet, fields);\n }\n }\n }\n };\n MsgReader.prototype.fieldsNameIdDir = function (parserConfig, dirProperty, rootFolder, fields) {\n var guidTable = undefined;\n var stringTable = undefined;\n var entryTable = undefined;\n for (var _i = 0, _a = dirProperty.fileNameSets(); _i < _a.length; _i++) {\n var fileSet = _a[_i];\n if (0) { }\n else if (fileSet.name.indexOf(const_1.default.MSG.FIELD.PREFIX.DOCUMENT) == 0) {\n var value = fileSet.name.substring(12).toLowerCase();\n var fieldClass = value.substring(0, 4);\n var fieldType = value.substring(4, 8);\n if (0) { }\n else if (fieldClass === \"0002\" && fieldType === \"0102\") {\n guidTable = fileSet.provider();\n }\n else if (fieldClass === \"0003\" && fieldType === \"0102\") {\n entryTable = fileSet.provider();\n }\n else if (fieldClass === \"0004\" && fieldType === \"0102\") {\n stringTable = fileSet.provider();\n }\n }\n }\n //console.log(\"%\", guidTable, stringTable, entryTable);\n if (guidTable !== undefined && stringTable !== undefined && entryTable !== undefined) {\n var entries = (0, EntryStreamParser_1.parse)(entryTable);\n var stringReader = new DataStream_1.default(stringTable, 0, DataStream_1.default.LITTLE_ENDIAN);\n for (var _b = 0, entries_1 = entries; _b < entries_1.length; _b++) {\n var entry = entries_1[_b];\n if (entry.isStringProperty) {\n stringReader.seek(entry.key);\n var numTextBytes = stringReader.readUint32();\n this.privatePidToKeyed[0x8000 | entry.propertyIndex] = {\n useName: true,\n name: stringReader.readUCS2String(numTextBytes / 2),\n };\n }\n else {\n this.privatePidToKeyed[0x8000 | entry.propertyIndex] = {\n useName: false,\n propertySet: (entry.guidIndex === 1) ? \"00020328-00000-0000-C000-00000000046\"\n : (entry.guidIndex === 2) ? \"00020329-00000-0000-C000-00000000046\"\n : (0, utils_1.msftUuidStringify)(guidTable, 16 * (entry.guidIndex - 3)),\n propertyLid: entry.key,\n };\n }\n }\n //console.log(\"@\", this.privatePidToKeyed);\n }\n };\n /**\n * extract real fields\n */\n MsgReader.prototype.fieldsDataReader = function (parserConfig) {\n var fields = {\n dataType: \"msg\",\n attachments: [],\n recipients: []\n };\n this.fieldsDataDir(parserConfig, this.reader.rootFolder(), this.reader.rootFolder(), fields, \"root\");\n return fields;\n };\n /**\n * convert binary data to dictionary\n */\n MsgReader.prototype.parseMsgData = function (parserConfig) {\n this.reader.parse();\n return this.fieldsDataReader(parserConfig);\n };\n MsgReader.prototype.getFileData = function () {\n var _a, _b, _c;\n if (this.fieldsData === undefined) {\n if (!this.reader.isMSGFile()) {\n return {\n dataType: null,\n error: 'Unsupported file type!'\n };\n }\n this.innerMsgBurners = {};\n this.privatePidToKeyed = {};\n this.fieldsData = this.parseMsgData({\n propertyObserver: ((_a = this.parserConfig) === null || _a === void 0 ? void 0 : _a.propertyObserver) || (function () { }),\n includeRawProps: ((_b = this.parserConfig) === null || _b === void 0 ? void 0 : _b.includeRawProps) ? true : false,\n ansiEncoding: (0, utils_1.emptyToNull)((_c = this.parserConfig) === null || _c === void 0 ? void 0 : _c.ansiEncoding),\n });\n }\n return this.fieldsData;\n };\n /**\n * Reads an attachment content by key/ID\n *\n * @param attach\n * @returns The attachment for specific attachment key\n */\n MsgReader.prototype.getAttachment = function (attach) {\n var attachData = typeof attach === 'number' ? this.fieldsData.attachments[attach] : attach;\n if (attachData.innerMsgContent === true && typeof attachData.folderId === \"number\") {\n // embedded msg\n return { fileName: attachData.name + \".msg\", content: this.innerMsgBurners[attachData.folderId]() };\n }\n else {\n // raw attachment file\n var fieldData = this.reader.readFileOf(attachData.dataId);\n return { fileName: attachData.fileName, content: fieldData };\n }\n };\n return MsgReader;\n}());\nexports.default = MsgReader;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar MsgReader_1 = __importDefault(require(\"./MsgReader\"));\n__exportStar(require(\"./MsgReader\"), exports);\nexports.default = MsgReader_1.default;\n","import { useState, useEffect } from 'react';\nimport MsgReader from '@kenjiuno/msgreader';\nimport type { FieldsData } from '@kenjiuno/msgreader';\nimport { User, Users, Paperclip, Calendar, Mail, Tag, Clock, Hash } from 'lucide-react';\n\ninterface MsgRendererProps {\n url: string;\n}\n\nfunction formatRecipients(recipients: FieldsData[] | undefined, type: 'to' | 'cc' | 'bcc'): string {\n if (!recipients) return '';\n return recipients\n .filter((r) => r.recipType === type)\n .map((r) => {\n const name = r.name || '';\n const email = r.smtpAddress || r.email || '';\n if (name && email && name !== email) {\n return `${name} <${email}>`;\n }\n return name || email;\n })\n .filter(Boolean)\n .join('; ');\n}\n\nfunction formatDate(dateStr: string | undefined): string {\n if (!dateStr) return '';\n try {\n const date = new Date(dateStr);\n if (isNaN(date.getTime())) return dateStr;\n return date.toLocaleString();\n } catch {\n return dateStr;\n }\n}\n\nfunction decodeHtmlBody(fields: FieldsData): string {\n // 优先使用 bodyHtml (string 类型)\n if (fields.bodyHtml) {\n return fields.bodyHtml;\n }\n // 其次尝试 html (Uint8Array 类型)\n if (fields.html) {\n try {\n const decoder = new TextDecoder('utf-8');\n return decoder.decode(fields.html);\n } catch {\n // fallback\n }\n }\n // 最后使用纯文本,转换为简单 HTML\n if (fields.body) {\n return `<pre style=\"white-space: pre-wrap; word-wrap: break-word; font-family: system-ui, sans-serif;\">${fields.body.replace(/&/g, '&amp;').replace(/\\x3c/g, '&lt;').replace(/>/g, '&gt;')\n }</pre>`;\n }\n return '<p style=\"color: #999;\">(无邮件正文)</p>';\n}\n\nfunction formatMessageClass(messageClass: string | undefined): string {\n if (!messageClass) return '';\n const classMap: Record<string, string> = {\n 'IPM.Note': 'Email',\n 'IPM.Note.SMIME': 'Encrypted Email',\n 'IPM.Note.SMIME.MultipartSigned': 'Signed Email',\n 'IPM.Appointment': 'Appointment',\n 'IPM.Schedule.Meeting.Request': 'Meeting Request',\n 'IPM.Schedule.Meeting.Canceled': 'Meeting Cancellation',\n 'IPM.Contact': 'Contact',\n 'IPM.Task': 'Task',\n 'IPM.StickyNote': 'Sticky Note',\n };\n return classMap[messageClass] || messageClass;\n}\n\nconst labelStyle: React.CSSProperties = {\n flexShrink: 0,\n color: '#6b7280',\n fontWeight: 500,\n marginRight: '8px',\n whiteSpace: 'nowrap',\n};\n\nconst rowStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n gap: '8px',\n padding: '6px 0',\n};\n\nconst iconWrapStyle: React.CSSProperties = {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n height: '1.4em',\n};\n\nconst iconStyle: React.CSSProperties = {\n flexShrink: 0,\n color: '#9ca3af',\n};\n\nconst valueStyle: React.CSSProperties = {\n color: '#111827',\n wordBreak: 'break-word' as const,\n flex: 1,\n};\n\nexport const MsgRenderer: React.FC<MsgRendererProps> = ({ url }) => {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [fields, setFields] = useState<FieldsData | null>(null);\n\n useEffect(() => {\n const loadMsg = async () => {\n setLoading(true);\n setError(null);\n setFields(null);\n\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error('文件加载失败');\n }\n\n const arrayBuffer = await response.arrayBuffer();\n const msgReader = new MsgReader(arrayBuffer);\n const fileData = msgReader.getFileData();\n setFields(fileData);\n } catch (err) {\n console.error('MSG 解析错误:', err);\n setError('Outlook 邮件解析失败');\n } finally {\n setLoading(false);\n }\n };\n\n loadMsg();\n }, [url]);\n\n if (loading) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-white/20 rfp-border-t-white rfp-rounded-full rfp-animate-spin\" />\n </div>\n );\n }\n\n if (error || !fields) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-text-white/70 rfp-text-center\">\n <p className=\"rfp-text-lg\">{error || '邮件解析失败'}</p>\n </div>\n </div>\n );\n }\n\n const toStr = formatRecipients(fields.recipients, 'to');\n const ccStr = formatRecipients(fields.recipients, 'cc');\n const bccStr = formatRecipients(fields.recipients, 'bcc');\n const senderName = fields.senderName || '';\n const senderEmail = fields.senderSmtpAddress || fields.senderEmail || '';\n const sender = senderName && senderEmail && senderName !== senderEmail\n ? `${senderName} <${senderEmail}>`\n : senderName || senderEmail;\n const sentDate = formatDate(fields.clientSubmitTime);\n const receivedDate = formatDate(fields.messageDeliveryTime);\n const createdDate = formatDate(fields.creationTime);\n const lastModified = formatDate(fields.lastModificationTime);\n const subject = fields.subject || '(无主题)';\n const attachments = (fields.attachments || []).filter((a) => !a.attachmentHidden);\n const bodyHtml = decodeHtmlBody(fields);\n const messageClass = formatMessageClass(fields.messageClass);\n const messageId = fields.messageId || '';\n const fieldsAny = fields as FieldsData & Record<string, unknown>;\n const importance = typeof fieldsAny.importance === 'number' ? fieldsAny.importance : undefined;\n const importanceLabel = importance === 2 ? 'High' : importance === 0 ? 'Low' : '';\n const sensitivity = typeof fieldsAny.sensitivity === 'number' ? fieldsAny.sensitivity : undefined;\n const sensitivityLabels: Record<number, string> = {\n 0: 'Normal',\n 1: 'Personal',\n 2: 'Private',\n 3: 'Confidential',\n };\n const sensitivityLabel = sensitivity !== undefined && sensitivity !== 0 ? sensitivityLabels[sensitivity] || '' : '';\n\n return (\n <div\n className=\"rfp-w-full rfp-h-full rfp-overflow-auto\"\n style={{ background: 'rgba(0, 0, 0, 0.15)' }}\n >\n <div\n style={{\n width: '100%',\n maxWidth: '900px',\n margin: '0 auto',\n background: 'white',\n minHeight: '100%',\n boxShadow: '0 2px 12px rgba(0, 0, 0, 0.15)',\n }}\n >\n {/* 邮件头部 */}\n <div style={{ borderBottom: '1px solid #e5e7eb', padding: 'clamp(12px, 3vw, 24px) clamp(16px, 3vw, 28px)', background: '#f9fafb' }}>\n {/* 主题 */}\n <h2 style={{ margin: '0 0 16px 0', fontSize: 'clamp(16px, 2.5vw, 20px)', fontWeight: 600, color: '#111827', lineHeight: 1.4 }}>\n {subject}\n </h2>\n\n {/* 元信息 */}\n <div style={{ display: 'flex', flexDirection: 'column', fontSize: 'clamp(12px, 1.8vw, 14px)', color: '#4b5563' }}>\n {sender && (\n <div style={rowStyle}>\n <span style={iconWrapStyle}><User size={16} style={iconStyle} /></span>\n <div style={{ display: 'flex', flex: 1 }}>\n <span style={labelStyle}>From</span>\n <span style={valueStyle}>{sender}</span>\n </div>\n </div>\n )}\n\n {toStr && (\n <div style={rowStyle}>\n <span style={iconWrapStyle}><Users size={16} style={iconStyle} /></span>\n <div style={{ display: 'flex', flex: 1 }}>\n <span style={labelStyle}>To</span>\n <span style={valueStyle}>{toStr}</span>\n </div>\n </div>\n )}\n\n {ccStr && (\n <div style={rowStyle}>\n <span style={iconWrapStyle}><Users size={16} style={iconStyle} /></span>\n <div style={{ display: 'flex', flex: 1 }}>\n <span style={labelStyle}>Cc</span>\n <span style={valueStyle}>{ccStr}</span>\n </div>\n </div>\n )}\n\n {bccStr && (\n <div style={rowStyle}>\n <span style={iconWrapStyle}><Users size={16} style={iconStyle} /></span>\n <div style={{ display: 'flex', flex: 1 }}>\n <span style={labelStyle}>Bcc</span>\n <span style={valueStyle}>{bccStr}</span>\n </div>\n </div>\n )}\n\n {sentDate && (\n <div style={rowStyle}>\n <span style={iconWrapStyle}><Calendar size={16} style={iconStyle} /></span>\n <div style={{ display: 'flex', flex: 1 }}>\n <span style={labelStyle}>Sent</span>\n <span style={valueStyle}>{sentDate}</span>\n </div>\n </div>\n )}\n\n {receivedDate && receivedDate !== sentDate && (\n <div style={rowStyle}>\n <span style={iconWrapStyle}><Clock size={16} style={iconStyle} /></span>\n <div style={{ display: 'flex', flex: 1 }}>\n <span style={labelStyle}>Received</span>\n <span style={valueStyle}>{receivedDate}</span>\n </div>\n </div>\n )}\n\n {!sentDate && !receivedDate && createdDate && (\n <div style={rowStyle}>\n <span style={iconWrapStyle}><Calendar size={16} style={iconStyle} /></span>\n <div style={{ display: 'flex', flex: 1 }}>\n <span style={labelStyle}>Date</span>\n <span style={valueStyle}>{createdDate}</span>\n </div>\n </div>\n )}\n\n {importanceLabel && (\n <div style={rowStyle}>\n <span style={iconWrapStyle}><Tag size={16} style={iconStyle} /></span>\n <div style={{ display: 'flex', flex: 1 }}>\n <span style={labelStyle}>Importance</span>\n <span style={{\n ...valueStyle,\n color: importance === 2 ? '#dc2626' : '#2563eb',\n fontWeight: 500,\n }}>\n {importanceLabel}\n </span>\n </div>\n </div>\n )}\n\n {sensitivityLabel && (\n <div style={rowStyle}>\n <span style={iconWrapStyle}><Tag size={16} style={iconStyle} /></span>\n <div style={{ display: 'flex', flex: 1 }}>\n <span style={labelStyle}>Sensitivity</span>\n <span style={valueStyle}>{sensitivityLabel}</span>\n </div>\n </div>\n )}\n\n {messageClass && messageClass !== 'Email' && (\n <div style={rowStyle}>\n <span style={iconWrapStyle}><Mail size={16} style={iconStyle} /></span>\n <div style={{ display: 'flex', flex: 1 }}>\n <span style={labelStyle}>Type</span>\n <span style={valueStyle}>{messageClass}</span>\n </div>\n </div>\n )}\n\n {attachments.length > 0 && (\n <div style={{ ...rowStyle, borderTop: '1px solid #e5e7eb', marginTop: '4px', paddingTop: '10px' }}>\n <span style={iconWrapStyle}><Paperclip size={16} style={iconStyle} /></span>\n <div style={{ display: 'flex', flex: 1 }}>\n <span style={labelStyle}>Attachments</span>\n <div style={{ ...valueStyle, display: 'flex', flexWrap: 'wrap', gap: '6px' }}>\n {attachments.map((a, i) => {\n const name = a.fileName || a.name || '未知文件';\n const size = a.contentLength;\n const sizeStr = size\n ? size > 1048576\n ? `${(size / 1048576).toFixed(1)} MB`\n : size > 1024\n ? `${(size / 1024).toFixed(0)} KB`\n : `${size} B`\n : '';\n return (\n <span\n key={i}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n padding: '2px 8px',\n background: '#f3f4f6',\n borderRadius: '4px',\n fontSize: '13px',\n color: '#374151',\n border: '1px solid #e5e7eb',\n }}\n >\n {name}\n {sizeStr && (\n <span style={{ color: '#9ca3af', fontSize: '12px' }}>({sizeStr})</span>\n )}\n </span>\n );\n })}\n </div>\n </div>\n </div>\n )}\n\n {messageId && (\n <div style={{ ...rowStyle, borderTop: attachments.length > 0 ? 'none' : '1px solid #e5e7eb', marginTop: '4px', paddingTop: '10px' }}>\n <span style={iconWrapStyle}><Hash size={16} style={iconStyle} /></span>\n <div style={{ display: 'flex', flex: 1 }}>\n <span style={labelStyle}>Message-ID</span>\n <span style={{ ...valueStyle, fontSize: '12px', color: '#9ca3af', fontFamily: 'monospace' }}>{messageId}</span>\n </div>\n </div>\n )}\n\n {lastModified && lastModified !== sentDate && lastModified !== receivedDate && (\n <div style={rowStyle}>\n <span style={iconWrapStyle}><Clock size={16} style={iconStyle} /></span>\n <div style={{ display: 'flex', flex: 1 }}>\n <span style={labelStyle}>Modified</span>\n <span style={{ ...valueStyle, fontSize: '12px', color: '#9ca3af' }}>{lastModified}</span>\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* 邮件正文 */}\n <div\n style={{\n padding: 'clamp(12px, 3vw, 24px) clamp(16px, 3vw, 28px)',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n lineHeight: '1.6',\n color: '#333',\n overflowX: 'auto',\n }}\n dangerouslySetInnerHTML={{ __html: bodyHtml }}\n />\n </div>\n </div>\n );\n};\n","import { useRef, useEffect, useState } from 'react';\nimport videojs from 'video.js';\nimport 'video.js/dist/video-js.css';\n\ntype VideoJsPlayer = ReturnType<typeof videojs>;\n\ninterface VideoRendererProps {\n url: string;\n}\n\n// 根据 URL 获取视频 MIME 类型\nconst getVideoType = (url: string): string => {\n const ext = url.split('.').pop()?.toLowerCase().split('?')[0] || '';\n const typeMap: Record<string, string> = {\n mp4: 'video/mp4',\n webm: 'video/webm',\n ogg: 'video/ogg',\n ogv: 'video/ogg',\n mov: 'video/quicktime', // MOV 使用 QuickTime MIME 类型\n avi: 'video/x-msvideo',\n mkv: 'video/x-matroska',\n m4v: 'video/mp4',\n '3gp': 'video/3gpp',\n flv: 'video/x-flv',\n };\n return typeMap[ext] || 'video/mp4';\n};\n\nexport const VideoRenderer: React.FC<VideoRendererProps> = ({ url }) => {\n const [error, setError] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const videoRef = useRef<HTMLDivElement>(null);\n const playerRef = useRef<VideoJsPlayer | null>(null);\n\n useEffect(() => {\n // 确保 Video.js 播放器只初始化一次\n if (!playerRef.current && videoRef.current) {\n const videoElement = document.createElement('video-js');\n videoElement.classList.add('vjs-big-play-centered', 'vjs-theme-apple');\n videoRef.current.appendChild(videoElement);\n\n const videoType = getVideoType(url);\n\n // 为 MOV 格式提供多个 MIME 类型作为备用\n const sources = videoType === 'video/quicktime'\n ? [\n { src: url, type: 'video/quicktime' },\n { src: url, type: 'video/mp4' } // 备用方案\n ]\n : [{ src: url, type: videoType }];\n\n const player = videojs(videoElement, {\n controls: true,\n responsive: true,\n fluid: true,\n preload: 'auto',\n controlBar: {\n children: [\n 'playToggle',\n 'volumePanel',\n 'currentTimeDisplay',\n 'timeDivider',\n 'durationDisplay',\n 'progressControl',\n 'remainingTimeDisplay',\n 'fullscreenToggle'\n ],\n volumePanel: {\n inline: false\n }\n },\n html5: {\n vhs: {\n overrideNative: true\n },\n nativeVideoTracks: false,\n nativeAudioTracks: false,\n nativeTextTracks: false\n },\n sources\n });\n\n // 监听加载完成\n player.on('loadeddata', () => {\n setIsLoading(false);\n });\n\n player.on('error', () => {\n const error = player.error();\n console.error('Video.js error:', error);\n setError(`视频加载失败: ${error?.message || '未知错误'}`);\n setIsLoading(false);\n });\n\n playerRef.current = player;\n }\n }, [url]);\n\n // 清理函数\n useEffect(() => {\n const player = playerRef.current;\n\n return () => {\n if (player && !player.isDisposed()) {\n player.dispose();\n playerRef.current = null;\n }\n };\n }, []);\n\n if (error) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-text-center\">\n <div className=\"rfp-w-16 rfp-h-16 rfp-mx-auto rfp-mb-4 rfp-rounded-full rfp-bg-red-500/10 rfp-flex rfp-items-center rfp-justify-center\">\n <svg className=\"rfp-w-8 rfp-h-8 rfp-text-red-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\" />\n </svg>\n </div>\n <p className=\"rfp-text-lg rfp-font-medium rfp-text-white/90 rfp-mb-2\">视频加载失败</p>\n <p className=\"rfp-text-sm rfp-text-white/60\">{error}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-p-4 md:rfp-p-8\">\n <div className=\"rfp-w-full rfp-max-w-full md:rfp-max-w-5xl rfp-relative\">\n {/* 加载状态 */}\n {isLoading && (\n <div className=\"rfp-absolute rfp-inset-0 rfp-flex rfp-items-center rfp-justify-center rfp-bg-black/20 rfp-backdrop-blur-sm rfp-rounded-2xl rfp-z-10\">\n <div className=\"rfp-text-center\">\n <div className=\"rfp-w-12 rfp-h-12 rfp-mx-auto rfp-mb-3 rfp-border-3 rfp-border-white/20 rfp-border-t-white rfp-rounded-full rfp-animate-spin\" />\n <p className=\"rfp-text-sm rfp-text-white/70 rfp-font-medium\">加载视频中...</p>\n </div>\n </div>\n )}\n\n {/* 视频播放器容器 */}\n <div\n ref={videoRef}\n className=\"rfp-overflow-hidden\"\n style={{\n boxShadow: '0 20px 60px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.05)'\n }}\n />\n </div>\n </div>\n );\n};\n","import { useState, useRef, useEffect, useCallback } from 'react';\n\ninterface UseAudioPlayerOptions {\n url: string;\n skipSeconds?: number;\n}\n\ninterface UseAudioPlayerReturn {\n audioRef: React.RefObject<HTMLAudioElement>;\n isPlaying: boolean;\n isLoading: boolean;\n isLoop: boolean;\n currentTime: number;\n duration: number;\n volume: number;\n isMuted: boolean;\n error: string | null;\n togglePlay: () => void;\n seek: (time: number) => void;\n skip: (seconds: number) => void;\n setVolume: (vol: number) => void;\n toggleMute: () => void;\n toggleLoop: () => void;\n formatTime: (time: number) => string;\n}\n\nexport function useAudioPlayer({\n url,\n}: UseAudioPlayerOptions): UseAudioPlayerReturn {\n const audioRef = useRef<HTMLAudioElement>(null);\n const [isPlaying, setIsPlaying] = useState(false);\n const [isLoading, setIsLoading] = useState(true);\n const [currentTime, setCurrentTime] = useState(0);\n const [duration, setDuration] = useState(0);\n const [volume, setVolumeState] = useState(1);\n const [isMuted, setIsMuted] = useState(false);\n const [isLoop, setIsLoop] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const audio = audioRef.current;\n if (!audio) return;\n\n // 重置加载状态\n setIsLoading(true);\n setError(null);\n\n const onTimeUpdate = () => {\n if (!isNaN(audio.currentTime)) {\n setCurrentTime(audio.currentTime);\n }\n };\n\n const onDurationChange = () => {\n if (!isNaN(audio.duration) && isFinite(audio.duration)) {\n setDuration(audio.duration);\n }\n };\n\n const onCanPlay = () => {\n setIsLoading(false);\n onDurationChange();\n };\n\n const onWaiting = () => setIsLoading(true);\n const onPlaying = () => {\n setIsLoading(false);\n setIsPlaying(true);\n };\n\n // 由 audio 事件驱动播放状态,而非手动设置\n const onPlay = () => setIsPlaying(true);\n const onPause = () => setIsPlaying(false);\n const onEnded = () => setIsPlaying(false);\n\n const onError = () => {\n setError('音频加载失败');\n setIsLoading(false);\n };\n\n audio.addEventListener('timeupdate', onTimeUpdate);\n audio.addEventListener('loadedmetadata', onDurationChange);\n audio.addEventListener('durationchange', onDurationChange);\n audio.addEventListener('canplay', onCanPlay);\n audio.addEventListener('waiting', onWaiting);\n audio.addEventListener('playing', onPlaying);\n audio.addEventListener('play', onPlay);\n audio.addEventListener('pause', onPause);\n audio.addEventListener('ended', onEnded);\n audio.addEventListener('error', onError);\n\n // 如果 audio 已经就绪\n if (audio.readyState >= 3) {\n setIsLoading(false);\n onDurationChange();\n } else if (audio.readyState >= 1) {\n onDurationChange();\n }\n\n return () => {\n audio.removeEventListener('timeupdate', onTimeUpdate);\n audio.removeEventListener('loadedmetadata', onDurationChange);\n audio.removeEventListener('durationchange', onDurationChange);\n audio.removeEventListener('canplay', onCanPlay);\n audio.removeEventListener('waiting', onWaiting);\n audio.removeEventListener('playing', onPlaying);\n audio.removeEventListener('play', onPlay);\n audio.removeEventListener('pause', onPause);\n audio.removeEventListener('ended', onEnded);\n audio.removeEventListener('error', onError);\n };\n }, [url]);\n\n const togglePlay = useCallback(() => {\n const audio = audioRef.current;\n if (!audio) return;\n\n if (audio.paused) {\n audio.play().catch(() => {\n // 浏览器自动播放策略拒绝\n });\n } else {\n audio.pause();\n }\n }, []);\n\n const seek = useCallback((time: number) => {\n const audio = audioRef.current;\n if (!audio) return;\n audio.currentTime = time;\n setCurrentTime(time);\n }, []);\n\n const skip = useCallback(\n (seconds: number) => {\n const audio = audioRef.current;\n if (!audio) return;\n audio.currentTime = Math.max(\n 0,\n Math.min(audio.currentTime + seconds, audio.duration || Infinity)\n );\n },\n []\n );\n\n const setVolume = useCallback((vol: number) => {\n const audio = audioRef.current;\n if (!audio) return;\n const clamped = Math.max(0, Math.min(1, vol));\n audio.volume = clamped;\n setVolumeState(clamped);\n if (clamped > 0) {\n audio.muted = false;\n setIsMuted(false);\n }\n }, []);\n\n const toggleMute = useCallback(() => {\n const audio = audioRef.current;\n if (!audio) return;\n audio.muted = !audio.muted;\n setIsMuted(audio.muted);\n }, []);\n\n const toggleLoop = useCallback(() => {\n const audio = audioRef.current;\n if (!audio) return;\n const next = !audio.loop;\n audio.loop = next;\n setIsLoop(next);\n }, []);\n\n const formatTime = useCallback((time: number) => {\n if (!isFinite(time) || isNaN(time) || time < 0) return '0:00';\n const minutes = Math.floor(time / 60);\n const seconds = Math.floor(time % 60);\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n }, []);\n\n return {\n audioRef,\n isPlaying,\n isLoading,\n isLoop,\n currentTime,\n duration,\n volume,\n isMuted,\n error,\n togglePlay,\n seek,\n skip,\n setVolume,\n toggleMute,\n toggleLoop,\n formatTime,\n };\n}\n","import { useState, useRef, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Play, Pause, Volume2, VolumeX, Volume1, SkipBack, SkipForward, Repeat } from 'lucide-react';\nimport { useAudioPlayer } from './hooks/useAudioPlayer';\n\n/** 文本溢出时自动横向滚动 */\nconst MarqueeText: React.FC<{\n text: string;\n className?: string;\n style?: React.CSSProperties;\n}> = ({ text, className = '', style }) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const innerRef = useRef<HTMLDivElement>(null);\n const [overflow, setOverflow] = useState(false);\n const [scrollDist, setScrollDist] = useState(0);\n\n useEffect(() => {\n const check = () => {\n const container = containerRef.current;\n const inner = innerRef.current;\n if (!container || !inner) return;\n const cw = container.clientWidth;\n const tw = inner.scrollWidth;\n setOverflow(tw > cw);\n setScrollDist(tw);\n };\n check();\n const observer = new ResizeObserver(check);\n if (containerRef.current) observer.observe(containerRef.current);\n return () => observer.disconnect();\n }, [text]);\n\n const gap = 60;\n const totalScroll = scrollDist + gap;\n const dur = totalScroll / 40;\n\n return (\n <div\n ref={containerRef}\n className={`rfp-overflow-hidden rfp-whitespace-nowrap ${className}`}\n style={style}\n >\n {overflow ? (\n <motion.div\n className=\"rfp-inline-flex rfp-whitespace-nowrap\"\n animate={{ x: [0, -totalScroll] }}\n transition={{ duration: dur, repeat: Infinity, ease: 'linear', repeatDelay: 1.5 }}\n >\n <span>{text}</span>\n <span style={{ width: gap }} className=\"rfp-inline-block\" />\n <span>{text}</span>\n </motion.div>\n ) : null}\n {/* 始终渲染用于测量的隐藏层 */}\n <div\n ref={innerRef}\n className=\"rfp-whitespace-nowrap\"\n style={overflow ? { position: 'absolute', visibility: 'hidden', pointerEvents: 'none' } : undefined}\n >\n {text}\n </div>\n </div>\n );\n};\n\n/** SVG 唱臂组件 */\nconst Tonearm: React.FC<{ isPlaying: boolean }> = ({ isPlaying }) => (\n <motion.div\n className=\"rfp-absolute\"\n style={{\n top: '-6px',\n right: '2px',\n width: '100px',\n height: '120px',\n transformOrigin: '76px 16px',\n zIndex: 5,\n }}\n animate={{ rotate: isPlaying ? 16 : 0 }}\n transition={{ duration: 0.8, ease: [0.4, 0, 0.2, 1] }}\n >\n <svg\n width=\"100\"\n height=\"120\"\n viewBox=\"0 0 100 120\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {/* 底座阴影 */}\n <circle cx=\"76\" cy=\"16\" r=\"13\" fill=\"rgba(0,0,0,0.3)\" />\n {/* 底座外圈 */}\n <circle cx=\"76\" cy=\"16\" r=\"11\" fill=\"url(#baseGrad)\" />\n {/* 底座内圈 */}\n <circle cx=\"76\" cy=\"16\" r=\"6\" fill=\"url(#baseInnerGrad)\" />\n {/* 底座中心轴 */}\n <circle cx=\"76\" cy=\"16\" r=\"2.5\" fill=\"#222\" stroke=\"#555\" strokeWidth=\"0.5\" />\n\n {/* 臂杆 */}\n <path\n d=\"M74 22 L56 88\"\n stroke=\"url(#armGrad)\"\n strokeWidth=\"3.5\"\n strokeLinecap=\"round\"\n />\n {/* 臂杆高光 */}\n <path\n d=\"M74.8 22 L56.8 88\"\n stroke=\"rgba(255,255,255,0.06)\"\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n />\n\n {/* 唱头座 (Headshell) */}\n <rect x=\"50\" y=\"86\" width=\"12\" height=\"7\" rx=\"1.5\" fill=\"url(#headGrad)\" />\n {/* 唱头 (Cartridge) */}\n <rect x=\"52.5\" y=\"92\" width=\"7\" height=\"9\" rx=\"1\" fill=\"url(#cartridgeGrad)\" />\n {/* 唱针 (Stylus) */}\n <line x1=\"56\" y1=\"101\" x2=\"56\" y2=\"105\" stroke=\"#bbb\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n <circle cx=\"56\" cy=\"105.5\" r=\"0.8\" fill=\"#ddd\" />\n\n {/* 渐变定义 */}\n <defs>\n <radialGradient id=\"baseGrad\" cx=\"40%\" cy=\"35%\">\n <stop offset=\"0%\" stopColor=\"#555\" />\n <stop offset=\"100%\" stopColor=\"#1a1a1a\" />\n </radialGradient>\n <radialGradient id=\"baseInnerGrad\" cx=\"40%\" cy=\"35%\">\n <stop offset=\"0%\" stopColor=\"#666\" />\n <stop offset=\"100%\" stopColor=\"#333\" />\n </radialGradient>\n <linearGradient id=\"armGrad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor=\"#555\" />\n <stop offset=\"50%\" stopColor=\"#444\" />\n <stop offset=\"100%\" stopColor=\"#333\" />\n </linearGradient>\n <linearGradient id=\"headGrad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor=\"#555\" />\n <stop offset=\"100%\" stopColor=\"#333\" />\n </linearGradient>\n <linearGradient id=\"cartridgeGrad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor=\"#444\" />\n <stop offset=\"100%\" stopColor=\"#222\" />\n </linearGradient>\n </defs>\n </svg>\n </motion.div>\n);\n\ninterface AudioRendererProps {\n url: string;\n fileName: string;\n}\n\nexport const AudioRenderer: React.FC<AudioRendererProps> = ({ url, fileName }) => {\n const {\n audioRef,\n isPlaying,\n isLoading,\n isLoop,\n currentTime,\n duration,\n volume,\n isMuted,\n error,\n togglePlay,\n seek,\n skip,\n setVolume,\n toggleMute,\n toggleLoop,\n formatTime,\n } = useAudioPlayer({ url });\n\n const [showVolume, setShowVolume] = useState(false);\n const volumeRef = useRef<HTMLDivElement>(null);\n const volumeTimerRef = useRef<ReturnType<typeof setTimeout>>();\n\n const progress = duration > 0 ? currentTime / duration : 0;\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (volumeRef.current && !volumeRef.current.contains(e.target as Node)) {\n setShowVolume(false);\n }\n };\n if (showVolume) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [showVolume]);\n\n const handleVolumeEnter = () => {\n clearTimeout(volumeTimerRef.current);\n setShowVolume(true);\n };\n\n const handleVolumeLeave = () => {\n volumeTimerRef.current = setTimeout(() => setShowVolume(false), 300);\n };\n\n const VolumeIcon = isMuted || volume === 0 ? VolumeX : volume < 0.5 ? Volume1 : Volume2;\n\n if (error) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-text-white/70 rfp-text-center\">\n <p className=\"rfp-text-lg\">{error}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"rfp-flex rfp-flex-col rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-p-4 md:rfp-p-8 rfp-gap-5 md:rfp-gap-8 rfp-select-none\">\n {/* 唱片机整体 */}\n <div className=\"rfp-relative\" style={{ width: '260px', height: '240px' }}>\n {/* 外圈光晕 */}\n <motion.div\n className=\"rfp-absolute rfp-rounded-full\"\n style={{\n width: '220px',\n height: '220px',\n top: '18px',\n left: '8px',\n background: 'radial-gradient(circle, rgba(129,140,248,0.12) 0%, transparent 70%)',\n }}\n animate={isPlaying ? { scale: [1, 1.08, 1], opacity: [0.5, 1, 0.5] } : { scale: 1, opacity: 0.2 }}\n transition={isPlaying ? { duration: 3, repeat: Infinity, ease: 'easeInOut' } : { duration: 0.5 }}\n />\n\n {/* 唱片主体 */}\n <div\n className=\"rfp-absolute rfp-rounded-full rfp-overflow-hidden\"\n style={{\n width: '200px',\n height: '200px',\n top: '28px',\n left: '18px',\n background: `\n radial-gradient(circle at center, transparent 95%, rgba(30,30,30,0.8) 95.5%, #111 97%),\n radial-gradient(circle at center, transparent 38%, rgba(50,50,50,0.5) 38.15%, transparent 38.4%),\n radial-gradient(circle at center, transparent 45%, rgba(50,50,50,0.3) 45.15%, transparent 45.4%),\n radial-gradient(circle at center, transparent 52%, rgba(50,50,50,0.5) 52.15%, transparent 52.4%),\n radial-gradient(circle at center, transparent 59%, rgba(50,50,50,0.3) 59.15%, transparent 59.4%),\n radial-gradient(circle at center, transparent 66%, rgba(50,50,50,0.5) 66.15%, transparent 66.4%),\n radial-gradient(circle at center, transparent 73%, rgba(50,50,50,0.3) 73.15%, transparent 73.4%),\n radial-gradient(circle at center, transparent 80%, rgba(50,50,50,0.4) 80.15%, transparent 80.4%),\n radial-gradient(circle at center, transparent 87%, rgba(50,50,50,0.3) 87.15%, transparent 87.4%),\n conic-gradient(from 0deg, #1c1c1c, #232323, #1a1a1a, #262626, #1c1c1c, #212121, #1a1a1a, #252525, #1c1c1c, #232323, #1a1a1a, #262626, #1c1c1c)\n `,\n boxShadow: isPlaying\n ? '0 0 36px rgba(129,140,248,0.1), 0 8px 32px rgba(0,0,0,0.4), inset 0 0 20px rgba(0,0,0,0.4)'\n : '0 8px 32px rgba(0,0,0,0.4), inset 0 0 20px rgba(0,0,0,0.4)',\n animation: 'rfp-vinyl-spin 8s linear infinite',\n animationPlayState: isPlaying ? 'running' : 'paused',\n }}\n >\n {/* 中心标签 */}\n <div\n className=\"rfp-absolute rfp-rounded-full\"\n style={{\n width: '34%',\n height: '34%',\n top: '33%',\n left: '33%',\n background: 'radial-gradient(circle at 40% 38%, #818cf8, #6366f1, #4f46e5, #4338ca)',\n boxShadow: 'inset 0 1px 3px rgba(255,255,255,0.25), inset 0 -1px 3px rgba(0,0,0,0.3), 0 0 8px rgba(0,0,0,0.3)',\n }}\n >\n <div\n className=\"rfp-absolute rfp-inset-0 rfp-rounded-full rfp-opacity-20\"\n style={{\n background: `\n radial-gradient(circle at center, transparent 30%, rgba(0,0,0,0.3) 31%, transparent 32%),\n radial-gradient(circle at center, transparent 50%, rgba(0,0,0,0.2) 51%, transparent 52%),\n radial-gradient(circle at center, transparent 70%, rgba(0,0,0,0.3) 71%, transparent 72%),\n radial-gradient(circle at center, transparent 88%, rgba(0,0,0,0.2) 89%, transparent 90%)\n `,\n }}\n />\n <div\n className=\"rfp-absolute rfp-rounded-full\"\n style={{\n width: '14%',\n height: '14%',\n top: '43%',\n left: '43%',\n background: 'radial-gradient(circle at 40% 40%, #333, #0d0d0d)',\n boxShadow: 'inset 0 1px 3px rgba(0,0,0,0.9), 0 0 2px rgba(0,0,0,0.5)',\n }}\n />\n </div>\n\n {isLoading && (\n <motion.div\n className=\"rfp-absolute rfp-inset-0 rfp-rounded-full\"\n style={{ border: '2px solid rgba(129,140,248,0.3)' }}\n animate={{ scale: [1, 1.02, 1], opacity: [0.3, 0.6, 0.3] }}\n transition={{ duration: 1.5, repeat: Infinity }}\n />\n )}\n </div>\n\n {/* 唱臂 */}\n <Tonearm isPlaying={isPlaying} />\n </div>\n\n {/* 文件名 */}\n <div className=\"rfp-text-center rfp-max-w-sm md:rfp-max-w-md rfp-px-4\">\n <MarqueeText text={fileName} className=\"rfp-text-lg md:rfp-text-xl rfp-font-medium rfp-mb-1\" style={{ color: '#e0dff0' }} />\n <p className=\"rfp-text-xs rfp-tracking-widest rfp-uppercase\" style={{ color: 'rgba(129,140,248,0.5)' }}>\n Audio\n </p>\n </div>\n\n {/* 控制面板 */}\n <div\n className=\"rfp-w-full rfp-max-w-sm md:rfp-max-w-md rfp-rounded-2xl rfp-p-4 md:rfp-p-6 rfp-border\"\n style={{\n background: 'rgba(255,255,255,0.04)',\n backdropFilter: 'blur(16px)',\n borderColor: 'rgba(129,140,248,0.12)',\n }}\n >\n {/* 进度条 */}\n <div className=\"rfp-mb-5\">\n <div className=\"rfp-relative rfp-h-4 rfp-flex rfp-items-center\">\n <div className=\"rfp-absolute rfp-w-full rfp-h-[5px] rfp-rounded-full\" style={{ background: 'rgba(255,255,255,0.08)' }} />\n <div\n className=\"rfp-absolute rfp-h-[5px] rfp-rounded-full rfp-pointer-events-none\"\n style={{\n width: `${progress * 100}%`,\n background: 'linear-gradient(90deg, #6366f1, #818cf8)',\n boxShadow: isPlaying ? '0 0 8px rgba(129,140,248,0.4)' : 'none',\n transition: 'width 0.1s linear',\n }}\n />\n <input\n type=\"range\"\n min=\"0\"\n max={duration > 0 ? duration : currentTime || 100}\n step=\"any\"\n value={currentTime}\n onChange={(e) => seek(parseFloat(e.target.value))}\n disabled={duration <= 0}\n aria-label=\"播放进度\"\n className=\"audio-slider rfp-absolute rfp-w-full\"\n />\n </div>\n <div className=\"rfp-flex rfp-justify-between rfp-text-xs rfp-mt-2.5\" style={{ color: 'rgba(129,140,248,0.5)' }}>\n <span style={{ fontVariantNumeric: 'tabular-nums' }}>{formatTime(currentTime)}</span>\n <span style={{ fontVariantNumeric: 'tabular-nums' }}>{duration > 0 ? formatTime(duration) : '--:--'}</span>\n </div>\n </div>\n\n {/* 控制按钮 */}\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-gap-3\">\n {/* 循环 */}\n <motion.button\n onClick={toggleLoop}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.92 }}\n aria-label={isLoop ? '关闭循环' : '开启循环'}\n className=\"rfp-w-9 rfp-h-9 rfp-rounded-full rfp-flex rfp-items-center rfp-justify-center rfp-transition-colors\"\n style={{\n background: isLoop ? 'rgba(129,140,248,0.15)' : 'rgba(255,255,255,0.06)',\n color: isLoop ? '#818cf8' : 'rgba(224,223,240,0.4)',\n }}\n >\n <Repeat className=\"rfp-w-4 rfp-h-4\" />\n </motion.button>\n\n {/* 后退 */}\n <motion.button\n onClick={() => skip(-10)}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.92 }}\n aria-label=\"后退10秒\"\n className=\"rfp-w-10 rfp-h-10 rfp-rounded-full rfp-flex rfp-items-center rfp-justify-center rfp-transition-colors\"\n style={{ background: 'rgba(255,255,255,0.06)', color: 'rgba(224,223,240,0.7)' }}\n >\n <SkipBack className=\"rfp-w-[18px] rfp-h-[18px]\" />\n </motion.button>\n\n {/* 播放/暂停 */}\n <motion.button\n onClick={togglePlay}\n whileHover={{ scale: 1.06 }}\n whileTap={{ scale: 0.94 }}\n aria-label={isPlaying ? '暂停' : '播放'}\n className=\"rfp-w-14 rfp-h-14 rfp-rounded-full rfp-flex rfp-items-center rfp-justify-center\"\n style={{\n background: 'linear-gradient(135deg, #818cf8, #6366f1)',\n color: '#fff',\n boxShadow: '0 4px 20px rgba(99,102,241,0.35)',\n }}\n >\n {isPlaying ? (\n <Pause className=\"rfp-w-6 rfp-h-6\" />\n ) : (\n <Play className=\"rfp-w-6 rfp-h-6 rfp-ml-0.5\" />\n )}\n </motion.button>\n\n {/* 前进 */}\n <motion.button\n onClick={() => skip(10)}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.92 }}\n aria-label=\"前进10秒\"\n className=\"rfp-w-10 rfp-h-10 rfp-rounded-full rfp-flex rfp-items-center rfp-justify-center rfp-transition-colors\"\n style={{ background: 'rgba(255,255,255,0.06)', color: 'rgba(224,223,240,0.7)' }}\n >\n <SkipForward className=\"rfp-w-[18px] rfp-h-[18px]\" />\n </motion.button>\n\n {/* 音量 */}\n <div\n ref={volumeRef}\n className=\"rfp-relative\"\n onMouseEnter={handleVolumeEnter}\n onMouseLeave={handleVolumeLeave}\n >\n <motion.button\n onClick={toggleMute}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.92 }}\n aria-label={isMuted ? '取消静音' : '静音'}\n className=\"rfp-w-9 rfp-h-9 rfp-rounded-full rfp-flex rfp-items-center rfp-justify-center rfp-transition-colors\"\n style={{\n background: showVolume ? 'rgba(129,140,248,0.15)' : 'rgba(255,255,255,0.06)',\n color: 'rgba(129,140,248,0.6)',\n }}\n >\n <VolumeIcon className=\"rfp-w-4 rfp-h-4\" />\n </motion.button>\n\n <AnimatePresence>\n {showVolume && (\n <motion.div\n initial={{ opacity: 0, scale: 0.95 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.95 }}\n transition={{ duration: 0.12 }}\n className=\"rfp-absolute rfp-bottom-full rfp-mb-2 rfp-rounded-xl rfp-p-3 rfp-border\"\n style={{\n left: '50%',\n marginLeft: '-27px',\n background: 'rgba(20,20,20,0.95)',\n backdropFilter: 'blur(16px)',\n borderColor: 'rgba(129,140,248,0.15)',\n }}\n onMouseEnter={handleVolumeEnter}\n onMouseLeave={handleVolumeLeave}\n >\n <div className=\"rfp-flex rfp-flex-col rfp-items-center rfp-gap-2\" style={{ height: '100px' }}>\n <div className=\"rfp-relative rfp-flex rfp-items-center rfp-justify-center\" style={{ width: '24px', height: '80px' }}>\n <div\n className=\"rfp-absolute rfp-rounded-full\"\n style={{ width: '3px', height: '100%', background: 'rgba(255,255,255,0.1)' }}\n />\n <div\n className=\"rfp-absolute rfp-bottom-0 rfp-rounded-full rfp-pointer-events-none\"\n style={{\n width: '3px',\n height: `${(isMuted ? 0 : volume) * 100}%`,\n background: '#818cf8',\n transition: 'height 0.1s linear',\n }}\n />\n <input\n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.01\"\n value={isMuted ? 0 : volume}\n onChange={(e) => setVolume(parseFloat(e.target.value))}\n aria-label=\"音量\"\n className=\"volume-slider-vertical rfp-absolute\"\n style={{\n width: '80px',\n height: '24px',\n transform: 'rotate(-90deg)',\n transformOrigin: 'center center',\n }}\n />\n </div>\n <span className=\"rfp-text-[10px] rfp-tabular-nums\" style={{ color: 'rgba(129,140,248,0.5)' }}>\n {Math.round((isMuted ? 0 : volume) * 100)}\n </span>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </div>\n </div>\n\n <audio ref={audioRef} src={url} className=\"rfp-hidden\" />\n </div>\n );\n};\n","export default {\n \"code[class*=\\\"language-\\\"]\": {\n \"color\": \"#393A34\",\n \"fontFamily\": \"\\\"Consolas\\\", \\\"Bitstream Vera Sans Mono\\\", \\\"Courier New\\\", Courier, monospace\",\n \"direction\": \"ltr\",\n \"textAlign\": \"left\",\n \"whiteSpace\": \"pre\",\n \"wordSpacing\": \"normal\",\n \"wordBreak\": \"normal\",\n \"fontSize\": \".9em\",\n \"lineHeight\": \"1.2em\",\n \"MozTabSize\": \"4\",\n \"OTabSize\": \"4\",\n \"tabSize\": \"4\",\n \"WebkitHyphens\": \"none\",\n \"MozHyphens\": \"none\",\n \"msHyphens\": \"none\",\n \"hyphens\": \"none\"\n },\n \"pre[class*=\\\"language-\\\"]\": {\n \"color\": \"#393A34\",\n \"fontFamily\": \"\\\"Consolas\\\", \\\"Bitstream Vera Sans Mono\\\", \\\"Courier New\\\", Courier, monospace\",\n \"direction\": \"ltr\",\n \"textAlign\": \"left\",\n \"whiteSpace\": \"pre\",\n \"wordSpacing\": \"normal\",\n \"wordBreak\": \"normal\",\n \"fontSize\": \".9em\",\n \"lineHeight\": \"1.2em\",\n \"MozTabSize\": \"4\",\n \"OTabSize\": \"4\",\n \"tabSize\": \"4\",\n \"WebkitHyphens\": \"none\",\n \"MozHyphens\": \"none\",\n \"msHyphens\": \"none\",\n \"hyphens\": \"none\",\n \"padding\": \"1em\",\n \"margin\": \".5em 0\",\n \"overflow\": \"auto\",\n \"border\": \"1px solid #dddddd\",\n \"backgroundColor\": \"white\"\n },\n \"pre > code[class*=\\\"language-\\\"]\": {\n \"fontSize\": \"1em\"\n },\n \"pre[class*=\\\"language-\\\"]::-moz-selection\": {\n \"background\": \"#b3d4fc\"\n },\n \"pre[class*=\\\"language-\\\"] ::-moz-selection\": {\n \"background\": \"#b3d4fc\"\n },\n \"code[class*=\\\"language-\\\"]::-moz-selection\": {\n \"background\": \"#b3d4fc\"\n },\n \"code[class*=\\\"language-\\\"] ::-moz-selection\": {\n \"background\": \"#b3d4fc\"\n },\n \"pre[class*=\\\"language-\\\"]::selection\": {\n \"background\": \"#b3d4fc\"\n },\n \"pre[class*=\\\"language-\\\"] ::selection\": {\n \"background\": \"#b3d4fc\"\n },\n \"code[class*=\\\"language-\\\"]::selection\": {\n \"background\": \"#b3d4fc\"\n },\n \"code[class*=\\\"language-\\\"] ::selection\": {\n \"background\": \"#b3d4fc\"\n },\n \":not(pre) > code[class*=\\\"language-\\\"]\": {\n \"padding\": \".2em\",\n \"paddingTop\": \"1px\",\n \"paddingBottom\": \"1px\",\n \"background\": \"#f8f8f8\",\n \"border\": \"1px solid #dddddd\"\n },\n \"comment\": {\n \"color\": \"#999988\",\n \"fontStyle\": \"italic\"\n },\n \"prolog\": {\n \"color\": \"#999988\",\n \"fontStyle\": \"italic\"\n },\n \"doctype\": {\n \"color\": \"#999988\",\n \"fontStyle\": \"italic\"\n },\n \"cdata\": {\n \"color\": \"#999988\",\n \"fontStyle\": \"italic\"\n },\n \"namespace\": {\n \"Opacity\": \".7\"\n },\n \"string\": {\n \"color\": \"#e3116c\"\n },\n \"attr-value\": {\n \"color\": \"#e3116c\"\n },\n \"punctuation\": {\n \"color\": \"#393A34\"\n },\n \"operator\": {\n \"color\": \"#393A34\"\n },\n \"entity\": {\n \"color\": \"#36acaa\"\n },\n \"url\": {\n \"color\": \"#36acaa\"\n },\n \"symbol\": {\n \"color\": \"#36acaa\"\n },\n \"number\": {\n \"color\": \"#36acaa\"\n },\n \"boolean\": {\n \"color\": \"#36acaa\"\n },\n \"variable\": {\n \"color\": \"#36acaa\"\n },\n \"constant\": {\n \"color\": \"#36acaa\"\n },\n \"property\": {\n \"color\": \"#36acaa\"\n },\n \"regex\": {\n \"color\": \"#36acaa\"\n },\n \"inserted\": {\n \"color\": \"#36acaa\"\n },\n \"atrule\": {\n \"color\": \"#00a4db\"\n },\n \"keyword\": {\n \"color\": \"#00a4db\"\n },\n \"attr-name\": {\n \"color\": \"#00a4db\"\n },\n \".language-autohotkey .token.selector\": {\n \"color\": \"#00a4db\"\n },\n \"function\": {\n \"color\": \"#9a050f\",\n \"fontWeight\": \"bold\"\n },\n \"deleted\": {\n \"color\": \"#9a050f\"\n },\n \".language-autohotkey .token.tag\": {\n \"color\": \"#9a050f\"\n },\n \"tag\": {\n \"color\": \"#00009f\"\n },\n \"selector\": {\n \"color\": \"#00009f\"\n },\n \".language-autohotkey .token.keyword\": {\n \"color\": \"#00009f\"\n },\n \"important\": {\n \"fontWeight\": \"bold\"\n },\n \"bold\": {\n \"fontWeight\": \"bold\"\n },\n \"italic\": {\n \"fontStyle\": \"italic\"\n }\n};","export default {\n \"pre[class*=\\\"language-\\\"]\": {\n \"color\": \"#d4d4d4\",\n \"fontSize\": \"13px\",\n \"textShadow\": \"none\",\n \"fontFamily\": \"Menlo, Monaco, Consolas, \\\"Andale Mono\\\", \\\"Ubuntu Mono\\\", \\\"Courier New\\\", monospace\",\n \"direction\": \"ltr\",\n \"textAlign\": \"left\",\n \"whiteSpace\": \"pre\",\n \"wordSpacing\": \"normal\",\n \"wordBreak\": \"normal\",\n \"lineHeight\": \"1.5\",\n \"MozTabSize\": \"4\",\n \"OTabSize\": \"4\",\n \"tabSize\": \"4\",\n \"WebkitHyphens\": \"none\",\n \"MozHyphens\": \"none\",\n \"msHyphens\": \"none\",\n \"hyphens\": \"none\",\n \"padding\": \"1em\",\n \"margin\": \".5em 0\",\n \"overflow\": \"auto\",\n \"background\": \"#1e1e1e\"\n },\n \"code[class*=\\\"language-\\\"]\": {\n \"color\": \"#d4d4d4\",\n \"fontSize\": \"13px\",\n \"textShadow\": \"none\",\n \"fontFamily\": \"Menlo, Monaco, Consolas, \\\"Andale Mono\\\", \\\"Ubuntu Mono\\\", \\\"Courier New\\\", monospace\",\n \"direction\": \"ltr\",\n \"textAlign\": \"left\",\n \"whiteSpace\": \"pre\",\n \"wordSpacing\": \"normal\",\n \"wordBreak\": \"normal\",\n \"lineHeight\": \"1.5\",\n \"MozTabSize\": \"4\",\n \"OTabSize\": \"4\",\n \"tabSize\": \"4\",\n \"WebkitHyphens\": \"none\",\n \"MozHyphens\": \"none\",\n \"msHyphens\": \"none\",\n \"hyphens\": \"none\"\n },\n \"pre[class*=\\\"language-\\\"]::selection\": {\n \"textShadow\": \"none\",\n \"background\": \"#264F78\"\n },\n \"code[class*=\\\"language-\\\"]::selection\": {\n \"textShadow\": \"none\",\n \"background\": \"#264F78\"\n },\n \"pre[class*=\\\"language-\\\"] *::selection\": {\n \"textShadow\": \"none\",\n \"background\": \"#264F78\"\n },\n \"code[class*=\\\"language-\\\"] *::selection\": {\n \"textShadow\": \"none\",\n \"background\": \"#264F78\"\n },\n \":not(pre) > code[class*=\\\"language-\\\"]\": {\n \"padding\": \".1em .3em\",\n \"borderRadius\": \".3em\",\n \"color\": \"#db4c69\",\n \"background\": \"#1e1e1e\"\n },\n \".namespace\": {\n \"Opacity\": \".7\"\n },\n \"doctype.doctype-tag\": {\n \"color\": \"#569CD6\"\n },\n \"doctype.name\": {\n \"color\": \"#9cdcfe\"\n },\n \"comment\": {\n \"color\": \"#6a9955\"\n },\n \"prolog\": {\n \"color\": \"#6a9955\"\n },\n \"punctuation\": {\n \"color\": \"#d4d4d4\"\n },\n \".language-html .language-css .token.punctuation\": {\n \"color\": \"#d4d4d4\"\n },\n \".language-html .language-javascript .token.punctuation\": {\n \"color\": \"#d4d4d4\"\n },\n \"property\": {\n \"color\": \"#9cdcfe\"\n },\n \"tag\": {\n \"color\": \"#569cd6\"\n },\n \"boolean\": {\n \"color\": \"#569cd6\"\n },\n \"number\": {\n \"color\": \"#b5cea8\"\n },\n \"constant\": {\n \"color\": \"#9cdcfe\"\n },\n \"symbol\": {\n \"color\": \"#b5cea8\"\n },\n \"inserted\": {\n \"color\": \"#b5cea8\"\n },\n \"unit\": {\n \"color\": \"#b5cea8\"\n },\n \"selector\": {\n \"color\": \"#d7ba7d\"\n },\n \"attr-name\": {\n \"color\": \"#9cdcfe\"\n },\n \"string\": {\n \"color\": \"#ce9178\"\n },\n \"char\": {\n \"color\": \"#ce9178\"\n },\n \"builtin\": {\n \"color\": \"#ce9178\"\n },\n \"deleted\": {\n \"color\": \"#ce9178\"\n },\n \".language-css .token.string.url\": {\n \"textDecoration\": \"underline\"\n },\n \"operator\": {\n \"color\": \"#d4d4d4\"\n },\n \"entity\": {\n \"color\": \"#569cd6\"\n },\n \"operator.arrow\": {\n \"color\": \"#569CD6\"\n },\n \"atrule\": {\n \"color\": \"#ce9178\"\n },\n \"atrule.rule\": {\n \"color\": \"#c586c0\"\n },\n \"atrule.url\": {\n \"color\": \"#9cdcfe\"\n },\n \"atrule.url.function\": {\n \"color\": \"#dcdcaa\"\n },\n \"atrule.url.punctuation\": {\n \"color\": \"#d4d4d4\"\n },\n \"keyword\": {\n \"color\": \"#569CD6\"\n },\n \"keyword.module\": {\n \"color\": \"#c586c0\"\n },\n \"keyword.control-flow\": {\n \"color\": \"#c586c0\"\n },\n \"function\": {\n \"color\": \"#dcdcaa\"\n },\n \"function.maybe-class-name\": {\n \"color\": \"#dcdcaa\"\n },\n \"regex\": {\n \"color\": \"#d16969\"\n },\n \"important\": {\n \"color\": \"#569cd6\"\n },\n \"italic\": {\n \"fontStyle\": \"italic\"\n },\n \"class-name\": {\n \"color\": \"#4ec9b0\"\n },\n \"maybe-class-name\": {\n \"color\": \"#4ec9b0\"\n },\n \"console\": {\n \"color\": \"#9cdcfe\"\n },\n \"parameter\": {\n \"color\": \"#9cdcfe\"\n },\n \"interpolation\": {\n \"color\": \"#9cdcfe\"\n },\n \"punctuation.interpolation-punctuation\": {\n \"color\": \"#569cd6\"\n },\n \"variable\": {\n \"color\": \"#9cdcfe\"\n },\n \"imports.maybe-class-name\": {\n \"color\": \"#9cdcfe\"\n },\n \"exports.maybe-class-name\": {\n \"color\": \"#9cdcfe\"\n },\n \"escape\": {\n \"color\": \"#d7ba7d\"\n },\n \"tag.punctuation\": {\n \"color\": \"#808080\"\n },\n \"cdata\": {\n \"color\": \"#808080\"\n },\n \"attr-value\": {\n \"color\": \"#ce9178\"\n },\n \"attr-value.punctuation\": {\n \"color\": \"#ce9178\"\n },\n \"attr-value.punctuation.attr-equals\": {\n \"color\": \"#d4d4d4\"\n },\n \"namespace\": {\n \"color\": \"#4ec9b0\"\n },\n \"pre[class*=\\\"language-javascript\\\"]\": {\n \"color\": \"#9cdcfe\"\n },\n \"code[class*=\\\"language-javascript\\\"]\": {\n \"color\": \"#9cdcfe\"\n },\n \"pre[class*=\\\"language-jsx\\\"]\": {\n \"color\": \"#9cdcfe\"\n },\n \"code[class*=\\\"language-jsx\\\"]\": {\n \"color\": \"#9cdcfe\"\n },\n \"pre[class*=\\\"language-typescript\\\"]\": {\n \"color\": \"#9cdcfe\"\n },\n \"code[class*=\\\"language-typescript\\\"]\": {\n \"color\": \"#9cdcfe\"\n },\n \"pre[class*=\\\"language-tsx\\\"]\": {\n \"color\": \"#9cdcfe\"\n },\n \"code[class*=\\\"language-tsx\\\"]\": {\n \"color\": \"#9cdcfe\"\n },\n \"pre[class*=\\\"language-css\\\"]\": {\n \"color\": \"#ce9178\"\n },\n \"code[class*=\\\"language-css\\\"]\": {\n \"color\": \"#ce9178\"\n },\n \"pre[class*=\\\"language-html\\\"]\": {\n \"color\": \"#d4d4d4\"\n },\n \"code[class*=\\\"language-html\\\"]\": {\n \"color\": \"#d4d4d4\"\n },\n \".language-regex .token.anchor\": {\n \"color\": \"#dcdcaa\"\n },\n \".language-html .token.punctuation\": {\n \"color\": \"#808080\"\n },\n \"pre[class*=\\\"language-\\\"] > code[class*=\\\"language-\\\"]\": {\n \"position\": \"relative\",\n \"zIndex\": \"1\"\n },\n \".line-highlight.line-highlight\": {\n \"background\": \"#f7ebc6\",\n \"boxShadow\": \"inset 5px 0 0 #f7d87c\",\n \"zIndex\": \"0\"\n }\n};","import { useState, useEffect, useCallback } from 'react';\nimport ReactMarkdown from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport { ghcolors } from 'react-syntax-highlighter/dist/esm/styles/prism';\nimport { Copy, Check } from 'lucide-react';\n\ninterface MarkdownRendererProps {\n url: string;\n}\n\nconst CopyButton = ({ text }: { text: string }) => {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // fallback\n const textarea = document.createElement('textarea');\n textarea.value = text;\n document.body.appendChild(textarea);\n textarea.select();\n document.execCommand('copy');\n document.body.removeChild(textarea);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }\n }, [text]);\n\n return (\n <button\n onClick={handleCopy}\n className=\"rfp-absolute rfp-top-2 rfp-right-2 rfp-p-1.5 rfp-rounded-md rfp-bg-gray-100 hover:rfp-bg-gray-200 rfp-text-gray-500 hover:rfp-text-gray-700 rfp-transition-colors rfp-opacity-0 group-hover:rfp-opacity-100 rfp-border rfp-border-gray-200\"\n title={copied ? '已复制' : '复制代码'}\n >\n {copied ? <Check size={14} /> : <Copy size={14} />}\n </button>\n );\n};\n\nexport const MarkdownRenderer: React.FC<MarkdownRendererProps> = ({ url }) => {\n const [content, setContent] = useState<string>('');\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const loadMarkdown = async () => {\n try {\n setLoading(true);\n setError(null);\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error('加载失败');\n }\n const text = await response.text();\n setContent(text);\n } catch (err) {\n setError('Markdown 文件加载失败');\n console.error(err);\n } finally {\n setLoading(false);\n }\n };\n\n loadMarkdown();\n }, [url]);\n\n if (loading) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-white/20 rfp-border-t-white rfp-rounded-full rfp-animate-spin\" />\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-text-white/70 rfp-text-center\">\n <p className=\"rfp-text-lg\">{error}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"rfp-w-full rfp-h-full rfp-overflow-auto rfp-p-4 md:rfp-p-8\">\n <div className=\"rfp-max-w-full md:rfp-max-w-4xl rfp-mx-auto rfp-bg-white\">\n <div className=\"rfp-p-6 md:rfp-p-10\">\n <ReactMarkdown\n remarkPlugins={[remarkGfm]}\n components={{\n code({ node, inline, className, children, ...props }: any) {\n const match = /language-(\\w+)/.exec(className || '');\n const codeString = String(children).replace(/\\n$/, '');\n return !inline && match ? (\n <div className=\"rfp-relative rfp-group rfp-my-4\">\n <div className=\"rfp-flex rfp-items-center rfp-px-4 rfp-py-2 rfp-bg-gray-100 rfp-border rfp-border-gray-200 rfp-rounded-t-md rfp-border-b-0\">\n <span className=\"rfp-text-xs rfp-text-gray-500 rfp-font-mono\">{match[1]}</span>\n </div>\n <CopyButton text={codeString} />\n <SyntaxHighlighter\n style={ghcolors}\n language={match[1]}\n PreTag=\"div\"\n customStyle={{\n margin: 0,\n borderRadius: '0 0 6px 6px',\n border: '1px solid #d1d5db',\n borderTop: 'none',\n fontSize: '13px',\n lineHeight: '1.5',\n }}\n {...props}\n >\n {codeString}\n </SyntaxHighlighter>\n </div>\n ) : (\n <code\n className=\"rfp-bg-gray-100 rfp-px-1.5 rfp-py-0.5 rfp-rounded rfp-text-sm rfp-font-mono rfp-text-gray-800 rfp-border rfp-border-gray-200\"\n {...props}\n >\n {children}\n </code>\n );\n },\n h1: ({ children }) => (\n <h1 className=\"rfp-text-3xl rfp-font-semibold rfp-mb-4 rfp-mt-6 rfp-text-gray-900 first:rfp-mt-0\">\n {children}\n </h1>\n ),\n h2: ({ children }) => (\n <h2 className=\"rfp-text-2xl rfp-font-semibold rfp-mb-3 rfp-mt-8 rfp-text-gray-900\">\n {children}\n </h2>\n ),\n h3: ({ children }) => (\n <h3 className=\"rfp-text-xl rfp-font-semibold rfp-mb-2 rfp-mt-6 rfp-text-gray-900\">{children}</h3>\n ),\n h4: ({ children }) => (\n <h4 className=\"rfp-text-lg rfp-font-semibold rfp-mb-2 rfp-mt-4 rfp-text-gray-900\">{children}</h4>\n ),\n p: ({ children }) => (\n <p className=\"rfp-text-gray-700 rfp-mb-4 rfp-leading-7 rfp-text-base\">{children}</p>\n ),\n a: ({ href, children }) => (\n <a\n href={href}\n className=\"rfp-text-blue-600 hover:rfp-text-blue-800 rfp-underline rfp-decoration-blue-300 hover:rfp-decoration-blue-500\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {children}\n </a>\n ),\n ul: ({ children }) => (\n <ul className=\"rfp-list-disc rfp-pl-6 rfp-mb-4 rfp-text-gray-700 rfp-space-y-1\">{children}</ul>\n ),\n ol: ({ children }) => (\n <ol className=\"rfp-list-decimal rfp-pl-6 rfp-mb-4 rfp-text-gray-700 rfp-space-y-1\">{children}</ol>\n ),\n li: ({ children }) => <li className=\"rfp-leading-7\">{children}</li>,\n blockquote: ({ children }) => (\n <blockquote className=\"rfp-border-l-4 rfp-border-gray-300 rfp-pl-4 rfp-text-gray-600 rfp-my-4 rfp-italic\">\n {children}\n </blockquote>\n ),\n table: ({ children }) => (\n <div className=\"rfp-overflow-x-auto rfp-my-4 rfp-rounded-md rfp-border rfp-border-gray-200\">\n <table className=\"rfp-min-w-full rfp-divide-y rfp-divide-gray-200\">{children}</table>\n </div>\n ),\n thead: ({ children }) => <thead className=\"rfp-bg-gray-50\">{children}</thead>,\n tbody: ({ children }) => (\n <tbody className=\"rfp-divide-y rfp-divide-gray-200 rfp-bg-white\">{children}</tbody>\n ),\n tr: ({ children }) => (\n <tr className=\"hover:rfp-bg-gray-50 rfp-transition-colors\">{children}</tr>\n ),\n th: ({ children }) => (\n <th className=\"rfp-px-4 rfp-py-3 rfp-text-left rfp-text-xs rfp-font-semibold rfp-text-gray-600 rfp-uppercase rfp-tracking-wider\">\n {children}\n </th>\n ),\n td: ({ children }) => (\n <td className=\"rfp-px-4 rfp-py-3 rfp-text-sm rfp-text-gray-700\">{children}</td>\n ),\n hr: () => <hr className=\"rfp-border-gray-200 rfp-my-6\" />,\n img: ({ src, alt }) => (\n <img\n src={src}\n alt={alt}\n className=\"rfp-rounded-md rfp-max-w-full rfp-h-auto rfp-my-4 rfp-mx-auto rfp-block rfp-shadow-sm\"\n />\n ),\n input: ({ type, checked, ...props }) => {\n if (type === 'checkbox') {\n return (\n <input\n type=\"checkbox\"\n checked={checked}\n readOnly\n className=\"rfp-mr-2 rfp-rounded rfp-border-gray-300\"\n {...props}\n />\n );\n }\n return <input type={type} {...props} />;\n },\n strong: ({ children }) => (\n <strong className=\"rfp-font-semibold rfp-text-gray-900\">{children}</strong>\n ),\n em: ({ children }) => <em className=\"rfp-italic\">{children}</em>,\n del: ({ children }) => (\n <del className=\"rfp-text-gray-400 rfp-line-through\">{children}</del>\n ),\n }}\n >\n {content}\n </ReactMarkdown>\n </div>\n </div>\n </div>\n );\n};\n","import { useState, useEffect } from 'react';\nimport { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport { vscDarkPlus } from 'react-syntax-highlighter/dist/esm/styles/prism';\nimport { FileText } from 'lucide-react';\n\ninterface TextRendererProps {\n url: string;\n fileName: string;\n}\n\nconst getLanguageFromFileName = (fileName: string): string => {\n const ext = fileName.split('.').pop()?.toLowerCase() || '';\n const languageMap: Record<string, string> = {\n js: 'javascript',\n jsx: 'jsx',\n ts: 'typescript',\n tsx: 'tsx',\n py: 'python',\n java: 'java',\n cpp: 'cpp',\n c: 'c',\n cs: 'csharp',\n php: 'php',\n rb: 'ruby',\n go: 'go',\n rs: 'rust',\n swift: 'swift',\n kt: 'kotlin',\n scala: 'scala',\n sh: 'bash',\n bash: 'bash',\n zsh: 'bash',\n json: 'json',\n xml: 'xml',\n html: 'html',\n css: 'css',\n scss: 'scss',\n sass: 'sass',\n less: 'less',\n sql: 'sql',\n yaml: 'yaml',\n yml: 'yaml',\n toml: 'toml',\n ini: 'ini',\n conf: 'nginx',\n md: 'markdown',\n txt: 'text',\n };\n return languageMap[ext] || 'text';\n};\n\nexport const TextRenderer: React.FC<TextRendererProps> = ({ url, fileName }) => {\n const [content, setContent] = useState<string>('');\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const language = getLanguageFromFileName(fileName);\n\n useEffect(() => {\n const loadText = async () => {\n try {\n setLoading(true);\n setError(null);\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error('加载失败');\n }\n const text = await response.text();\n setContent(text);\n } catch (err) {\n setError('文本文件加载失败');\n console.error(err);\n } finally {\n setLoading(false);\n }\n };\n\n loadText();\n }, [url]);\n\n if (loading) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-w-12 rfp-h-12 rfp-border-4 rfp-border-white/20 rfp-border-t-white rfp-rounded-full rfp-animate-spin\" />\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"rfp-flex rfp-items-center rfp-justify-center rfp-w-full rfp-h-full\">\n <div className=\"rfp-text-white/70 rfp-text-center\">\n <p className=\"rfp-text-lg\">{error}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"rfp-w-full rfp-h-full rfp-overflow-auto rfp-p-4 md:rfp-p-8\">\n <div className=\"rfp-max-w-full md:rfp-max-w-6xl rfp-mx-auto rfp-bg-white/5 rfp-backdrop-blur-sm rfp-rounded-2xl rfp-border rfp-border-white/10 rfp-overflow-hidden\">\n {/* 文件头部 */}\n <div className=\"rfp-flex rfp-items-center rfp-gap-2 md:rfp-gap-3 rfp-px-4 rfp-py-3 md:rfp-px-6 md:rfp-py-4 rfp-bg-white/5 rfp-border-b rfp-border-white/10\">\n <FileText className=\"rfp-w-4 rfp-h-4 md:rfp-w-5 md:rfp-h-5 rfp-text-white/70 rfp-flex-shrink-0\" />\n <span className=\"rfp-text-white rfp-font-medium rfp-text-sm md:rfp-text-base rfp-truncate\">{fileName}</span>\n <span className=\"rfp-ml-auto rfp-text-xs rfp-text-white/50 rfp-uppercase rfp-flex-shrink-0\">{language}</span>\n </div>\n\n {/* 代码内容 */}\n <div className=\"rfp-text-sm\">\n {language === 'text' ? (\n <pre className=\"rfp-p-6 rfp-text-white/90 rfp-font-mono rfp-whitespace-pre-wrap rfp-break-words\">\n {content}\n </pre>\n ) : (\n <SyntaxHighlighter\n language={language}\n style={vscDarkPlus}\n showLineNumbers\n customStyle={{\n margin: 0,\n padding: '1.5rem',\n background: 'transparent',\n fontSize: '0.875rem',\n }}\n lineNumberStyle={{\n minWidth: '3em',\n paddingRight: '1em',\n color: 'rgba(255, 255, 255, 0.3)',\n userSelect: 'none',\n }}\n >\n {content}\n </SyntaxHighlighter>\n )}\n </div>\n </div>\n </div>\n );\n};\n","import { FileQuestion, Download } from 'lucide-react';\n\ninterface UnsupportedRendererProps {\n fileName: string;\n fileType: string;\n onDownload: () => void;\n}\n\nexport const UnsupportedRenderer: React.FC<UnsupportedRendererProps> = ({\n fileName,\n fileType,\n onDownload,\n}) => {\n return (\n <div className=\"rfp-flex rfp-flex-col rfp-items-center rfp-justify-center rfp-w-full rfp-h-full rfp-p-8 rfp-gap-6\">\n <div className=\"rfp-w-32 rfp-h-32 rfp-rounded-full rfp-bg-white/10 rfp-flex rfp-items-center rfp-justify-center\">\n <FileQuestion className=\"rfp-w-16 rfp-h-16 rfp-text-white/70\" />\n </div>\n\n <div className=\"rfp-text-white rfp-text-center\">\n <p className=\"rfp-text-xl rfp-font-medium rfp-mb-2\">{fileName}</p>\n <p className=\"rfp-text-white/70\">不支持预览此文件类型 ({fileType})</p>\n </div>\n\n <button\n onClick={onDownload}\n className=\"rfp-flex rfp-items-center rfp-gap-2 rfp-px-6 rfp-py-3 rfp-bg-white/10 hover:rfp-bg-white/20 rfp-backdrop-blur-sm rfp-rounded-lg rfp-text-white rfp-font-medium rfp-transition-all\"\n >\n <Download className=\"rfp-w-5 rfp-h-5\" />\n 下载文件查看\n </button>\n </div>\n );\n};\n","import { useState, useEffect, useCallback, useMemo, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport {\n X,\n ZoomIn,\n ZoomOut,\n RotateCw,\n RotateCcw,\n Download,\n ChevronLeft,\n ChevronRight,\n Scan,\n RefreshCw,\n} from 'lucide-react';\n\nconst OriginalSizeIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <text x=\"12\" y=\"17.5\" textAnchor=\"middle\" fontSize=\"20\" fontWeight=\"bold\" fill=\"currentColor\" stroke=\"none\">\n 1:1\n </text>\n </svg>\n);\nimport { PreviewFile, PreviewFileInput, FileType, CustomRenderer } from './types';\nimport { normalizeFiles } from './utils/fileNormalizer';\nimport { ImageRenderer } from './renderers/ImageRenderer';\nimport { PdfRenderer } from './renderers/PdfRenderer';\nimport { DocxRenderer } from './renderers/DocxRenderer';\nimport { XlsxRenderer } from './renderers/XlsxRenderer';\nimport { PptxRenderer } from './renderers/PptxRenderer';\nimport { MsgRenderer } from './renderers/MsgRenderer';\nimport { VideoRenderer } from './renderers/VideoRenderer';\nimport { AudioRenderer } from './renderers/AudioRenderer';\nimport { MarkdownRenderer } from './renderers/MarkdownRenderer';\nimport { TextRenderer } from './renderers/TextRenderer';\nimport { UnsupportedRenderer } from './renderers/UnsupportedRenderer';\n\ninterface FilePreviewModalProps {\n files: PreviewFileInput[];\n currentIndex: number;\n isOpen: boolean;\n onClose: () => void;\n onNavigate?: (index: number) => void;\n customRenderers?: CustomRenderer[];\n}\n\nconst getFileType = (file: PreviewFile): FileType => {\n const ext = file.name.split('.').pop()?.toLowerCase() || '';\n const mimeType = file.type.toLowerCase();\n\n if (mimeType.startsWith('image/') || ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg'].includes(ext)) {\n return 'image';\n }\n if (mimeType.includes('pdf') || ext === 'pdf') {\n return 'pdf';\n }\n if (mimeType.includes('wordprocessingml') || ext === 'docx') {\n return 'docx';\n }\n if (mimeType.includes('spreadsheetml') || ext === 'xlsx') {\n return 'xlsx';\n }\n if (mimeType.includes('presentationml') || ext === 'pptx' || ext === 'ppt') {\n return 'pptx';\n }\n if (mimeType.includes('ms-outlook') || ext === 'msg') {\n return 'msg';\n }\n if (mimeType.startsWith('video/') || ['mp4', 'webm', 'ogg', 'ogv', 'mov', 'avi', 'mkv', 'm4v', '3gp', 'flv'].includes(ext)) {\n return 'video';\n }\n if (mimeType.startsWith('audio/') || ['mp3', 'wav', 'ogg', 'm4a', 'flac', 'aac'].includes(ext)) {\n return 'audio';\n }\n if (ext === 'md' || ext === 'markdown') {\n return 'markdown';\n }\n // 文本文件和代码文件\n const textExtensions = [\n 'txt', 'log', 'csv',\n 'js', 'jsx', 'ts', 'tsx', 'json',\n 'py', 'java', 'cpp', 'c', 'h', 'cs', 'php', 'rb', 'go', 'rs', 'swift', 'kt',\n 'html', 'css', 'scss', 'sass', 'less',\n 'xml', 'yaml', 'yml', 'toml', 'ini', 'conf',\n 'sh', 'bash', 'zsh', 'sql',\n ];\n if (mimeType.startsWith('text/') || textExtensions.includes(ext)) {\n return 'text';\n }\n return 'unsupported';\n};\n\nexport const FilePreviewModal: React.FC<FilePreviewModalProps> = ({\n files,\n currentIndex,\n isOpen,\n onClose,\n onNavigate,\n customRenderers = [],\n}) => {\n const [zoom, setZoom] = useState(1);\n const [rotation, setRotation] = useState(0);\n const [currentPage, setCurrentPage] = useState(1);\n const [, setTotalPages] = useState(1); // PDF 总页数,由 PdfRenderer 更新\n const [contentNaturalWidth, setContentNaturalWidth] = useState(0); // 内容原始宽度\n const [contentNaturalHeight, setContentNaturalHeight] = useState(0); // 内容原始高度\n const contentRef = useRef<HTMLDivElement>(null);\n\n // 导航箭头自动隐藏\n const [navVisible, setNavVisible] = useState(true);\n const navHideTimerRef = useRef<number | null>(null);\n const NAV_HIDE_DELAY = 2000;\n\n const resetNavTimer = useCallback(() => {\n setNavVisible(true);\n if (navHideTimerRef.current) {\n clearTimeout(navHideTimerRef.current);\n }\n navHideTimerRef.current = window.setTimeout(() => {\n setNavVisible(false);\n }, NAV_HIDE_DELAY);\n }, []);\n\n const handleMouseMove = useCallback(() => {\n resetNavTimer();\n }, [resetNavTimer]);\n\n // 标准化文件输入\n const normalizedFiles = useMemo(() => normalizeFiles(files), [files]);\n\n const currentFile = normalizedFiles[currentIndex];\n\n // 检查是否有自定义渲染器匹配当前文件\n const customRenderer = useMemo(() => {\n if (!currentFile) return null;\n return customRenderers.find(renderer => renderer.test(currentFile));\n }, [currentFile, customRenderers]);\n\n const fileType = currentFile ? getFileType(currentFile) : 'unsupported';\n\n // 重置状态当文件改变时\n useEffect(() => {\n setZoom(1);\n setRotation(0);\n setCurrentPage(1);\n setTotalPages(1);\n setContentNaturalWidth(0);\n setContentNaturalHeight(0);\n setNavVisible(true);\n if (navHideTimerRef.current) {\n clearTimeout(navHideTimerRef.current);\n }\n }, [currentIndex]);\n\n // 导航箭头自动隐藏计时器启动 & 清理\n useEffect(() => {\n if (isOpen && normalizedFiles.length > 1) {\n resetNavTimer();\n }\n return () => {\n if (navHideTimerRef.current) {\n clearTimeout(navHideTimerRef.current);\n }\n };\n }, [isOpen, normalizedFiles.length, resetNavTimer]);\n\n // 键盘导航\n // 锁定 body 滚动\n useEffect(() => {\n if (isOpen) {\n // 保存原始的 overflow 值\n const originalOverflow = document.body.style.overflow;\n const originalPaddingRight = document.body.style.paddingRight;\n\n // 获取滚动条宽度\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n\n // 锁定滚动并补偿滚动条宽度\n document.body.style.overflow = 'hidden';\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n }\n\n return () => {\n // 恢复原始值\n document.body.style.overflow = originalOverflow;\n document.body.style.paddingRight = originalPaddingRight;\n };\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (!isOpen) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onClose();\n } else if (e.key === 'ArrowLeft' && currentIndex > 0) {\n onNavigate?.(currentIndex - 1);\n } else if (e.key === 'ArrowRight' && currentIndex < normalizedFiles.length - 1) {\n onNavigate?.(currentIndex + 1);\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, currentIndex, normalizedFiles.length, onClose, onNavigate]);\n\n const handleZoomIn = useCallback(() => {\n setZoom((prev) => Math.min(prev + 0.1, 10));\n }, []);\n\n const handleZoomOut = useCallback(() => {\n setZoom((prev) => Math.max(prev - 0.1, 0.01));\n }, []);\n\n const handleRotate = useCallback(() => {\n setRotation((prev) => prev + 90);\n }, []);\n\n const handleRotateLeft = useCallback(() => {\n setRotation((prev) => prev - 90);\n }, []);\n\n const handleFitToWidth = useCallback(() => {\n if (contentRef.current && contentNaturalWidth > 0 && contentNaturalHeight > 0) {\n const containerWidth = contentRef.current.clientWidth;\n const containerHeight = contentRef.current.clientHeight;\n const scaleX = containerWidth / contentNaturalWidth;\n const scaleY = containerHeight / contentNaturalHeight;\n const newZoom = Math.min(scaleX, scaleY);\n setZoom(Math.max(0.01, Math.min(10, newZoom)));\n } else {\n setZoom(1);\n }\n setRotation(0);\n }, [contentNaturalWidth, contentNaturalHeight]);\n\n const handleOriginalSize = useCallback(() => {\n setZoom(1);\n }, []);\n\n const handleZoomChange = useCallback((newZoom: number) => {\n setZoom(newZoom);\n }, []);\n\n const handleReset = useCallback(() => {\n setZoom(1);\n setRotation(0);\n }, []);\n\n const handleDownload = useCallback(() => {\n if (!currentFile) return;\n const link = document.createElement('a');\n link.href = currentFile.url;\n link.download = currentFile.name;\n link.click();\n }, [currentFile]);\n\n if (!isOpen || !currentFile) return null;\n\n const showZoomControls = fileType === 'image' || fileType === 'pdf';\n const showRotateControl = fileType === 'image';\n\n const modalContent = (\n <div className=\"rfp-root\">\n <AnimatePresence>\n {isOpen && (\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"rfp-fixed rfp-inset-0 rfp-z-[9999] rfp-flex rfp-items-center rfp-justify-center rfp-bg-black/80 rfp-backdrop-blur-md rfp-overflow-hidden\"\n onClick={onClose}\n onWheel={(e) => e.stopPropagation()}\n >\n {/* 主内容区域 */}\n <div\n className=\"rfp-relative rfp-w-full rfp-h-full rfp-flex rfp-flex-col rfp-overflow-hidden\"\n onClick={(e) => e.stopPropagation()}\n >\n {/* 顶部工具栏 - 全屏融合式 */}\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"rfp-flex-shrink-0 rfp-z-10 rfp-bg-black/50 rfp-backdrop-blur-md rfp-border-b rfp-border-white/10\"\n style={{ paddingTop: 'env(safe-area-inset-top, 0px)' }}\n >\n {/* 第一行:文件名 + 分页 + 关闭/下载(移动端右侧)/ 全部按钮(桌面端) */}\n <div className=\"rfp-flex rfp-items-center rfp-justify-between rfp-px-3 md:rfp-px-5 rfp-py-1.5 md:rfp-py-2.5\">\n {/* 左侧:文件名 + 分页 */}\n <div className=\"rfp-flex rfp-items-center rfp-flex-1 rfp-min-w-0 rfp-mr-2 md:rfp-mr-3\">\n <h2 className=\"rfp-text-white/90 rfp-font-medium rfp-text-xs md:rfp-text-sm rfp-truncate\">\n {currentFile.name}\n </h2>\n <span className=\"rfp-text-white/40 rfp-text-xs rfp-ml-2 rfp-flex-shrink-0\">\n {currentIndex + 1}/{normalizedFiles.length}\n </span>\n </div>\n\n {/* 移动端:仅显示下载+关闭 */}\n <div className=\"rfp-flex rfp-items-center rfp-gap-1 md:rfp-hidden rfp-flex-shrink-0\">\n <ToolbarButton\n icon={<Download className=\"rfp-w-4 rfp-h-4\" />}\n label=\"下载\"\n onClick={handleDownload}\n />\n <ToolbarButton\n icon={<X className=\"rfp-w-4 rfp-h-4\" />}\n label=\"关闭\"\n onClick={onClose}\n />\n </div>\n\n {/* 桌面端:所有工具按钮 */}\n <div className=\"rfp-hidden md:rfp-flex rfp-items-center rfp-gap-1 rfp-flex-shrink-0\">\n {showZoomControls && (\n <>\n <ToolbarButton\n icon={<ZoomOut className=\"rfp-w-4 rfp-h-4\" />}\n label=\"缩小\"\n onClick={handleZoomOut}\n disabled={zoom <= 0.01}\n />\n <span className=\"rfp-text-white/60 rfp-text-xs rfp-min-w-[3rem] rfp-text-center rfp-font-medium rfp-tabular-nums\">\n {Math.round(zoom * 100)}%\n </span>\n <ToolbarButton\n icon={<ZoomIn className=\"rfp-w-4 rfp-h-4\" />}\n label=\"放大\"\n onClick={handleZoomIn}\n disabled={zoom >= 10}\n />\n <div className=\"rfp-w-px rfp-h-4 rfp-bg-white/10 rfp-mx-1\" />\n {fileType === 'image' && (\n <>\n <ToolbarButton\n icon={<Scan className=\"rfp-w-4 rfp-h-4\" />}\n label=\"适应窗口\"\n onClick={handleFitToWidth}\n />\n <ToolbarButton\n icon={<OriginalSizeIcon className=\"rfp-w-4 rfp-h-4\" />}\n label=\"原始尺寸\"\n onClick={handleOriginalSize}\n />\n <div className=\"rfp-w-px rfp-h-4 rfp-bg-white/10 rfp-mx-1\" />\n </>\n )}\n </>\n )}\n\n {showRotateControl && (\n <>\n <ToolbarButton\n icon={<RotateCcw className=\"rfp-w-4 rfp-h-4\" />}\n label=\"向左旋转\"\n onClick={handleRotateLeft}\n />\n <ToolbarButton\n icon={<RotateCw className=\"rfp-w-4 rfp-h-4\" />}\n label=\"向右旋转\"\n onClick={handleRotate}\n />\n <div className=\"rfp-w-px rfp-h-4 rfp-bg-white/10 rfp-mx-1\" />\n </>\n )}\n\n {(showZoomControls || showRotateControl) && (\n <>\n <ToolbarButton\n icon={<RefreshCw className=\"rfp-w-4 rfp-h-4\" />}\n label=\"复原\"\n onClick={handleReset}\n />\n <div className=\"rfp-w-px rfp-h-4 rfp-bg-white/10 rfp-mx-1\" />\n </>\n )}\n\n <ToolbarButton\n icon={<Download className=\"rfp-w-4 rfp-h-4\" />}\n label=\"下载\"\n onClick={handleDownload}\n />\n <ToolbarButton\n icon={<X className=\"rfp-w-4 rfp-h-4\" />}\n label=\"关闭\"\n onClick={onClose}\n />\n </div>\n </div>\n\n {/* 第二行:移动端工具按钮(仅 image/pdf 显示) */}\n {(showZoomControls || showRotateControl) && (\n <div className=\"rfp-flex rfp-items-center rfp-gap-1 rfp-px-3 rfp-pb-1.5 rfp-overflow-x-auto scrollbar-hide md:rfp-hidden\">\n {showZoomControls && (\n <>\n <ToolbarButton\n icon={<ZoomOut className=\"rfp-w-4 rfp-h-4\" />}\n label=\"缩小\"\n onClick={handleZoomOut}\n disabled={zoom <= 0.01}\n />\n <span className=\"rfp-text-white/60 rfp-text-xs rfp-min-w-[3rem] rfp-text-center rfp-font-medium rfp-tabular-nums\">\n {Math.round(zoom * 100)}%\n </span>\n <ToolbarButton\n icon={<ZoomIn className=\"rfp-w-4 rfp-h-4\" />}\n label=\"放大\"\n onClick={handleZoomIn}\n disabled={zoom >= 10}\n />\n <div className=\"rfp-w-px rfp-h-4 rfp-bg-white/10 rfp-mx-0.5\" />\n {fileType === 'image' && (\n <>\n <ToolbarButton\n icon={<Scan className=\"rfp-w-4 rfp-h-4\" />}\n label=\"适应窗口\"\n onClick={handleFitToWidth}\n />\n <ToolbarButton\n icon={<OriginalSizeIcon className=\"rfp-w-4 rfp-h-4\" />}\n label=\"原始尺寸\"\n onClick={handleOriginalSize}\n />\n <div className=\"rfp-w-px rfp-h-4 rfp-bg-white/10 rfp-mx-0.5\" />\n </>\n )}\n </>\n )}\n\n {showRotateControl && (\n <>\n <ToolbarButton\n icon={<RotateCcw className=\"rfp-w-4 rfp-h-4\" />}\n label=\"向左旋转\"\n onClick={handleRotateLeft}\n />\n <ToolbarButton\n icon={<RotateCw className=\"rfp-w-4 rfp-h-4\" />}\n label=\"向右旋转\"\n onClick={handleRotate}\n />\n <div className=\"rfp-w-px rfp-h-4 rfp-bg-white/10 rfp-mx-0.5\" />\n </>\n )}\n\n <ToolbarButton\n icon={<RefreshCw className=\"rfp-w-4 rfp-h-4\" />}\n label=\"复原\"\n onClick={handleReset}\n />\n </div>\n )}\n </motion.div>\n\n {/* 内容区域 */}\n <div\n ref={contentRef}\n className=\"rfp-flex-1 rfp-flex rfp-items-center rfp-justify-center rfp-overflow-auto\"\n onMouseMove={handleMouseMove}\n >\n {customRenderer ? (\n // 使用自定义渲染器\n customRenderer.render(currentFile)\n ) : (\n <>\n {fileType === 'image' && (\n <ImageRenderer\n url={currentFile.url}\n zoom={zoom}\n rotation={rotation}\n onZoomChange={handleZoomChange}\n onNaturalWidthChange={setContentNaturalWidth}\n onNaturalHeightChange={setContentNaturalHeight}\n />\n )}\n {fileType === 'pdf' && (\n <PdfRenderer\n url={currentFile.url}\n zoom={zoom}\n currentPage={currentPage}\n onPageChange={setCurrentPage}\n onTotalPagesChange={setTotalPages}\n onPageWidthChange={setContentNaturalWidth}\n />\n )}\n {fileType === 'docx' && <DocxRenderer url={currentFile.url} />}\n {fileType === 'xlsx' && <XlsxRenderer url={currentFile.url} />}\n {fileType === 'pptx' && <PptxRenderer url={currentFile.url} />}\n {fileType === 'msg' && <MsgRenderer url={currentFile.url} />}\n {fileType === 'video' && <VideoRenderer url={currentFile.url} />}\n {fileType === 'audio' && (\n <AudioRenderer url={currentFile.url} fileName={currentFile.name} />\n )}\n {fileType === 'markdown' && <MarkdownRenderer url={currentFile.url} />}\n {fileType === 'text' && (\n <TextRenderer url={currentFile.url} fileName={currentFile.name} />\n )}\n {fileType === 'unsupported' && (\n <UnsupportedRenderer\n fileName={currentFile.name}\n fileType={currentFile.type}\n onDownload={handleDownload}\n />\n )}\n </>\n )}\n </div>\n\n {/* 左右导航箭头 - 自动隐藏 */}\n {normalizedFiles.length > 1 && (\n <>\n {currentIndex > 0 && (\n <motion.button\n initial={{ opacity: 0 }}\n animate={{ opacity: navVisible ? 1 : 0, x: navVisible ? 0 : -20 }}\n transition={{ duration: 0.2 }}\n onClick={() => onNavigate?.(currentIndex - 1)}\n onMouseEnter={() => setNavVisible(true)}\n style={{ pointerEvents: navVisible ? 'auto' : 'none' }}\n className=\"rfp-absolute rfp-z-20 rfp-left-2 md:rfp-left-4 rfp-top-1/2 -rfp-translate-y-1/2 rfp-w-10 rfp-h-10 md:rfp-w-12 md:rfp-h-12 rfp-rounded-full rfp-bg-black/40 rfp-backdrop-blur-xl rfp-border rfp-border-white/10 rfp-flex rfp-items-center rfp-justify-center rfp-text-white hover:rfp-bg-black/60 rfp-transition-colors rfp-shadow-2xl\"\n >\n <ChevronLeft className=\"rfp-w-5 rfp-h-5 md:rfp-w-6 md:rfp-h-6\" />\n </motion.button>\n )}\n\n {currentIndex < normalizedFiles.length - 1 && (\n <motion.button\n initial={{ opacity: 0 }}\n animate={{ opacity: navVisible ? 1 : 0, x: navVisible ? 0 : 20 }}\n transition={{ duration: 0.2 }}\n onClick={() => onNavigate?.(currentIndex + 1)}\n onMouseEnter={() => setNavVisible(true)}\n style={{ pointerEvents: navVisible ? 'auto' : 'none' }}\n className=\"rfp-absolute rfp-z-20 rfp-right-2 md:rfp-right-4 rfp-top-1/2 -rfp-translate-y-1/2 rfp-w-10 rfp-h-10 md:rfp-w-12 md:rfp-h-12 rfp-rounded-full rfp-bg-black/40 rfp-backdrop-blur-xl rfp-border rfp-border-white/10 rfp-flex rfp-items-center rfp-justify-center rfp-text-white hover:rfp-bg-black/60 rfp-transition-colors rfp-shadow-2xl\"\n >\n <ChevronRight className=\"rfp-w-5 rfp-h-5 md:rfp-w-6 md:rfp-h-6\" />\n </motion.button>\n )}\n </>\n )}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n\n // 使用 Portal 将模态框渲染到 document.body\n return createPortal(modalContent, document.body);\n};\n\n// 工具栏按钮组件\ninterface ToolbarButtonProps {\n icon: React.ReactNode;\n label: string;\n onClick: () => void;\n disabled?: boolean;\n}\n\nconst ToolbarButton: React.FC<ToolbarButtonProps> = ({ icon, label, onClick, disabled }) => {\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n title={label}\n className={`rfp-p-2 md:rfp-p-1.5 rfp-rounded-md rfp-transition-all ${disabled\n ? 'rfp-text-white/30 rfp-cursor-not-allowed'\n : 'rfp-text-white hover:rfp-bg-white/10 active:rfp-bg-white/20'\n }`}\n >\n {icon}\n </button>\n );\n};\n","// 导入样式\nimport './index.css';\n\n// 导入版本号\nimport packageJson from '../package.json';\n\n// 导出版本号\nexport const VERSION = packageJson.version;\n\n// 导出主组件\nexport { FilePreviewModal } from './FilePreviewModal';\n\n// 导出类型定义\nexport type {\n PreviewFile,\n PreviewFileLink,\n PreviewFileInput,\n FileType,\n ToolbarAction,\n PreviewState,\n CustomRenderer,\n} from './types';\n\n// 导出工具函数\nexport { normalizeFile, normalizeFiles } from './utils/fileNormalizer';\n\n// 导出 PDF.js 配置函数和类型\nexport { configurePdfjs, pdfjs } from './utils/pdfConfig';\nexport type { PdfConfigOptions } from './utils/pdfConfig';\n\n"],"names":["getFileNameFromUrl","url","fileName","inferMimeType","ext","_a","normalizeFile","input","index","normalizeFiles","inputs","ImageRenderer","zoom","rotation","onZoomChange","onNaturalWidthChange","onNaturalHeightChange","loaded","setLoaded","useState","error","setError","position","setPosition","isDragging","setIsDragging","dragStart","setDragStart","internalZoom","setInternalZoom","imgRef","useRef","containerRef","useEffect","handleLoad","e","img","handleError","handleDoubleClick","handleWheel","useCallback","delta","prev","newZoom","handleMouseDown","handleMouseMove","handleMouseUp","jsxs","jsx","motion","configurePdfjs","options","workerSrc","pdfjs","cMapUrl","cMapPacked","PdfRenderer","currentPage","onPageChange","onTotalPagesChange","onPageWidthChange","numPages","setNumPages","pageRefs","onDocumentLoadSuccess","onDocumentLoadError","handleScroll","container","scrollTop","containerHeight","scrollCenter","currentVisiblePage","minDistance","pageElement","pageNumber","rect","containerRect","pageCenter","distance","setPageRef","element","Document","_","el","Page","page","PAGE_HEIGHT","PAGE_PADDING_Y","PAGE_PADDING_X","PAGE_CONTENT_HEIGHT","PAGE_GAP","contentStyle","DocxRenderer","html","setHtml","loading","setLoading","pages","setPages","measureRef","response","arrayBuffer","result","mammoth","err","paginate","children","currentPageUsed","child","h","blocks","pageHtml","i","Element","tag","className","key","value","eventNames","handler","fen","oen","eventName","evt","k","offsetTop","offsetLeft","offsetHeight","offsetWidth","v","eles","ele","arg","name","cls","flag","content","keys","alphabets","stringAt","str","cindex","last","indexAt","ret","exponet","expr2xy","src","x","y","xy2expr","expr2expr","xn","yn","condition","CellRange","sri","sci","eri","eci","w","args","ri","ci","cb","rowFilter","j","other","addRet","dsr","dsc","der","dec","ref","refs","Selector$1","Scroll","History","data","currentd","undoItems","redoItems","Clipboard","cellRange","Filter","operator","Sort","order","AutoFilter","filters","sort","it","filter","getCell","rset","fset","cell","ctext","m","cnt","r","Merges","d","cr","type","n","cbWithin","range","rn","cn","it1","merges","merge","cloneDeep","obj","mergeDeep","object","sources","source","equals","obj1","obj2","v1","v2","ai","sum","objOrAry","total","size","deleteProperty","property","oldv","rangeReduceIf","min","max","inits","initv","ifv","getv","s","rangeSum","rangeEach","arrayEquals","a1","a2","digits","a","numberCalc","al1","al2","num1","num2","helper","Rows","len","height","row","idx","style","exceptSet","what","text","srcCellRange","dstCellRange","autofill","dsri","dsci","deri","deci","drn","dcn","isAdd","dn","ii","jj","nri","nci","ncell","word","ncellmm","ndata","rndata","col","cells","ks","Cols","width","indexWidth","minWidth","en","$languages","$messages","translate","messages","lang","message","t","tf","locale","clearLangList","rules","returnMessage","Validator","required","Validation","mode","validator","nrefs","Validations","errors","defaultSettings","toolbarHeight","bottombarHeight","hasOwnProperty","canPaste","dst","srn","scn","copyPaste","rows","cutPaste","clipboard","setStyleBorder","bss","styles","cstyle","setStyleBorders","color","selector","multiple","ns","mergeIndexes","mri","mci","mrl","mcl","getCellRowByY","scrollOffsety","fsh","frset","top","getCellColByX","scrollOffsetx","cols","fsw","left","DataProxy","settings","Selector","copyText","rowData","cellText","txt","lines","srcRange","cri","cci","nfont","state","autoFilter","oldCell","oldText","vIndex","x1","y1","scroll","exceptRowSet","left0","top0","fary","oldAry","b","si","rsize","csize","freeze","fci","fri","cellStyle","history","validations","view","showToolbar","showBottomBar","exceptRows","exceptRowTH","viewRange","rlen","clen","frary","offset","rowHeight","colWidth","nstyle","bind","target","fn","unbind","unbindClickoutside","bindClickoutside","mouseMoveUp","movefunc","upfunc","calTouchDirection","spanx","spany","direction","bindTouch","move","end","startx","starty","pageX","pageY","createEventEmitter","listeners","on","callback","push","currentListener","create","fire","exec","removeListener","remove","once","execCalllback","removeAllListeners","cssPrefix","Resizer","vertical","line","moving","hoverEl","lineEl","unhideHoverEl","startEvt","cRect","Scrollbar","scrollLeft","contentDistance","cssKey","selectorHeightBorderWidth","startZIndex","SelectorElement","useHideInput","of","calBRAreaOffset","l","ftwidth","ftheight","calTAreaOffset","calLAreaOffset","setBRAreaOffset","br","setTLAreaOffset","tl","setTAreaOffset","setLAreaOffset","setLClipboardOffset","setBRClipboardOffset","setTLClipboardOffset","setTClipboardOffset","setAllAreaOffset","setAllClipboardOffset","freezeHeight","freezeWidth","coffset","indexesUpdated","lastri","lastci","ern","ecn","inputMovePrev","filterItems","inputMoveNext","inputEnter","inputKeydownHandler","keyCode","Suggest","items","itemClick","title","item","Icon","addMonth","date","step","weekday","monthDays","year","month","cdate","startDate","datess","disabled","active","Calendar","week","cvalue","bodyEl","trs","tds","Datepicker","calendar","resetTextareaSize","inputText","textlineEl","textEl","areaOffset","txts","maxTxtSize","fontWidth","tlineWidth","maxWidth","h1","twidth","insertText","itxt","selectionEnd","ntxt","keydownEventHandler","altKey","inputEventHandler","suggest","start","setTextareaRange","setText","suggestItemClick","sit","eit","resetSuggestItems","dateFormat","Editor","formulas","viewFn","suggestPosition","areaEl","elOffset","sOffset","datepicker","Button","dpr","thinLineWidth","npx","px","npxLine","DrawBox","padding","bottom","right","align","drawFontLine","tx","ty","valign","blheight","blwidth","floffset","Draw","mtxt","box","attr","textWrap","ctx","font","strike","underline","biw","ntxts","txtWidth","textLine","txtHeight","xys","borderTop","borderRight","borderBottom","borderLeft","sx","sy","dtextcb","bgcolor","baseFonts","fontSizes","getFontSizePxByPt","pt","fontSize","infixExprToSuffixExpr","operatorStack","stack","subStrs","fnArgType","fnArgOperator","fnArgsLen","oldc","c1","ex","ey","rangelen","nc","evalSubExpr","subExpr","cellRender","fl","expr","evalSuffixExpr","srcStack","formulaMap","cellList","fc","formula","params","getCellText","_cell","baseFormulas","ary","f","formulam","formatStringRender","formatNumberRender","first","parts","baseFormats","formatm","cellPaddingWidth","tableFixedHeaderCleanStyle","tableGridStyle","tableFixedHeaderStyle","getDrawBox","rindex","yoffset","renderCell","draw","sortedRowMap","nrindex","frozen","dbox","renderAutofilter","afRange","renderContent","fw","fh","filteredTranslateFunc","exceptRowTotalHeight","renderSelectedHeaderCell","renderFixedHeaders","sumHeight","sumWidth","nty","ntx","renderFixedLeftTopCell","renderContentGrid","ch","cw","renderFreezeHighlightLine","ftw","fth","theight","Table","vr","freezeViewRange","PAGER_SIZES","PAGER_ORIENTATIONS","inches2px","inc","btnClick","pagerSizeChange","paper","ps","pagerOrientationChange","Print$1","iwidth","iheight","scale","mViewRange","th","yo","wrap","canvas","rh","yof","iframe","contentWindow","idoc","menuItems","buildMenuItem","buildMenu","ContextMenu$1","isHide","hideEl","vhf","tooltip","elBox","Item","shortcut","c","tip","DropdownItem","Dropdown","showArrow","placement","contentEl","buildItemWithIcon","iconName","DropdownAlign","aligns","icon","naligns","Align","Valign","ToggleItem","Autofilter","Bold","Italic","Strike","Underline","themeColorPlaceHolders","themeColors","standardColors","buildTd","ColorPalette","table","DropdownColor","colorPalette","lineTypes","DropdownLineType","beforei","lineTypeEls","iti","buildTable","BorderPalette","DropdownBorder","borderPalette","Border","IconItem","Clearformat","Paintformat","TextColor","FillColor","DropdownFontSize","nfontSizes","DropdownFontsize","DropdownFont","nfonts","Font","DropdownFormat","nformats","DropdownFormula","nformulas","Format","Freeze","Merge","Redo","Undo","Print","Textwrap","moreBtns","More","DropdownMore","buildDivider","initBtns2","marginLeft","marginRight","moreResize","btns","moreEl","btns2","sumWidth2","list1","list2","Toolbar","widthFn","FontSize","Formula","format","Modal","clientHeight","clientWidth","FormInput","hint","FormSelect","getTitle","change","patterns","FormField","rule","label","labelWidth","fieldLabelWidth","ModalValidation","mf","rf","cf","minvf","maxvf","svf","vf","action","attrs","field","clsName","buildSortItem","buildFilterBody","filterbEl","filterValues","resetFilterHeader","filterhEl","values","SortFilter","sortAscEl","sortDescEl","tindex","xtoast","dimmer","throttle","func","wait","timeout","that","scrollbarMove","verticalScrollbar","horizontalScrollbar","tableOffset","selectorSet","toolbar","contextMenu","selectorMove","overlayerMousemove","offsetX","offsetY","rowResizer","colResizer","tableEl","tRect","overlayerMousescroll","deltaY","deltaX","loopValue","vFunc","moveY","moveX","horizontal","tempY","tempX","temp","overlayerTouch","verticalScrollbarSet","erth","horizontalScrollbarSet","sheetFreeze","editor","fwidth","fheight","sheetReset","overlayerEl","overlayerCEl","tOffset","vRect","clearClipboard","copy","cut","paste","msg","cdata","hideRowsOrCols","unhideRowsOrCols","autofilter","toolbarChangePaintformatPaste","overlayerMousedown","sortFilter","isAutofillEl","cellRect","editorSetOffset","sPosition","editorSet","verticalScrollbarMove","horizontalScrollbarMove","rowResizerFinished","colResizerFinished","dataSetCellText","insertDeleteRowColumn","toolbarChange","sortFilterChange","sheetInitEvents","modalValidation","o","itext","ctrlKey","shiftKey","metaKey","Sheet","targetEl","showContextmenu","ContextMenu","eventMap","click","Bottombar","addFunc","swapFunc","deleteFunc","updateFunc","nindex","activeEl","deleteEl","Spreadsheet","selectors","rootEl","oldIndex","ds","nd","sheetIndex","spreadsheet","argbToHex","argb","DEFAULT_THEME_COLORS","INDEXED_COLORS","applyTint","hex","tint","g","apply","nr","ng","nb","getFillColor","fill","fgColor","resolveColor","colorObj","base","convertBorderSide","border","convertCellStyle","hasStyle","fontColor","hasBorder","sides","side","converted","serializeStyle","getOrCreateStyleIndex","styleMap","existing","extractCellText","rt","parseRange","rangeStr","parseCellAddress","addr","match","colStr","convertWorkbookToSpreadsheetData","workbook","worksheet","colCount","mergeMap","worksheetModel","mergeRanges","rowSpan","colSpan","rowNumber","rowIndex","cellsObj","colNumber","colIndex","styleIndex","cellData","mergeKey","XlsxRenderer","spreadsheetRef","sheetDataRef","resizeObserverRef","resizeTimeoutRef","lastDimensionsRef","calculateDimensions","rawWidth","rawHeight","mountSpreadsheet","isMobile","isInitialRender","updateDimensions","newDimensions","lastDimensions","widthDiff","heightDiff","isMounted","loadExcel","ExcelJS","sheetData","errorMsg","timer","FileSpreadsheet","PptxRenderer","tiled","slideCount","setSlideCount","previewerRef","arrayBufferRef","parentWidth","containerWidth","reinitializePreviewer","currentDimensions","previewer","init","timeoutId","loadPptx","hiddenContainer","tempPreviewer","count","Presentation","utils","arraysEqual","uInt2int","toHexStr","toHex1","toHex2","toHex4","msftUuidStringify","emptyToNull","readSystemTime","readTransitionSystemTime","bin2HexUpper","array","padNumber","maxLen","wYear","wMonth","wDay","wHour","wMinute","wSecond","wDayOfWeek","_const","utils_1","require$$0","base64Js","byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","code","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","tmp","arr","curByte","tripletToBase64","num","encodeChunk","uint8","output","extraBytes","maxChunkLength","len2","ieee754","buffer","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","base64","require$$1","customInspectSymbol","exports","Buffer","SlowBuffer","K_MAX_LENGTH","typedArraySupport","proto","createBuffer","length","buf","encodingOrOffset","allocUnsafe","from","fromString","fromArrayView","isInstance","fromArrayBuffer","valueOf","fromObject","assertSize","alloc","encoding","checked","string","actual","fromArrayLike","arrayView","byteOffset","numberIsNaN","list","pos","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","val","dir","arrayIndexOf","indexSize","arrLength","valLength","read","foundIndex","found","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","asciiToBytes","base64Write","ucs2Write","utf16leToBytes","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","out","hexSliceLookupTable","bytes","newBuf","checkOffset","noAssert","mul","checkInt","maxBytes","limit","sub","checkIEEE754","writeFloat","littleEndian","writeDouble","targetStart","INVALID_BASE64_RE","base64clean","units","leadSurrogate","byteArray","hi","lo","alphabet","i16","safer","Safer","safer_1","BOMChar","bomHandling","PrependBOMWrapper","encoder","StripBOMWrapper","decoder","copyProps","module","SafeBuffer","isEncoding","_normalizeEncoding","enc","retried","normalizeEncoding","nenc","string_decoder","StringDecoder","utf16Text","utf16End","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","utf8End","utf8Text","utf8CheckByte","byte","utf8CheckIncomplete","self","utf8CheckExtraBytes","p","internal","InternalCodec","codecOptions","iconv","InternalEncoderBase64","InternalEncoderCesu8","InternalDecoderCesu8","InternalEncoder","InternalDecoder","codec","completeQuads","bufIdx","charCode","acc","contBytes","accBytes","utf32","Utf32Codec","Utf32Encoder","Utf32Decoder","write32","isHighSurrogate","isLowSurrogate","codepoint","overflow","badChar","_writeCodepoint","high","Utf32AutoCodec","Utf32AutoEncoder","Utf32AutoDecoder","detectEncoding","resStr","trail","bufs","defaultEncoding","charsProcessed","invalidLE","invalidBE","bmpCharsLE","bmpCharsBE","outer_loop","utf16","Utf16BECodec","Utf16BEEncoder","Utf16BEDecoder","buf2","Utf16Codec","Utf16Encoder","Utf16Decoder","asciiCharsLE","asciiCharsBE","utf7","Utf7Codec","Utf7Encoder","Utf7Decoder","nonDirectChars","chunk","base64Regex","base64Chars","plusChar","minusChar","andChar","lastI","inBase64","base64Accum","b64str","canBeDecoded","Utf7IMAPCodec","Utf7IMAPEncoder","Utf7IMAPDecoder","base64AccumIdx","uChar","base64IMAPChars","sbcsCodec","SBCSCodec","asciiString","encodeBuf","SBCSEncoder","SBCSDecoder","decodeBuf","idx1","idx2","sbcsData","sbcsDataGenerated","dbcsCodec","DBCSCodec","UNASSIGNED","GB18030_CODE","SEQ_START","NODE_START","UNASSIGNED_NODE","DEF_CHAR","mappingTable","commonThirdByteNodeIdx","commonFourthByteNodeIdx","firstByteNode","secondByteNode","thirdByteNode","fourthByteNode","skipEncodeChars","DBCSEncoder","DBCSDecoder","node","curAddr","writeTable","part","codeTrail","seq","uCode","dbcsCode","bucket","low","oldVal","nodeIdx","prefix","hasValues","subNodeEmpty","mbCode","subNodeIdx","newPrefix","seqObj","nextChar","resCode","subtable","findIdx","prevBytes","prevOffset","seqStart","ptr","uCodeLead","bytesArr","mid","dbcsData","require$$2","require$$3","require$$4","require$$5","require$$6","require$$7","modules","require$$8","streams","stream_module","Transform","IconvLiteEncoderStream","conv","done","chunks","IconvLiteDecoderStream","__viteBrowserExternal","codecDef","DataStream_1","DataStream","endianness","filename","blob","URL","extra","req","blen","npos","dstOffset","srcOffset","dstU8","srcU8","arrayIsLittleEndian","u8","structDefinition","struct","lengthOverride","charset","tp","ta","tap","u","__importDefault","this","mod","Reader_1","const_1","TypeEnum","Reader","nameLength","propertyBlockOffset","props","propertyCount","propertyOffset","propertyType","nodeProperty","currentMode","currentIndex","current","propertyStart","currentOffset","maxBatsInHeader","startOffset","blockOffsetData","currentBlock","currentBlockIndex","startBlockOffset","startIndex","batCount","batCountTotal","remainingBlocks","nextBlockAt","xBatBlock","blocksToProcess","blockStartAt","fieldProperty","blockChain","nextBlockSmall","rootProp","nextBlock","startBlock","blockSize","bigBlockNumber","bigBlockOffset","blockStartOffset","chain","resultData","readLen","partSize","_this","propertyData","folder","subIndex","_i","children_1","file","Burner","burn","RoundUpto512","RoundUpto64","LiteFat","next","boundary","LiteBurner","entries","entriesFirstSector","liteEnt","_b","_c","numMiniFatSectors","firstMiniFatSector","bytesMiniFat","firstMiniDataSector","firstFatSector","numFatSectors","numDifatSectors","firstDifatSector","difat1","difat2","nextDifatSector","remain","numBytesName","length_1","firstSector","_d","_e","_f","_g","dirIndex","liteEnts","liteEntry","split2_1","isRed","midNum","entryIndex","entry","split3","EntryStreamParser","parse","VerbStreamParser","version","VerbType","DisplayNameCount","DisplayName","MsgClsNameCount","Internal1StringCount","DisplayNameCountRepeat","TZDEFINITIONParser","TZDEFINITION_FLAG_VALID_GUID","TZDEFINITION_FLAG_VALID_KEYNAME","tz","bMajorVersion","cbHeader","wFlags","cchKeyName","cRules","bMajorVersion_1","cbRule","basePos","wFlags_1","stStart","lBias","lStandardBias","lDaylightBias","stStandardDate","stDaylightDate","TZREGParser","wStandardYear","wDaylightYear","AppointmentRecurParser","RecurFrequency","PatternType","CalendarType","EndType","OverrideFlags","parseRecurrencePattern","ReaderVersion","WriterVersion","recurFrequency","patternType","calendarType","firstDateTime","period","slidingFlag","patternTypeWeek","patternTypeMonth","patternTypeMonthNth","endType","occurrenceCount","firstDOW","deletedInstanceCount","deletedInstanceDates","modifiedInstanceCount","modifiedInstanceDates","endDate","ansiEncoding","recurrencePattern","readerVersion2","writerVersion2","startTimeOffset","endTimeOffset","exceptionCount","exceptionInfo","startDateTime","endDateTime","originalStartTime","overrideFlags","subject","subjectLength","subjectLength2","meetingType","reminderDelta","reminderSet","location_1","locationLength","locationLength2","busyStatus","attachment","subType","appointmentColor","reservedBlock1Size","one","changeHighlightSize","reservedBlockEE1Size","wideCharSubjectLength","wideCharLocationLength","reservedBlockEE2Size","reservedBlock2Size","Burner_1","EntryStreamParser_1","VerbStreamParser_1","TZDEFINITIONParser_1","TZREGParser_1","AppointmentRecurParser_1","require$$9","AppointmentRecurParser_2","KeyType","fileTimeToUnixEpoch","time","removeTrailingNull","MsgReader","fieldClass","fieldType","provider","insideProps","keyType","propertySet","propertyLid","classValue","keyed","lidDict","prop","skip","decodeAs","fileTime","MAPI_TO","MAPI_CC","MAPI_BCC","propertyTag","parserConfig","documentProperty","fields","pair","dirProperty","rootFolder","attachmentField","recipientField","childFieldType","innerMsgContentFields","depth","_loop_1","set","dst_1","sources_1","subFolder","propertiesBinary","propertiesDs","_loop_2","this_1","state_1","subClass","fileSet","guidTable","stringTable","entryTable","stringReader","entries_1","numTextBytes","attach","attachData","fieldData","__createBinding","k2","desc","__exportStar","MsgReader_1","formatRecipients","recipients","email","formatDate","dateStr","decodeHtmlBody","formatMessageClass","messageClass","labelStyle","rowStyle","iconWrapStyle","iconStyle","valueStyle","MsgRenderer","setFields","fileData","toStr","ccStr","bccStr","senderName","senderEmail","sender","sentDate","receivedDate","createdDate","lastModified","attachments","bodyHtml","messageId","fieldsAny","importance","importanceLabel","sensitivity","sensitivityLabel","User","Users","Clock","Tag","Mail","Paperclip","sizeStr","Hash","getVideoType","VideoRenderer","isLoading","setIsLoading","videoRef","playerRef","videoElement","videoType","player","videojs","useAudioPlayer","audioRef","isPlaying","setIsPlaying","currentTime","setCurrentTime","duration","setDuration","volume","setVolumeState","isMuted","setIsMuted","isLoop","setIsLoop","audio","onTimeUpdate","onDurationChange","onCanPlay","onWaiting","onPlaying","onPlay","onPause","onEnded","onError","togglePlay","seek","seconds","setVolume","vol","clamped","toggleMute","toggleLoop","formatTime","minutes","MarqueeText","innerRef","setOverflow","scrollDist","setScrollDist","check","inner","tw","observer","gap","totalScroll","dur","Tonearm","AudioRenderer","showVolume","setShowVolume","volumeRef","volumeTimerRef","progress","handleClickOutside","handleVolumeEnter","handleVolumeLeave","VolumeIcon","VolumeX","Volume1","Volume2","Repeat","SkipBack","Pause","Play","SkipForward","AnimatePresence","ghcolors","vscDarkPlus","CopyButton","copied","setCopied","handleCopy","textarea","Check","Copy","MarkdownRenderer","setContent","ReactMarkdown","remarkGfm","inline","codeString","SyntaxHighlighter","href","alt","getLanguageFromFileName","TextRenderer","language","FileText","UnsupportedRenderer","fileType","onDownload","FileQuestion","Download","OriginalSizeIcon","getFileType","mimeType","textExtensions","FilePreviewModal","files","isOpen","onClose","onNavigate","customRenderers","setZoom","setRotation","setCurrentPage","setTotalPages","contentNaturalWidth","setContentNaturalWidth","contentNaturalHeight","setContentNaturalHeight","contentRef","navVisible","setNavVisible","navHideTimerRef","NAV_HIDE_DELAY","resetNavTimer","normalizedFiles","useMemo","currentFile","customRenderer","renderer","originalOverflow","originalPaddingRight","scrollbarWidth","handleKeyDown","handleZoomIn","handleZoomOut","handleRotate","handleRotateLeft","handleFitToWidth","scaleX","scaleY","handleOriginalSize","handleZoomChange","handleReset","handleDownload","link","showZoomControls","showRotateControl","modalContent","ToolbarButton","X","Fragment","ZoomOut","ZoomIn","Scan","RotateCcw","RotateCw","RefreshCw","ChevronLeft","ChevronRight","createPortal","onClick","VERSION","packageJson"],"mappings":"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AAa,SACb,SAAY,OACZ,WAAc,QACd,WAAc,IACd,SAAY,IACZ,QAAW,IACX,cAAiB,OACjB,WAAc,OACd,UAAa,OACb,QAAW,MACf,EACE,0BAA6B,CAC3B,MAAS,UACT,WAAc,4EACd,UAAa,MACb,UAAa,OACb,WAAc,MACd,YAAe,SACf,UAAa,SACb,SAAY,OACZ,WAAc,QACd,WAAc,IACd,SAAY,IACZ,QAAW,IACX,cAAiB,OACjB,WAAc,OACd,UAAa,OACb,QAAW,OACX,QAAW,MACX,OAAU,SACV,SAAY,OACZ,OAAU,oBACV,gBAAmB,OACvB,EACE,iCAAoC,CAClC,SAAY,KAChB,EACE,0CAA6C,CAC3C,WAAc,SAClB,EACE,2CAA8C,CAC5C,WAAc,SAClB,EACE,2CAA8C,CAC5C,WAAc,SAClB,EACE,4CAA+C,CAC7C,WAAc,SAClB,EACE,qCAAwC,CACtC,WAAc,SAClB,EACE,sCAAyC,CACvC,WAAc,SAClB,EACE,sCAAyC,CACvC,WAAc,SAClB,EACE,uCAA0C,CACxC,WAAc,SAClB,EACE,uCAA0C,CACxC,QAAW,OACX,WAAc,MACd,cAAiB,MACjB,WAAc,UACd,OAAU,mBACd,EACE,QAAW,CACT,MAAS,UACT,UAAa,QACjB,EACE,OAAU,CACR,MAAS,UACT,UAAa,QACjB,EACE,QAAW,CACT,MAAS,UACT,UAAa,QACjB,EACE,MAAS,CACP,MAAS,UACT,UAAa,QACjB,EACE,UAAa,CACX,QAAW,IACf,EACE,OAAU,CACR,MAAS,SACb,EACE,aAAc,CACZ,MAAS,SACb,EACE,YAAe,CACb,MAAS,SACb,EACE,SAAY,CACV,MAAS,SACb,EACE,OAAU,CACR,MAAS,SACb,EACE,IAAO,CACL,MAAS,SACb,EACE,OAAU,CACR,MAAS,SACb,EACE,OAAU,CACR,MAAS,SACb,EACE,QAAW,CACT,MAAS,SACb,EACE,SAAY,CACV,MAAS,SACb,EACE,SAAY,CACV,MAAS,SACb,EACE,SAAY,CACV,MAAS,SACb,EACE,MAAS,CACP,MAAS,SACb,EACE,SAAY,CACV,MAAS,SACb,EACE,OAAU,CACR,MAAS,SACb,EACE,QAAW,CACT,MAAS,SACb,EACE,YAAa,CACX,MAAS,SACb,EACE,uCAAwC,CACtC,MAAS,SACb,EACE,SAAY,CACV,MAAS,UACT,WAAc,MAClB,EACE,QAAW,CACT,MAAS,SACb,EACE,kCAAmC,CACjC,MAAS,SACb,EACE,IAAO,CACL,MAAS,SACb,EACE,SAAY,CACV,MAAS,SACb,EACE,sCAAuC,CACrC,MAAS,SACb,EACE,UAAa,CACX,WAAc,MAClB,EACE,KAAQ,CACN,WAAc,MAClB,EACE,OAAU,CACR,UAAa,QACjB,CACA,ECjLAC,GAAe,CACb,0BAA6B,CAC3B,MAAS,UACT,SAAY,OACZ,WAAc,OACd,WAAc,kFACd,UAAa,MACb,UAAa,OACb,WAAc,MACd,YAAe,SACf,UAAa,SACb,WAAc,MACd,WAAc,IACd,SAAY,IACZ,QAAW,IACX,cAAiB,OACjB,WAAc,OACd,UAAa,OACb,QAAW,OACX,QAAW,MACX,OAAU,SACV,SAAY,OACZ,WAAc,SAClB,EACE,2BAA8B,CAC5B,MAAS,UACT,SAAY,OACZ,WAAc,OACd,WAAc,kFACd,UAAa,MACb,UAAa,OACb,WAAc,MACd,YAAe,SACf,UAAa,SACb,WAAc,MACd,WAAc,IACd,SAAY,IACZ,QAAW,IACX,cAAiB,OACjB,WAAc,OACd,UAAa,OACb,QAAW,MACf,EACE,qCAAwC,CACtC,WAAc,OACd,WAAc,SAClB,EACE,sCAAyC,CACvC,WAAc,OACd,WAAc,SAClB,EACE,uCAA0C,CACxC,WAAc,OACd,WAAc,SAClB,EACE,wCAA2C,CACzC,WAAc,OACd,WAAc,SAClB,EACE,uCAA0C,CACxC,QAAW,YACX,aAAgB,OAChB,MAAS,UACT,WAAc,SAClB,EACE,aAAc,CACZ,QAAW,IACf,EACE,sBAAuB,CACrB,MAAS,SACb,EACE,eAAgB,CACd,MAAS,SACb,EACE,QAAW,CACT,MAAS,SACb,EACE,OAAU,CACR,MAAS,SACb,EACE,YAAe,CACb,MAAS,SACb,EACE,kDAAmD,CACjD,MAAS,SACb,EACE,yDAA0D,CACxD,MAAS,SACb,EACE,SAAY,CACV,MAAS,SACb,EACE,IAAO,CACL,MAAS,SACb,EACE,QAAW,CACT,MAAS,SACb,EACE,OAAU,CACR,MAAS,SACb,EACE,SAAY,CACV,MAAS,SACb,EACE,OAAU,CACR,MAAS,SACb,EACE,SAAY,CACV,MAAS,SACb,EACE,KAAQ,CACN,MAAS,SACb,EACE,SAAY,CACV,MAAS,SACb,EACE,YAAa,CACX,MAAS,SACb,EACE,OAAU,CACR,MAAS,SACb,EACE,KAAQ,CACN,MAAS,SACb,EACE,QAAW,CACT,MAAS,SACb,EACE,QAAW,CACT,MAAS,SACb,EACE,kCAAmC,CACjC,eAAkB,WACtB,EACE,SAAY,CACV,MAAS,SACb,EACE,OAAU,CACR,MAAS,SACb,EACE,iBAAkB,CAChB,MAAS,SACb,EACE,OAAU,CACR,MAAS,SACb,EACE,cAAe,CACb,MAAS,SACb,EACE,aAAc,CACZ,MAAS,SACb,EACE,sBAAuB,CACrB,MAAS,SACb,EACE,yBAA0B,CACxB,MAAS,SACb,EACE,QAAW,CACT,MAAS,SACb,EACE,iBAAkB,CAChB,MAAS,SACb,EACE,uBAAwB,CACtB,MAAS,SACb,EACE,SAAY,CACV,MAAS,SACb,EACE,4BAA6B,CAC3B,MAAS,SACb,EACE,MAAS,CACP,MAAS,SACb,EACE,UAAa,CACX,MAAS,SACb,EACE,OAAU,CACR,UAAa,QACjB,EACE,aAAc,CACZ,MAAS,SACb,EACE,mBAAoB,CAClB,MAAS,SACb,EACE,QAAW,CACT,MAAS,SACb,EACE,UAAa,CACX,MAAS,SACb,EACE,cAAiB,CACf,MAAS,SACb,EACE,wCAAyC,CACvC,MAAS,SACb,EACE,SAAY,CACV,MAAS,SACb,EACE,2BAA4B,CAC1B,MAAS,SACb,EACE,2BAA4B,CAC1B,MAAS,SACb,EACE,OAAU,CACR,MAAS,SACb,EACE,kBAAmB,CACjB,MAAS,SACb,EACE,MAAS,CACP,MAAS,SACb,EACE,aAAc,CACZ,MAAS,SACb,EACE,yBAA0B,CACxB,MAAS,SACb,EACE,qCAAsC,CACpC,MAAS,SACb,EA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","x_google_ignoreList":[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,115,116,117,118,119,120,121,122,123,124,125,130,131]}