@somecat/epub-reader 0.1.4 → 0.1.6

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/dist/vue.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/reader.ts","../src/vue/types.ts","../src/core/icons.ts","unplugin-vue:%00/plugin-vue/export-helper","../src/vue/components/SvgIcon.vue","../src/vue/components/DesktopToolbar.vue","../src/vue/components/DesktopBottomBar.vue","../src/vue/components/TocTree.vue","../src/vue/components/TocDrawer.vue","../src/vue/components/SearchResultList.vue","../src/vue/components/SearchDrawer.vue","../src/vue/components/MobileUI.vue","../src/vue/EBookReaderVue.ts"],"names":["_openBlock","_createElementBlock","_normalizeStyle","_hoisted_1","_createElementVNode","_createVNode","_toDisplayString","_hoisted_2","_hoisted_3","_hoisted_4","_createCommentVNode","_withKeys","_Fragment","_renderList","_toDisplayString3","_normalizeClass","_createBlock","_hoisted_6","_hoisted_7","_hoisted_12","_hoisted_14","_hoisted_15","_hoisted_16","computed","clamp","_toDisplayString6","_hoisted_5","_renderSlot","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_13","_hoisted_17","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_33","ref","nextTick","h","onBeforeUnmount","watch"],"mappings":"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","file":"vue.js","sourcesContent":["import 'foliate-js/view.js'\r\nimport type { EBookReaderHandle, EBookReaderOptions, ProgressInfo, SearchOptions, SearchResult, TocItem } from './types.js'\r\n\r\ntype FoliateViewElement = HTMLElement & {\r\n book?: { toc?: TocItem[] }\r\n renderer?: {\r\n prevSection?: () => void\r\n nextSection?: () => void\r\n setStyles?: (css: string) => void\r\n render?: () => void\r\n expand?: () => void\r\n }\r\n open?: (file: File) => Promise<void>\r\n init?: (options?: unknown) => Promise<void>\r\n goLeft?: () => void\r\n goRight?: () => void\r\n goTo?: (target: string) => Promise<void> | void\r\n goToFraction?: (fraction: number) => Promise<void> | void\r\n search?: (options: unknown) => AsyncIterable<unknown>\r\n clearSearch?: () => void\r\n}\r\n\r\nconst getContentCSS = (fontSize: number, isDark: boolean, extraCSS?: string) => `\r\n@namespace epub \"http://www.idpf.org/2007/ops\";\r\nhtml {\r\n color-scheme: ${isDark ? 'dark' : 'light'} !important;\r\n}\r\nbody {\r\n background-color: transparent !important;\r\n color: ${isDark ? '#e0e0e0' : 'black'} !important;\r\n font-size: ${fontSize}% !important;\r\n}\r\np {\r\n line-height: 1.6;\r\n margin-bottom: 1em;\r\n}\r\na {\r\n color: ${isDark ? '#64b5f6' : '#2563eb'} !important;\r\n}\r\nimg {\r\n max-width: 100%;\r\n height: auto;\r\n object-fit: contain;\r\n ${isDark ? 'filter: brightness(0.8) contrast(1.2);' : ''}\r\n}\r\n${extraCSS ?? ''}\r\n`\r\n\r\nexport function createEBookReader(container: HTMLElement, options: EBookReaderOptions = {}): EBookReaderHandle {\r\n if (!container) throw new Error('container is required')\r\n if (!customElements.get('foliate-view')) throw new Error('foliate-view is not defined')\r\n\r\n const {\r\n darkMode: initialDarkMode = false,\r\n fontSize: initialFontSize = 100,\r\n extraContentCSS,\r\n onReady,\r\n onError,\r\n onProgress,\r\n onToc,\r\n onSearchProgress,\r\n onContentLoad,\r\n } = options\r\n\r\n let destroyed = false\r\n let toc: TocItem[] = []\r\n let fontSize = initialFontSize\r\n let darkMode = initialDarkMode\r\n let searchToken = 0\r\n\r\n container.innerHTML = ''\r\n\r\n const viewer = document.createElement('foliate-view') as FoliateViewElement\r\n viewer.style.display = 'block'\r\n viewer.style.width = '100%'\r\n viewer.style.height = '100%'\r\n viewer.setAttribute('margin', '48')\r\n viewer.setAttribute('gap', '0.07')\r\n\r\n const applyStyles = () => {\r\n if (destroyed) return\r\n if (!viewer.renderer?.setStyles) return\r\n viewer.renderer.setStyles(getContentCSS(fontSize, darkMode, extraContentCSS))\r\n requestAnimationFrame(() => {\r\n setTimeout(() => {\r\n if (destroyed) return\r\n viewer.renderer?.render?.()\r\n viewer.renderer?.expand?.()\r\n }, 50)\r\n })\r\n }\r\n\r\n const handleLoad = (e: Event) => {\r\n applyStyles()\r\n const detail = (e as CustomEvent).detail as { doc?: Document } | undefined\r\n if (detail?.doc) onContentLoad?.(detail.doc)\r\n }\r\n\r\n const handleRelocate = (e: Event) => {\r\n const detail = (e as CustomEvent).detail as ProgressInfo\r\n onProgress?.(detail)\r\n }\r\n\r\n viewer.addEventListener('load', handleLoad as EventListener)\r\n viewer.addEventListener('relocate', handleRelocate as EventListener)\r\n\r\n container.appendChild(viewer)\r\n\r\n const handle: EBookReaderHandle = {\r\n async open(file) {\r\n if (destroyed) return\r\n if (!file) return\r\n\r\n try {\r\n viewer.clearSearch?.()\r\n searchToken++\r\n\r\n await viewer.open?.(file)\r\n\r\n const nextToc = viewer.book?.toc ?? []\r\n toc = nextToc\r\n onToc?.(toc)\r\n\r\n await viewer.init?.({ showTextStart: true })\r\n applyStyles()\r\n } catch (error) {\r\n onError?.(error)\r\n throw error\r\n }\r\n },\r\n destroy() {\r\n if (destroyed) return\r\n destroyed = true\r\n searchToken++\r\n viewer.removeEventListener('load', handleLoad)\r\n viewer.removeEventListener('relocate', handleRelocate as EventListener)\r\n container.innerHTML = ''\r\n },\r\n prevPage() {\r\n viewer.goLeft?.()\r\n },\r\n nextPage() {\r\n viewer.goRight?.()\r\n },\r\n prevSection() {\r\n viewer.renderer?.prevSection?.()\r\n },\r\n nextSection() {\r\n viewer.renderer?.nextSection?.()\r\n },\r\n goTo(target) {\r\n if (!target) return\r\n viewer.goTo?.(target)\r\n },\r\n goToFraction(fraction) {\r\n const safe = Math.min(1, Math.max(0, fraction))\r\n viewer.goToFraction?.(safe)\r\n },\r\n setDarkMode(nextDarkMode) {\r\n darkMode = nextDarkMode\r\n applyStyles()\r\n },\r\n setFontSize(nextFontSize) {\r\n const safe = Math.min(300, Math.max(50, nextFontSize))\r\n fontSize = safe\r\n applyStyles()\r\n },\r\n async search(query, opts: SearchOptions = {}) {\r\n const normalized = query.trim()\r\n if (!normalized) {\r\n viewer.clearSearch?.()\r\n return []\r\n }\r\n\r\n const token = ++searchToken\r\n const results: SearchResult[] = []\r\n\r\n try {\r\n for await (const item of viewer.search?.({\r\n query: normalized,\r\n matchCase: Boolean(opts.matchCase),\r\n matchWholeWords: Boolean(opts.wholeWords),\r\n matchDiacritics: Boolean(opts.matchDiacritics),\r\n }) ?? []) {\r\n if (destroyed || token !== searchToken) return results\r\n\r\n if (item === 'done') {\r\n onSearchProgress?.({ done: true, progress: 1 })\r\n break\r\n }\r\n\r\n if (typeof item === 'object' && item && 'progress' in (item as any)) {\r\n const progress = (item as any).progress\r\n if (typeof progress === 'number') onSearchProgress?.({ progress })\r\n continue\r\n }\r\n\r\n const anyItem = item as any\r\n if (anyItem?.subitems?.length) {\r\n for (const sub of anyItem.subitems) {\r\n results.push({\r\n label: anyItem.label,\r\n cfi: sub?.cfi,\r\n excerpt: sub?.excerpt,\r\n title: sub?.title,\r\n })\r\n }\r\n } else if (anyItem?.cfi) {\r\n results.push({\r\n cfi: anyItem.cfi,\r\n excerpt: anyItem.excerpt,\r\n title: anyItem.title,\r\n })\r\n }\r\n }\r\n } catch (error) {\r\n onError?.(error)\r\n throw error\r\n }\r\n\r\n return results\r\n },\r\n cancelSearch() {\r\n searchToken++\r\n },\r\n clearSearch() {\r\n viewer.clearSearch?.()\r\n },\r\n getToc() {\r\n return toc\r\n },\r\n }\r\n\r\n onReady?.(handle)\r\n return handle\r\n}\r\n","import type { PropType } from 'vue'\nimport type { EBookReaderHandle, ProgressInfo, SearchOptions } from '../core/types.js'\n\nexport type MobilePanel = 'menu' | 'search' | 'progress' | 'settings'\n\nexport type EBookReaderVueExposed = Pick<\n EBookReaderHandle,\n 'prevPage' | 'nextPage' | 'prevSection' | 'nextSection' | 'goTo' | 'goToFraction' | 'search' | 'cancelSearch' | 'clearSearch'\n>\n\nexport type EBookReaderVueProps = {\n file?: File | null\n fileUrl?: string | null\n defaultFontSize?: number\n fontSize?: number\n defaultDarkMode?: boolean\n darkMode?: boolean\n enableKeyboardNav?: boolean\n defaultSearchOptions?: SearchOptions\n}\n\nexport const EBookReaderVuePropsDef = {\n file: { type: Object as PropType<File | null>, required: false },\n fileUrl: { type: String, required: false },\n defaultFontSize: { type: Number, required: false, default: 100 },\n fontSize: { type: Number, required: false },\n defaultDarkMode: { type: Boolean, required: false, default: false },\n darkMode: { type: Boolean, required: false },\n enableKeyboardNav: { type: Boolean, required: false, default: true },\n defaultSearchOptions: {\n type: Object as PropType<SearchOptions>,\n required: false,\n default: () => ({ matchCase: false, wholeWords: false, matchDiacritics: false }),\n },\n} as const\n\nexport type EBookReaderVueEmits = {\n (e: 'ready', handle: EBookReaderHandle): void\n (e: 'error', error: unknown): void\n (e: 'progress', info: ProgressInfo): void\n (e: 'fontSizeChange', fontSize: number): void\n (e: 'darkModeChange', darkMode: boolean): void\n (e: 'update:fontSize', fontSize: number): void\n (e: 'update:darkMode', darkMode: boolean): void\n}\n","export const icons: Record<string, string> = {\n list: '<path d=\"M3 12h18M3 6h18M3 18h18\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n search: '<path d=\"M11 19a8 8 0 1 0 0-16 8 8 0 0 0 0 16zM21 21l-4.35-4.35\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n 'chevron-left': '<path d=\"M15 18l-6-6 6-6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n 'chevron-right': '<path d=\"M9 18l6-6-6-6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n 'chevrons-left': '<path d=\"M11 17l-5-5 5-5M18 17l-5-5 5-5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n 'chevrons-right': '<path d=\"M13 17l5-5-5-5M6 17l5-5-5-5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n sun: '<circle cx=\"12\" cy=\"12\" r=\"5\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>',\n moon: '<path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n plus: '<path d=\"M12 5v14M5 12h14\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n minus: '<path d=\"M5 12h14\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n x: '<path d=\"M18 6L6 18M6 6l12 12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n type: '<path d=\"M4 7V4h16v3M9 20h6M12 4v16\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n sliders: '<path d=\"M4 21v-7M4 10V3M12 21v-9M12 8V3M20 21v-5M20 12V3M1 14h6M9 8h6M17 16h6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n settings: '<path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M12.563 3.2h-1.126l-.645 2.578l-.647.2a6.3 6.3 0 0 0-1.091.452l-.599.317l-2.28-1.368l-.796.797l1.368 2.28l-.317.598a6.3 6.3 0 0 0-.453 1.091l-.199.647l-2.578.645v1.126l2.578.645l.2.647q.173.568.452 1.091l.317.599l-1.368 2.28l.797.796l2.28-1.368l.598.317q.523.278 1.091.453l.647.199l.645 2.578h1.126l.645-2.578l.647-.2a6.3 6.3 0 0 0 1.091-.452l.599-.317l2.28 1.368l.796-.797l-1.368-2.28l.317-.598q.278-.523.453-1.091l.199-.647l2.578-.645v-1.126l-2.578-.645l-.2-.647a6.3 6.3 0 0 0-.452-1.091l-.317-.599l1.368-2.28l-.797-.796l-2.28 1.368l-.598-.317a6.3 6.3 0 0 0-1.091-.453l-.647-.199zm2.945 2.17l1.833-1.1a1 1 0 0 1 1.221.15l1.018 1.018a1 1 0 0 1 .15 1.221l-1.1 1.833q.33.62.54 1.3l2.073.519a1 1 0 0 1 .757.97v1.438a1 1 0 0 1-.757.97l-2.073.519q-.21.68-.54 1.3l1.1 1.833a1 1 0 0 1-.15 1.221l-1.018 1.018a1 1 0 0 1-1.221.15l-1.833-1.1q-.62.33-1.3.54l-.519 2.073a1 1 0 0 1-.97.757h-1.438a1 1 0 0 1-.97-.757l-.519-2.073a7.5 7.5 0 0 1-1.3-.54l-1.833 1.1a1 1 0 0 1-1.221-.15L4.42 18.562a1 1 0 0 1-.15-1.221l1.1-1.833a7.5 7.5 0 0 1-.54-1.3l-2.073-.519A1 1 0 0 1 2 12.72v-1.438a1 1 0 0 1 .757-.97l2.073-.519q.21-.68.54-1.3L4.27 6.66a1 1 0 0 1 .15-1.221L5.438 4.42a1 1 0 0 1 1.221-.15l1.833 1.1q.62-.33 1.3-.54l.519-2.073A1 1 0 0 1 11.28 2h1.438a1 1 0 0 1 .97.757l.519 2.073q.68.21 1.3.54zM12 14.8a2.8 2.8 0 1 0 0-5.6a2.8 2.8 0 0 0 0 5.6m0 1.2a4 4 0 1 1 0-8a4 4 0 0 1 0 8\"/>'\n}\n","\nexport default (sfc, props) => {\n const target = sfc.__vccOpts || sfc;\n for (const [key, val] of props) {\n target[key] = val;\n }\n return target;\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { icons } from '../../core/icons'\n\nconst props = withDefaults(defineProps<{\n name: string\n size?: number | string\n color?: string\n}>(), {\n size: 24,\n color: 'currentColor'\n})\n\nconst iconPath = computed(() => icons[props.name] || '')\n\nconst iconStyle = computed(() => {\n const sizeVal = typeof props.size === 'number' ? `${props.size}px` : props.size\n return {\n width: sizeVal,\n height: sizeVal,\n color: props.color,\n minWidth: sizeVal // 防止在 flex 布局中被压缩\n }\n})\n</script>\n\n<template>\n <svg\n v-if=\"iconPath\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n :style=\"iconStyle\"\n class=\"epub-reader-icon\"\n v-html=\"iconPath\"\n >\n </svg>\n</template>\n","<script setup lang=\"ts\">\r\nimport SvgIcon from './SvgIcon.vue'\r\n\r\ndefineProps<{\r\n darkMode: boolean\r\n fontSize: number\r\n}>()\r\n\r\nconst emit = defineEmits<{\r\n (e: 'toggleToc'): void\r\n (e: 'toggleSearch'): void\r\n (e: 'prevSection'): void\r\n (e: 'prevPage'): void\r\n (e: 'nextPage'): void\r\n (e: 'nextSection'): void\r\n (e: 'toggleDarkMode'): void\r\n (e: 'changeFontSize', val: number): void\r\n}>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"epub-reader__toolbar\">\r\n <div class=\"epub-reader__panel\">\r\n <button type=\"button\" class=\"epub-reader__btn\" title=\"目录\" @click=\"emit('toggleToc')\">\r\n <SvgIcon name=\"list\" />\r\n </button>\r\n <button type=\"button\" class=\"epub-reader__btn\" title=\"搜索\" @click=\"emit('toggleSearch')\">\r\n <SvgIcon name=\"search\" />\r\n </button>\r\n <div class=\"epub-reader__divider\" />\r\n <button type=\"button\" class=\"epub-reader__btn\" title=\"上一章\" @click=\"emit('prevSection')\">\r\n <SvgIcon name=\"chevrons-left\" />\r\n </button>\r\n <button type=\"button\" class=\"epub-reader__btn\" title=\"上一页\" @click=\"emit('prevPage')\">\r\n <SvgIcon name=\"chevron-left\" />\r\n </button>\r\n <button type=\"button\" class=\"epub-reader__btn\" title=\"下一页\" @click=\"emit('nextPage')\">\r\n <SvgIcon name=\"chevron-right\" />\r\n </button>\r\n <button type=\"button\" class=\"epub-reader__btn\" title=\"下一章\" @click=\"emit('nextSection')\">\r\n <SvgIcon name=\"chevrons-right\" />\r\n </button>\r\n </div>\r\n\r\n <div class=\"epub-reader__panel\">\r\n <button type=\"button\" class=\"epub-reader__btn\" title=\"主题\" @click=\"emit('toggleDarkMode')\">\r\n <SvgIcon :name=\"darkMode ? 'sun' : 'moon'\" />\r\n </button>\r\n <div class=\"epub-reader__divider\" />\r\n <button type=\"button\" class=\"epub-reader__btn\" title=\"增大字号\" @click=\"emit('changeFontSize', fontSize + 10)\">\r\n <SvgIcon name=\"plus\" />\r\n </button>\r\n <div class=\"epub-reader__font\">{{ fontSize }}%</div>\r\n <button type=\"button\" class=\"epub-reader__btn\" title=\"减小字号\" @click=\"emit('changeFontSize', fontSize - 10)\">\r\n <SvgIcon name=\"minus\" />\r\n </button>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\ndefineProps<{\n status: 'idle' | 'ready' | 'opening' | 'error'\n errorText: string\n sectionLabel: string\n displayedPercent: number\n}>()\n\nconst emit = defineEmits<{\n (e: 'seekStart'): void\n (e: 'seekChange', val: number): void\n (e: 'seekEnd', val: number): void\n (e: 'seekCommit', val: number): void\n}>()\n</script>\n\n<template>\n <div class=\"epub-reader__bottom\">\n <div class=\"epub-reader__bottom-left\">\n <span class=\"epub-reader__status\">\n {{ status === 'error' ? errorText || '错误' : status === 'opening' ? '正在打开…' : '' }}\n </span>\n <span v-if=\"sectionLabel\" class=\"epub-reader__section\">{{ sectionLabel }}</span>\n </div>\n <div class=\"epub-reader__bottom-right\">\n <input\n class=\"epub-reader__range\"\n type=\"range\"\n :min=\"0\"\n :max=\"100\"\n :step=\"1\"\n :value=\"displayedPercent\"\n @input=\"(e: any) => {\n emit('seekStart')\n emit('seekChange', Number(e.target.value))\n }\"\n @pointerup=\"(e: any) => emit('seekEnd', Number(e.target.value))\"\n @keyup.enter=\"(e: any) => emit('seekCommit', Number(e.target.value))\"\n />\n <span class=\"epub-reader__percent\">{{ displayedPercent }}%</span>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\r\nimport type { TocItem } from '../../core/types'\r\n\r\ndefineProps<{\r\n items: TocItem[]\r\n}>()\r\n\r\nconst emit = defineEmits<{\r\n (e: 'select', href?: string): void\r\n}>()\r\n</script>\r\n\r\n<template>\r\n <ul class=\"epub-reader__toc-list\">\r\n <li v-for=\"(item, idx) in items\" :key=\"item.href || `${item.label ?? 'item'}-${idx}`\" class=\"epub-reader__toc-item\">\r\n <template v-if=\"!item.subitems?.length\">\r\n <button type=\"button\" class=\"epub-reader__toc-btn\" @click=\"emit('select', item.href)\">\r\n {{ item.label || item.href || '未命名' }}\r\n </button>\r\n </template>\r\n <template v-else>\r\n <details class=\"epub-reader__toc-details\">\r\n <summary class=\"epub-reader__toc-summary\">{{ item.label || item.href || '未命名' }}</summary>\r\n <TocTree :items=\"item.subitems\" @select=\"emit('select', $event)\" />\r\n </details>\r\n </template>\r\n </li>\r\n </ul>\r\n</template>\r\n","<script setup lang=\"ts\">\nimport type { TocItem } from '../../core/types'\nimport TocTree from './TocTree.vue'\nimport SvgIcon from './SvgIcon.vue'\n\ndefineProps<{\n isOpen: boolean\n toc: TocItem[]\n}>()\n\nconst emit = defineEmits<{\n (e: 'close'): void\n (e: 'select', href?: string): void\n}>()\n</script>\n\n<template>\n <aside :class=\"['epub-reader__drawer', { 'is-open': isOpen }]\" :aria-hidden=\"!isOpen\">\n <div class=\"epub-reader__drawer-header\">\n <div class=\"epub-reader__drawer-title\">目录</div>\n <button type=\"button\" class=\"epub-reader__btn\" @click=\"emit('close')\">\n <SvgIcon name=\"x\" />\n </button>\n </div>\n <div class=\"epub-reader__drawer-body\">\n <TocTree\n v-if=\"toc.length\"\n :items=\"toc\"\n @select=\"(href) => {\n emit('select', href)\n emit('close')\n }\"\n />\n <div v-else class=\"epub-reader__empty\">未找到目录</div>\n </div>\n </aside>\n</template>\n","<script setup lang=\"ts\">\nimport type { SearchResult } from '../../core/types'\n\ndefineProps<{\n results: SearchResult[]\n}>()\n\nconst emit = defineEmits<{\n (e: 'select', cfi: string): void\n}>()\n</script>\n\n<template>\n <ul class=\"epub-reader__search-list\">\n <li v-for=\"(r, idx) in results\" :key=\"`${r.cfi ?? 'no-cfi'}-${idx}`\" class=\"epub-reader__search-item\">\n <button\n type=\"button\"\n class=\"epub-reader__search-btn\"\n @click=\"r.cfi && emit('select', r.cfi)\"\n >\n <div v-if=\"r.label\" class=\"epub-reader__search-label\">{{ r.label }}</div>\n <div class=\"epub-reader__search-excerpt\">\n {{ typeof r.excerpt === 'string' ? r.excerpt : `${r.excerpt?.pre ?? ''}${r.excerpt?.match ?? ''}${r.excerpt?.post ?? ''}` }}\n </div>\n </button>\n </li>\n </ul>\n</template>\n","<script setup lang=\"ts\">\nimport type { SearchOptions, SearchResult } from '../../core/types'\nimport SearchResultList from './SearchResultList.vue'\nimport SvgIcon from './SvgIcon.vue'\n\ndefineProps<{\n isOpen: boolean\n status: 'idle' | 'ready' | 'opening' | 'error'\n query: string\n options: SearchOptions\n progressPercent: number\n searching: boolean\n results: SearchResult[]\n}>()\n\nconst emit = defineEmits<{\n (e: 'close'): void\n (e: 'search', query: string): void\n (e: 'update:query', val: string): void\n (e: 'update:options', val: Partial<SearchOptions>): void\n (e: 'cancelSearch'): void\n (e: 'selectResult', cfi: string): void\n}>()\n\nconst updateOption = (key: keyof SearchOptions, value: boolean) => {\n emit('update:options', { [key]: value })\n}\n</script>\n\n<template>\n <aside :class=\"['epub-reader__drawer', 'right', { 'is-open': isOpen }]\" :aria-hidden=\"!isOpen\">\n <div class=\"epub-reader__drawer-header\">\n <div class=\"epub-reader__drawer-title\">搜索</div>\n <button type=\"button\" class=\"epub-reader__btn\" @click=\"emit('close')\">\n <SvgIcon name=\"x\" />\n </button>\n </div>\n <div class=\"epub-reader__drawer-body\">\n <div class=\"epub-reader__field\">\n <input\n class=\"epub-reader__input\"\n placeholder=\"输入关键词\"\n :value=\"query\"\n :disabled=\"status !== 'ready'\"\n @input=\"(e: any) => {\n const v = e.target.value\n emit('update:query', v)\n if (!v.trim()) emit('search', '')\n }\"\n @keydown.enter=\"emit('search', query)\"\n />\n <button type=\"button\" class=\"epub-reader__btn\" :disabled=\"status !== 'ready'\" @click=\"emit('search', query)\">\n <SvgIcon name=\"search\" />\n </button>\n </div>\n\n <div class=\"epub-reader__checks\">\n <label class=\"epub-reader__check\">\n <input\n type=\"checkbox\"\n :checked=\"Boolean(options.matchCase)\"\n @change=\"(e: any) => updateOption('matchCase', e.target.checked)\"\n />\n 区分大小写\n </label>\n <label class=\"epub-reader__check\">\n <input\n type=\"checkbox\"\n :checked=\"Boolean(options.wholeWords)\"\n @change=\"(e: any) => updateOption('wholeWords', e.target.checked)\"\n />\n 全词匹配\n </label>\n <label class=\"epub-reader__check\">\n <input\n type=\"checkbox\"\n :checked=\"Boolean(options.matchDiacritics)\"\n @change=\"(e: any) => updateOption('matchDiacritics', e.target.checked)\"\n />\n 区分变音\n </label>\n </div>\n\n <div class=\"epub-reader__meta\">\n <span>进度 {{ progressPercent }}%</span>\n <span v-if=\"searching\">搜索中…</span>\n <button v-if=\"searching\" type=\"button\" class=\"epub-reader__link\" @click=\"emit('cancelSearch')\">\n 取消\n </button>\n </div>\n\n <SearchResultList v-if=\"results.length\" :results=\"results\" @select=\"(cfi) => emit('selectResult', cfi)\" />\n <div v-else class=\"epub-reader__empty\">{{ query.trim() ? '无匹配结果' : '请输入关键词' }}</div>\n </div>\n </aside>\n</template>\n","<script setup lang=\"ts\">\r\nimport { computed, nextTick, onBeforeUnmount, ref, watch } from 'vue'\r\nimport type { TocItem, SearchOptions, SearchResult } from '../../core/types'\r\nimport TocTree from './TocTree.vue'\r\nimport SearchResultList from './SearchResultList.vue'\r\nimport SvgIcon from './SvgIcon.vue'\r\nimport type { MobilePanel } from '../types'\r\n\r\nconst props = defineProps<{\r\n barVisible: boolean\r\n activePanel: MobilePanel | null\r\n \r\n // Data\r\n toc: TocItem[]\r\n status: 'idle' | 'ready' | 'opening' | 'error'\r\n errorText: string\r\n sectionLabel: string\r\n displayedPercent: number\r\n darkMode: boolean\r\n fontSize: number\r\n \r\n // Search Data\r\n searchQuery: string\r\n searchOptions: SearchOptions\r\n searchProgressPercent: number\r\n searching: boolean\r\n searchResults: SearchResult[]\r\n}>()\r\n\r\nconst emit = defineEmits<{\r\n (e: 'togglePanel', panel: MobilePanel): void\r\n (e: 'closePanel'): void\r\n \r\n (e: 'tocSelect', href?: string): void\r\n \r\n (e: 'search', query: string): void\r\n (e: 'update:searchQuery', val: string): void\r\n (e: 'update:searchOptions', val: Partial<SearchOptions>): void\r\n (e: 'cancelSearch'): void\r\n (e: 'searchResultSelect', cfi: string): void\r\n \r\n (e: 'seekStart'): void\r\n (e: 'seekChange', val: number): void\r\n (e: 'seekEnd', val: number): void\r\n (e: 'seekCommit', val: number): void\r\n \r\n (e: 'toggleDarkMode', val: boolean): void\r\n (e: 'changeFontSize', val: number): void\r\n}>()\r\n\r\nconst mobileTitle = computed(() => {\r\n switch (props.activePanel) {\r\n case 'menu': return '目录'\r\n case 'search': return '搜索'\r\n case 'progress': return '进度'\r\n case 'settings': return '设置'\r\n default: return ''\r\n }\r\n})\r\n\r\nconst clamp = (n: number, min: number, max: number) => Math.min(max, Math.max(min, n))\r\nconst displayedFontSize = computed(() => clamp(Math.round(props.fontSize / 5), 10, 40))\r\n\r\nconst fontSliderValue = ref(displayedFontSize.value)\r\nconst fontSliderWrapRef = ref<HTMLElement | null>(null)\r\nconst fontSliderWidth = ref(0)\r\nconst isFontDragging = ref(false)\r\nconst fontThumbSize = 34\r\nconst fontMin = 10\r\nconst fontMax = 40\r\nlet fontRo: ResizeObserver | null = null\r\nlet fontDebounceTimer: number | null = null\r\n\r\nwatch(displayedFontSize, (v) => {\r\n fontSliderValue.value = v\r\n})\r\n\r\nconst teardownFontResize = () => {\r\n if (fontRo) {\r\n fontRo.disconnect()\r\n fontRo = null\r\n }\r\n}\r\n\r\nconst setupFontResize = async () => {\r\n await nextTick()\r\n const el = fontSliderWrapRef.value\r\n if (!el) return\r\n const update = () => {\r\n fontSliderWidth.value = el.getBoundingClientRect().width\r\n }\r\n update()\r\n teardownFontResize()\r\n fontRo = new ResizeObserver(() => update())\r\n fontRo.observe(el)\r\n}\r\n\r\nwatch(\r\n () => props.activePanel,\r\n (p) => {\r\n if (p === 'settings') void setupFontResize()\r\n else teardownFontResize()\r\n },\r\n { immediate: true },\r\n)\r\n\r\nonBeforeUnmount(() => teardownFontResize())\r\n\r\nconst fontProgressPercent = computed(() => ((fontSliderValue.value - fontMin) / (fontMax - fontMin)) * 100)\r\nconst fontThumbLeft = computed(() => {\r\n if (!fontSliderWidth.value) return 0\r\n const percent = (fontSliderValue.value - fontMin) / (fontMax - fontMin)\r\n const half = fontThumbSize / 2\r\n return Math.min(fontSliderWidth.value - half, Math.max(half, half + percent * (fontSliderWidth.value - fontThumbSize)))\r\n})\r\n\r\nconst flushFontSize = () => {\r\n if (fontDebounceTimer) {\r\n clearTimeout(fontDebounceTimer)\r\n fontDebounceTimer = null\r\n }\r\n emit('changeFontSize', fontSliderValue.value * 5)\r\n}\r\n\r\nconst scheduleFontSize = (next: number) => {\r\n if (fontDebounceTimer) clearTimeout(fontDebounceTimer)\r\n fontDebounceTimer = window.setTimeout(() => {\r\n fontDebounceTimer = null\r\n emit('changeFontSize', next * 5)\r\n }, 80)\r\n}\r\n\r\nconst handleFontSliderInput = (e: Event) => {\r\n const next = Number((e.target as HTMLInputElement).value)\r\n fontSliderValue.value = next\r\n scheduleFontSize(next)\r\n}\r\n\r\nonBeforeUnmount(() => {\r\n if (fontDebounceTimer) clearTimeout(fontDebounceTimer)\r\n})\r\n\r\nconst updateSearchOption = (key: keyof SearchOptions, value: boolean) => {\r\n emit('update:searchOptions', { [key]: value })\r\n}\r\n\r\nconst tooltip = ref<{ text: string, left: number } | null>(null)\r\nlet timer: number | null = null\r\n\r\nconst ignoreToggle = ref(false)\r\n\r\nconst markIgnoreToggle = () => {\r\n ignoreToggle.value = true\r\n window.setTimeout(() => {\r\n ignoreToggle.value = false\r\n }, 350)\r\n}\r\n\r\nconst clearTooltip = () => {\r\n if (timer) {\r\n clearTimeout(timer)\r\n timer = null\r\n }\r\n tooltip.value = null\r\n}\r\n\r\nconst closePanelSafe = () => {\r\n emit('closePanel')\r\n clearTooltip()\r\n const el = document.activeElement\r\n if (el && el instanceof HTMLElement) el.blur()\r\n}\r\n\r\nconst togglePanelSafe = (panel: MobilePanel) => {\r\n if (ignoreToggle.value) return\r\n emit('togglePanel', panel)\r\n}\r\n\r\nconst sheetRef = ref<HTMLElement | null>(null)\r\nconst dragRef = { startY: 0, currentY: 0, isDragging: false }\r\n\r\nconst handleHeaderTouchStart = (e: TouchEvent) => {\r\n clearTooltip()\r\n dragRef.startY = e.touches[0].clientY\r\n dragRef.isDragging = true\r\n if (sheetRef.value) {\r\n sheetRef.value.style.transition = 'none'\r\n }\r\n}\r\n\r\nconst handleHeaderTouchMove = (e: TouchEvent) => {\r\n if (!dragRef.isDragging) return\r\n e.preventDefault()\r\n const deltaY = e.touches[0].clientY - dragRef.startY\r\n if (deltaY > 0 && sheetRef.value) {\r\n // 允许跟随手指下滑\r\n sheetRef.value.style.transform = `translateY(${deltaY}px)`\r\n dragRef.currentY = deltaY\r\n }\r\n}\r\n\r\nconst handleHeaderTouchEnd = () => {\r\n if (!dragRef.isDragging) return\r\n dragRef.isDragging = false\r\n \r\n if (sheetRef.value) {\r\n sheetRef.value.style.transition = '' // 恢复 CSS 中的 transition\r\n \r\n // 如果下滑距离超过 80px,则关闭\r\n if (dragRef.currentY > 80) {\r\n markIgnoreToggle()\r\n closePanelSafe()\r\n // 稍微延迟清空 transform,避免闪烁\r\n setTimeout(() => {\r\n if (sheetRef.value) sheetRef.value.style.transform = ''\r\n }, 300)\r\n } else {\r\n // 回弹\r\n sheetRef.value.style.transform = ''\r\n }\r\n }\r\n dragRef.currentY = 0\r\n}\r\n\r\nconst handleTouchStart = (e: TouchEvent, text: string) => {\r\n const target = e.currentTarget as HTMLElement\r\n const rect = target.getBoundingClientRect()\r\n timer = window.setTimeout(() => {\r\n tooltip.value = {\r\n text,\r\n left: rect.left + rect.width / 2\r\n }\r\n }, 500)\r\n}\r\n\r\nconst handleTouchEnd = () => {\r\n clearTooltip()\r\n}\r\n</script>\r\n\r\n<template>\r\n <div>\r\n <div :class=\"['epub-reader__mbar', { 'is-visible': barVisible }]\">\r\n <div \r\n v-if=\"tooltip\"\r\n class=\"epub-reader__tooltip\"\r\n :style=\"{\r\n position: 'fixed',\r\n bottom: '60px',\r\n left: `${tooltip.left}px`,\r\n transform: 'translateX(-50%)',\r\n background: 'rgba(0,0,0,0.8)',\r\n color: '#fff',\r\n padding: '4px 8px',\r\n borderRadius: '4px',\r\n fontSize: '12px',\r\n pointerEvents: 'none',\r\n zIndex: 1000,\r\n whiteSpace: 'nowrap'\r\n }\"\r\n >\r\n {{ tooltip.text }}\r\n </div>\r\n <div class=\"epub-reader__mbar-left\">\n <button \n type=\"button\" \n class=\"epub-reader__btn\" \n :aria-pressed=\"activePanel === 'menu'\" \n @click=\"togglePanelSafe('menu')\"\n @touchstart=\"(e) => handleTouchStart(e, '目录')\"\n @touchend=\"handleTouchEnd\"\n @touchcancel=\"handleTouchEnd\"\n title=\"目录\"\n >\n <SvgIcon name=\"list\" />\n </button>\n <button \n type=\"button\" \n class=\"epub-reader__btn\" \n :aria-pressed=\"activePanel === 'search'\" \n @click=\"togglePanelSafe('search')\"\n @touchstart=\"(e) => handleTouchStart(e, '搜索')\"\n @touchend=\"handleTouchEnd\"\n @touchcancel=\"handleTouchEnd\"\n title=\"搜索\"\n >\n <SvgIcon name=\"search\" />\n </button>\n <button \n type=\"button\" \n class=\"epub-reader__btn\" \n :aria-pressed=\"activePanel === 'progress'\" \n @click=\"togglePanelSafe('progress')\"\n @touchstart=\"(e) => handleTouchStart(e, '进度')\"\n @touchend=\"handleTouchEnd\"\n @touchcancel=\"handleTouchEnd\"\n title=\"进度\"\n >\n <SvgIcon name=\"sliders\" />\n </button>\n <button \n type=\"button\" \n class=\"epub-reader__btn\" \n :aria-pressed=\"activePanel === 'settings'\" \n @click=\"togglePanelSafe('settings')\"\n @touchstart=\"(e) => handleTouchStart(e, '设置')\"\n @touchend=\"handleTouchEnd\"\n @touchcancel=\"handleTouchEnd\"\n title=\"设置\"\n >\n <SvgIcon name=\"settings\" />\n </button>\n </div>\n\n <div v-if=\"$slots.toolbarRight\" class=\"epub-reader__mbar-right\">\n <slot name=\"toolbarRight\" />\n </div>\n </div>\r\n\r\n <div v-if=\"activePanel\" class=\"epub-reader__moverlay\" @click=\"closePanelSafe\" />\r\n\r\n <div \r\n ref=\"sheetRef\"\r\n :class=\"['epub-reader__msheet', { 'is-open': activePanel }]\" \r\n :aria-hidden=\"!activePanel\"\r\n >\r\n <div \r\n class=\"epub-reader__msheet-header\"\r\n @touchstart=\"handleHeaderTouchStart\"\r\n @touchmove=\"handleHeaderTouchMove\"\r\n @touchend=\"handleHeaderTouchEnd\"\r\n >\r\n <div class=\"epub-reader__msheet-title\">{{ mobileTitle }}</div>\r\n <button type=\"button\" class=\"epub-reader__btn\" @click=\"closePanelSafe\">\r\n <SvgIcon name=\"x\" />\r\n </button>\r\n </div>\r\n <div class=\"epub-reader__msheet-body\">\r\n <template v-if=\"activePanel === 'menu'\">\r\n <TocTree\r\n v-if=\"toc.length\"\r\n :items=\"toc\"\r\n @select=\"(href) => {\r\n emit('tocSelect', href)\r\n closePanelSafe()\r\n }\"\r\n />\r\n <div v-else class=\"epub-reader__empty\">未找到目录</div>\r\n </template>\r\n\r\n <template v-if=\"activePanel === 'search'\">\r\n <div class=\"epub-reader__field\">\r\n <input\r\n class=\"epub-reader__input\"\r\n placeholder=\"输入关键词\"\r\n :value=\"searchQuery\"\r\n :disabled=\"status !== 'ready'\"\r\n @input=\"(e: any) => {\r\n const v = e.target.value\r\n emit('update:searchQuery', v)\r\n if (!v.trim()) emit('search', '')\r\n }\"\r\n @keydown.enter=\"emit('search', searchQuery)\"\r\n />\r\n <button type=\"button\" class=\"epub-reader__btn\" :disabled=\"status !== 'ready'\" @click=\"emit('search', searchQuery)\">\r\n 搜索\r\n </button>\r\n </div>\r\n\r\n <div class=\"epub-reader__checks\">\r\n <label class=\"epub-reader__check\">\r\n <input\r\n type=\"checkbox\"\r\n :checked=\"Boolean(searchOptions.matchCase)\"\r\n @change=\"(e: any) => updateSearchOption('matchCase', e.target.checked)\"\r\n />\r\n 区分大小写\r\n </label>\r\n <label class=\"epub-reader__check\">\r\n <input\r\n type=\"checkbox\"\r\n :checked=\"Boolean(searchOptions.wholeWords)\"\r\n @change=\"(e: any) => updateSearchOption('wholeWords', e.target.checked)\"\r\n />\r\n 全词匹配\r\n </label>\r\n <label class=\"epub-reader__check\">\r\n <input\r\n type=\"checkbox\"\r\n :checked=\"Boolean(searchOptions.matchDiacritics)\"\r\n @change=\"(e: any) => updateSearchOption('matchDiacritics', e.target.checked)\"\r\n />\r\n 区分变音\r\n </label>\r\n </div>\r\n\r\n <div class=\"epub-reader__meta\">\r\n <span>进度 {{ searchProgressPercent }}%</span>\r\n <span v-if=\"searching\">搜索中…</span>\r\n <button v-if=\"searching\" type=\"button\" class=\"epub-reader__link\" @click=\"emit('cancelSearch')\">\r\n 取消\r\n </button>\r\n </div>\r\n\r\n <SearchResultList v-if=\"searchResults.length\" :results=\"searchResults\" @select=\"(cfi) => emit('searchResultSelect', cfi)\" />\r\n <div v-else class=\"epub-reader__empty\">{{ searchQuery.trim() ? '无匹配结果' : '请输入关键词' }}</div>\r\n </template>\r\n\r\n <template v-if=\"activePanel === 'progress'\">\r\n <div class=\"epub-reader__meta\">\r\n <span class=\"epub-reader__status\">\r\n {{ status === 'error' ? errorText || '错误' : status === 'opening' ? '正在打开…' : '' }}\r\n </span>\r\n <span v-if=\"sectionLabel\">{{ sectionLabel }}</span>\r\n </div>\r\n <div class=\"epub-reader__mprogress\">\r\n <input\r\n class=\"epub-reader__range\"\r\n type=\"range\"\r\n :min=\"0\"\r\n :max=\"100\"\r\n :step=\"1\"\r\n :value=\"displayedPercent\"\r\n @input=\"(e: any) => {\r\n emit('seekStart')\r\n emit('seekChange', Number(e.target.value))\r\n }\"\r\n @pointerup=\"(e: any) => emit('seekEnd', Number(e.target.value))\"\r\n @keyup.enter=\"(e: any) => emit('seekCommit', Number(e.target.value))\"\r\n />\r\n <div class=\"epub-reader__mprogress-percent\">{{ displayedPercent }}%</div>\r\n </div>\r\n </template>\r\n\r\n <template v-if=\"activePanel === 'settings'\">\r\n <div class=\"epub-reader__msettings\">\r\n <div class=\"epub-reader__mfont-range\">\r\n <div class=\"epub-reader__mfont-a is-small\">A</div>\r\n <div ref=\"fontSliderWrapRef\" :class=\"['epub-reader__mfont-slider', { 'is-dragging': isFontDragging }]\">\r\n <input\r\n class=\"epub-reader__range\"\r\n type=\"range\"\r\n :min=\"fontMin\"\r\n :max=\"fontMax\"\r\n :step=\"1\"\r\n :value=\"fontSliderValue\"\r\n :style=\"{ background: `linear-gradient(to right, var(--epub-reader-range-fill) 0%, var(--epub-reader-range-fill) ${fontProgressPercent}%, var(--epub-reader-range-track) ${fontProgressPercent}%, var(--epub-reader-range-track) 100%)` }\"\r\n aria-label=\"字号\"\r\n @input=\"handleFontSliderInput\"\r\n @pointerdown=\"isFontDragging = true\"\r\n @pointerup=\"() => { isFontDragging = false; flushFontSize() }\"\r\n @pointercancel=\"() => { isFontDragging = false; flushFontSize() }\"\r\n @touchstart=\"isFontDragging = true\"\r\n @touchend=\"() => { isFontDragging = false; flushFontSize() }\"\r\n />\r\n <div class=\"epub-reader__mfont-thumb\" :style=\"{ left: `${fontThumbLeft}px`, width: `${fontThumbSize}px`, height: `${fontThumbSize}px` }\">\r\n {{ fontSliderValue }}\r\n </div>\r\n </div>\r\n <div class=\"epub-reader__mfont-a is-big\">A</div>\r\n </div>\r\n\r\n <button\n type=\"button\"\n class=\"epub-reader__btn\"\n :aria-pressed=\"darkMode\"\n :aria-label=\"darkMode ? '暗黑模式:开,点击切换到亮色' : '暗黑模式:关,点击切换到暗黑'\"\n :title=\"darkMode ? '切换到亮色' : '切换到暗黑'\"\n @click=\"emit('toggleDarkMode', !darkMode)\"\n >\n <SvgIcon :name=\"darkMode ? 'sun' : 'moon'\" />\n </button>\n </div>\r\n </template>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","import { defineComponent, getCurrentInstance, h, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\r\nimport { createEBookReader } from '../core/reader.js'\r\nimport type { ProgressInfo, SearchOptions, SearchResult, TocItem } from '../core/types.js'\r\nimport { EBookReaderVuePropsDef } from './types.js'\r\nimport type { EBookReaderVueEmits, EBookReaderVueExposed, MobilePanel } from './types.js'\r\nimport DesktopToolbar from './components/DesktopToolbar.vue'\r\nimport DesktopBottomBar from './components/DesktopBottomBar.vue'\r\nimport TocDrawer from './components/TocDrawer.vue'\r\nimport SearchDrawer from './components/SearchDrawer.vue'\r\nimport MobileUI from './components/MobileUI.vue'\r\n\r\nconst MOBILE_MAX_WIDTH = 768\r\nconst WIDE_MIN_WIDTH = 1024\r\n\r\nconst clamp = (n: number, min: number, max: number) => Math.min(max, Math.max(min, n))\r\n\r\nconst mergeClassName = (...parts: Array<string | undefined>) => parts.filter(Boolean).join(' ')\r\n\r\nconst getFileNameFromContentDisposition = (contentDisposition: string | null) => {\r\n if (!contentDisposition) return null\r\n const starMatch = contentDisposition.match(/filename\\*\\s*=\\s*UTF-8''([^;]+)/i)\r\n if (starMatch?.[1]) {\r\n try {\r\n return decodeURIComponent(starMatch[1].replace(/^\"|\"$/g, ''))\r\n } catch {\r\n return starMatch[1].replace(/^\"|\"$/g, '')\r\n }\r\n }\r\n\r\n const match = contentDisposition.match(/filename\\s*=\\s*(?:\"([^\"]+)\"|([^;\\s]+))/i)\r\n return match?.[1] ?? match?.[2] ?? null\r\n}\r\n\r\nconst normalizeEpubFileName = (name: string) => {\r\n const trimmed = name.trim()\r\n if (!trimmed) return 'book.epub'\r\n if (trimmed.toLowerCase().endsWith('.epub')) return trimmed\r\n if (!trimmed.includes('.')) return `${trimmed}.epub`\r\n return trimmed\r\n}\r\n\r\nconst getFileNameFromUrl = (url: string) => {\r\n try {\r\n const u = new URL(url, window.location.href)\r\n const last = u.pathname.split('/').filter(Boolean).pop()\r\n return last ? decodeURIComponent(last) : null\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\nconst downloadEpubAsFile = async (url: string, signal: AbortSignal) => {\r\n const res = await fetch(url, { signal })\r\n if (!res.ok) throw new Error(`下载失败 (${res.status})`)\r\n const blob = await res.blob()\r\n\r\n const headerName = getFileNameFromContentDisposition(res.headers.get('content-disposition'))\r\n const urlName = getFileNameFromUrl(url)\r\n const fileName = normalizeEpubFileName(headerName ?? urlName ?? 'book.epub')\r\n const type = blob.type || 'application/epub+zip'\r\n\r\n return new File([blob], fileName, { type })\r\n}\r\n\r\nexport const EBookReaderVue = defineComponent({\r\n name: 'EBookReaderVue',\r\n props: EBookReaderVuePropsDef,\r\n emits: ['ready', 'error', 'progress', 'fontSizeChange', 'darkModeChange', 'update:fontSize', 'update:darkMode'],\r\n setup(props, { emit, expose, slots }) {\r\n const instance = getCurrentInstance()\r\n const isPropProvided = (key: string) => {\r\n const vnodeProps = instance?.vnode.props\r\n if (!vnodeProps) return false\r\n return Object.prototype.hasOwnProperty.call(vnodeProps, key)\r\n }\r\n\r\n const rootEl = ref<HTMLElement | null>(null)\r\n const viewerHost = ref<HTMLElement | null>(null)\r\n const reader = ref<ReturnType<typeof createEBookReader> | null>(null)\r\n\r\n const status = ref<'idle' | 'ready' | 'opening' | 'error'>('idle')\r\n const errorText = ref('')\r\n const downloadLoading = ref<null | 'download' | 'open'>(null)\r\n const toc = ref<TocItem[]>([])\r\n const tocOpen = ref(false)\r\n const searchOpen = ref(false)\r\n\r\n const progressInfo = ref<ProgressInfo | null>(null)\r\n const isSeeking = ref(false)\r\n const isDragging = ref(false)\r\n const seekPercent = ref(0)\r\n\r\n const layout = ref<'mobile' | 'default' | 'wide'>('default')\r\n const mobileBarVisible = ref(false)\r\n const mobilePanel = ref<MobilePanel | null>(null)\r\n\r\n const uncontrolledFontSize = ref(props.defaultFontSize ?? 100)\r\n const uncontrolledDarkMode = ref(Boolean(props.defaultDarkMode))\r\n\r\n const fontSize = () => (props.fontSize ?? uncontrolledFontSize.value)\r\n const darkMode = () => (isPropProvided('darkMode') ? Boolean(props.darkMode) : uncontrolledDarkMode.value)\r\n\r\n const searchQuery = ref('')\r\n const searchOptions = ref<SearchOptions>(props.defaultSearchOptions ?? { matchCase: false, wholeWords: false, matchDiacritics: false })\r\n const searchProgressPercent = ref(0)\r\n const searching = ref(false)\r\n const searchResults = ref<SearchResult[]>([])\r\n\r\n const closeDrawers = () => {\r\n tocOpen.value = false\r\n searchOpen.value = false\r\n }\r\n\r\n const closeMobileSheet = () => {\r\n mobilePanel.value = null\r\n }\r\n\r\n const toggleMobilePanel = (panel: MobilePanel) => {\r\n mobileBarVisible.value = true\r\n mobilePanel.value = mobilePanel.value === panel ? null : panel\r\n }\r\n\r\n const setDarkModeInternal = (next: boolean) => {\r\n if (!isPropProvided('darkMode')) uncontrolledDarkMode.value = next\r\n emit('update:darkMode', next)\r\n emit('darkModeChange', next)\r\n reader.value?.setDarkMode(next)\r\n }\r\n\r\n const setFontSizeInternal = (next: number) => {\r\n const safe = clamp(next, 50, 300)\r\n if (props.fontSize == null) uncontrolledFontSize.value = safe\r\n emit('update:fontSize', safe)\r\n emit('fontSizeChange', safe)\r\n reader.value?.setFontSize(safe)\r\n }\r\n\r\n const openFile = async (nextFile: File) => {\r\n if (!reader.value) return\r\n status.value = 'opening'\r\n errorText.value = ''\r\n toc.value = []\r\n progressInfo.value = null\r\n isSeeking.value = false\r\n seekPercent.value = 0\r\n searchResults.value = []\r\n searchProgressPercent.value = 0\r\n searching.value = false\r\n\r\n try {\r\n await reader.value.open(nextFile)\r\n status.value = 'ready'\r\n } catch (e: any) {\r\n status.value = 'error'\r\n errorText.value = e?.message ? String(e.message) : '打开失败'\r\n emit('error', e)\r\n }\r\n }\r\n\r\n let openController: AbortController | null = null\r\n\r\n const openFromProps = async () => {\r\n if (!reader.value) return\r\n\r\n openController?.abort()\r\n openController = null\r\n downloadLoading.value = null\r\n\r\n if (props.file) {\r\n await openFile(props.file)\r\n return\r\n }\r\n\r\n const nextUrl = props.fileUrl?.trim()\r\n if (!nextUrl) return\r\n\r\n const controller = new AbortController()\r\n openController = controller\r\n downloadLoading.value = 'download'\r\n\r\n status.value = 'opening'\r\n errorText.value = ''\r\n toc.value = []\r\n progressInfo.value = null\r\n isSeeking.value = false\r\n seekPercent.value = 0\r\n searchResults.value = []\r\n searchProgressPercent.value = 0\r\n searching.value = false\r\n\r\n try {\r\n const downloaded = await downloadEpubAsFile(nextUrl, controller.signal)\r\n if (controller.signal.aborted) return\r\n if (openController !== controller) return\r\n downloadLoading.value = 'open'\r\n await openFile(downloaded)\r\n } catch (e: any) {\r\n if (e?.name === 'AbortError') return\r\n status.value = 'error'\r\n errorText.value = e?.message ? String(e.message) : '下载失败'\r\n emit('error', e)\r\n } finally {\r\n if (openController === controller) downloadLoading.value = null\r\n }\r\n }\r\n\r\n const runSearch = async (query: string) => {\r\n const r = reader.value\r\n const normalized = query.trim()\r\n searchQuery.value = query\r\n searchProgressPercent.value = 0\r\n searching.value = Boolean(normalized)\r\n\r\n if (!r || !normalized) {\r\n r?.clearSearch()\r\n searchResults.value = []\r\n searching.value = false\r\n return\r\n }\r\n\r\n r.cancelSearch()\r\n try {\r\n const results = await r.search(normalized, searchOptions.value)\r\n searchResults.value = results\r\n searchProgressPercent.value = 100\r\n } catch (e) {\r\n emit('error', e)\r\n } finally {\r\n searching.value = false\r\n }\r\n }\r\n\r\n const keydownHandler = (e: KeyboardEvent) => {\r\n if (!props.enableKeyboardNav) return\r\n if (e.key === 'ArrowLeft') reader.value?.prevPage()\r\n if (e.key === 'ArrowRight') reader.value?.nextPage()\r\n if (e.key === 'Escape') closeDrawers()\r\n }\r\n\r\n let gestureStartX = 0\r\n let gestureStartY = 0\r\n let gestureTracking = false\r\n let gestureMoved = false\r\n let gestureActionTaken = false\r\n let gestureStartAt = 0\r\n const boundDocs = new WeakSet<Document>()\r\n\r\n const pointerDownHandler = (e: PointerEvent) => {\r\n if (layout.value !== 'mobile') return\r\n const t = e.target as HTMLElement | null\r\n if (!t) return\r\n if (t.closest('.epub-reader__mbar') || t.closest('.epub-reader__msheet')) return\r\n if (t.closest('a,button,input,textarea,select,label,[role=\"button\"],[contenteditable=\"true\"]')) return\r\n gestureTracking = true\r\n gestureMoved = false\r\n gestureActionTaken = false\r\n gestureStartAt = e.timeStamp\r\n gestureStartX = e.screenX\r\n gestureStartY = e.screenY\r\n }\r\n\r\n const pointerMoveHandler = (e: PointerEvent) => {\r\n if (!gestureTracking) return\r\n const dx = e.screenX - gestureStartX\r\n const dy = e.screenY - gestureStartY\r\n\r\n if (Math.abs(dx) > 8 || Math.abs(dy) > 8) gestureMoved = true\r\n if (Math.abs(dy) < 8) return\r\n\r\n if (Math.abs(dy) < Math.abs(dx)) {\r\n if (Math.abs(dx) >= 8) gestureTracking = false\r\n return\r\n }\r\n\r\n if (dy <= -24) {\r\n gestureActionTaken = true\r\n gestureTracking = false\r\n mobileBarVisible.value = true\r\n return\r\n }\r\n if (dy >= 24) {\r\n gestureActionTaken = true\r\n gestureTracking = false\r\n mobileBarVisible.value = false\r\n mobilePanel.value = null\r\n }\r\n }\r\n\r\n const pointerEndHandler = (e: PointerEvent) => {\r\n if (layout.value !== 'mobile') {\r\n gestureTracking = false\r\n return\r\n }\r\n\r\n if (gestureActionTaken) {\r\n gestureTracking = false\r\n gestureMoved = false\r\n gestureActionTaken = false\r\n return\r\n }\r\n\r\n if (!gestureTracking) {\r\n gestureMoved = false\r\n return\r\n }\r\n\r\n const dx = e.screenX - gestureStartX\r\n const dy = e.screenY - gestureStartY\r\n const dt = e.timeStamp - gestureStartAt\r\n const isTap = !gestureMoved && Math.hypot(dx, dy) <= 10 && dt <= 300\r\n\r\n if (isTap) {\r\n const next = !mobileBarVisible.value\r\n mobileBarVisible.value = next\r\n if (!next) mobilePanel.value = null\r\n }\r\n\r\n gestureTracking = false\r\n gestureMoved = false\r\n }\r\n\r\n const bindContentPointerListeners = (doc: Document) => {\r\n if (boundDocs.has(doc)) return\r\n boundDocs.add(doc)\r\n doc.addEventListener('pointerdown', pointerDownHandler)\r\n doc.addEventListener('pointermove', pointerMoveHandler)\r\n doc.addEventListener('pointerup', pointerEndHandler)\r\n doc.addEventListener('pointercancel', pointerEndHandler)\r\n }\r\n\r\n let ro: ResizeObserver | null = null\r\n\r\n onMounted(async () => {\r\n await nextTick()\r\n const host = viewerHost.value\r\n if (!host) return\r\n\r\n try {\r\n reader.value = createEBookReader(host, {\r\n darkMode: darkMode(),\r\n fontSize: fontSize(),\r\n onReady: (h) => emit('ready', h),\r\n onError: (e) => emit('error', e),\r\n onProgress: (info) => {\r\n progressInfo.value = info\r\n if (!isDragging.value) {\r\n isSeeking.value = false\r\n }\r\n emit('progress', info)\r\n },\r\n onToc: (items) => (toc.value = items),\r\n onSearchProgress: (info) => {\r\n if (typeof info.progress === 'number') searchProgressPercent.value = Math.round(info.progress * 100)\r\n },\r\n onContentLoad: (doc) => bindContentPointerListeners(doc),\r\n })\r\n status.value = 'ready'\r\n } catch (e: any) {\r\n status.value = 'error'\r\n errorText.value = e?.message ? String(e.message) : '初始化失败'\r\n emit('error', e)\r\n return\r\n }\r\n\r\n void openFromProps()\r\n\r\n const root = rootEl.value\r\n if (root) {\r\n root.addEventListener('keydown', keydownHandler)\r\n root.addEventListener('pointerdown', pointerDownHandler)\r\n root.addEventListener('pointermove', pointerMoveHandler)\r\n root.addEventListener('pointerup', pointerEndHandler)\r\n root.addEventListener('pointercancel', pointerEndHandler)\r\n }\r\n\r\n if (root) {\r\n ro = new ResizeObserver((entries) => {\r\n const w = entries[0]?.contentRect?.width ?? root.getBoundingClientRect().width\r\n layout.value = w <= MOBILE_MAX_WIDTH ? 'mobile' : w >= WIDE_MIN_WIDTH ? 'wide' : 'default'\r\n })\r\n ro.observe(root)\r\n }\r\n })\r\n\r\n onBeforeUnmount(() => {\r\n openController?.abort()\r\n downloadLoading.value = null\r\n const root = rootEl.value\r\n if (root) {\r\n root.removeEventListener('keydown', keydownHandler)\r\n root.removeEventListener('pointerdown', pointerDownHandler)\r\n root.removeEventListener('pointermove', pointerMoveHandler)\r\n root.removeEventListener('pointerup', pointerEndHandler)\r\n root.removeEventListener('pointercancel', pointerEndHandler)\r\n }\r\n ro?.disconnect()\r\n reader.value?.destroy()\r\n reader.value = null\r\n })\r\n\r\n watch(\r\n () => [props.file, props.fileUrl],\r\n () => void openFromProps(),\r\n )\r\n\r\n watch(\r\n () => darkMode(),\r\n (v) => reader.value?.setDarkMode(Boolean(v)),\r\n )\r\n\r\n watch(\r\n () => fontSize(),\r\n (v) => reader.value?.setFontSize(Number(v)),\r\n )\r\n\r\n watch(\r\n () => layout.value,\r\n (v) => {\r\n closeDrawers()\r\n if (v !== 'mobile') {\r\n mobilePanel.value = null\r\n mobileBarVisible.value = false\r\n }\r\n },\r\n )\r\n\r\n expose<EBookReaderVueExposed>({\r\n prevPage: () => reader.value?.prevPage(),\r\n nextPage: () => reader.value?.nextPage(),\r\n prevSection: () => reader.value?.prevSection(),\r\n nextSection: () => reader.value?.nextSection(),\r\n goTo: (t) => reader.value?.goTo(t),\r\n goToFraction: (f) => reader.value?.goToFraction(f),\r\n search: (q, o) => (reader.value ? reader.value.search(q, o) : Promise.resolve([])),\r\n cancelSearch: () => reader.value?.cancelSearch(),\r\n clearSearch: () => reader.value?.clearSearch(),\r\n })\r\n\r\n return () => {\r\n const pct = Math.round((progressInfo.value?.fraction ?? 0) * 100)\r\n const displayed = isSeeking.value ? seekPercent.value : pct\r\n const sectionLabel = progressInfo.value?.tocItem?.label ?? ''\r\n const isMobile = layout.value === 'mobile'\r\n\r\n const viewer = h('div', { class: 'epub-reader__viewer', ref: viewerHost })\r\n const loading = downloadLoading.value\r\n ? h('div', { class: 'epub-reader__loading', role: 'status', 'aria-live': 'polite' }, [\r\n h('div', { class: 'epub-reader__spinner', 'aria-hidden': 'true' }),\r\n h('div', { class: 'epub-reader__loading-text' }, downloadLoading.value === 'download' ? '下载中…' : '加载中…'),\r\n ])\r\n : null\r\n\r\n const children = isMobile\r\n ? [\r\n viewer,\r\n loading,\r\n h(MobileUI, {\r\n barVisible: mobileBarVisible.value,\r\n activePanel: mobilePanel.value,\r\n toc: toc.value,\r\n status: status.value,\r\n errorText: errorText.value,\r\n sectionLabel: sectionLabel,\r\n displayedPercent: displayed,\r\n darkMode: darkMode(),\r\n fontSize: fontSize(),\r\n searchQuery: searchQuery.value,\r\n searchOptions: searchOptions.value,\r\n searchProgressPercent: searchProgressPercent.value,\r\n searching: searching.value,\r\n searchResults: searchResults.value,\r\n \r\n onTogglePanel: toggleMobilePanel,\r\n onClosePanel: closeMobileSheet,\r\n onTocSelect: (href: string | undefined) => {\r\n if (href) reader.value?.goTo(href)\r\n },\r\n onSearch: (q: string) => void runSearch(q),\r\n 'onUpdate:searchQuery': (v: string) => (searchQuery.value = v),\r\n 'onUpdate:searchOptions': (v: Partial<SearchOptions>) => (searchOptions.value = { ...searchOptions.value, ...v }),\r\n onCancelSearch: () => reader.value?.cancelSearch(),\r\n onSearchResultSelect: (cfi: string) => {\r\n if (cfi) reader.value?.goTo(cfi)\r\n },\r\n onSeekStart: () => {\r\n isSeeking.value = true\r\n isDragging.value = true\r\n },\r\n onSeekChange: (v: number) => (seekPercent.value = v),\r\n onSeekEnd: (v: number) => {\r\n isDragging.value = false\r\n reader.value?.goToFraction(v / 100)\r\n },\r\n onSeekCommit: (v: number) => {\r\n isDragging.value = false\r\n reader.value?.goToFraction(v / 100)\r\n },\r\n onToggleDarkMode: setDarkModeInternal,\r\n onChangeFontSize: setFontSizeInternal,\r\n }, {\r\n toolbarRight: () => slots.mobileToolbarRight?.(),\r\n }),\r\n ]\r\n : [\r\n viewer,\r\n loading,\r\n h(DesktopToolbar, {\r\n darkMode: darkMode(),\r\n fontSize: fontSize(),\r\n onToggleToc: () => (tocOpen.value = true),\r\n onToggleSearch: () => (searchOpen.value = true),\r\n onPrevSection: () => reader.value?.prevSection(),\r\n onPrevPage: () => reader.value?.prevPage(),\r\n onNextPage: () => reader.value?.nextPage(),\r\n onNextSection: () => reader.value?.nextSection(),\r\n onToggleDarkMode: () => setDarkModeInternal(!darkMode()),\r\n onChangeFontSize: setFontSizeInternal,\r\n }),\r\n tocOpen.value || searchOpen.value ? h('div', { class: 'epub-reader__overlay', onClick: closeDrawers }) : null,\r\n h(TocDrawer, {\r\n isOpen: tocOpen.value,\r\n toc: toc.value,\r\n onClose: () => (tocOpen.value = false),\r\n onSelect: (href: string | undefined) => {\r\n if (href) reader.value?.goTo(href)\r\n },\r\n }),\r\n h(SearchDrawer, {\r\n isOpen: searchOpen.value,\r\n status: status.value,\r\n query: searchQuery.value,\r\n options: searchOptions.value,\r\n progressPercent: searchProgressPercent.value,\r\n searching: searching.value,\r\n results: searchResults.value,\r\n onClose: () => (searchOpen.value = false),\r\n onSearch: (q: string) => void runSearch(q),\r\n 'onUpdate:query': (v: string) => (searchQuery.value = v),\r\n 'onUpdate:options': (v: Partial<SearchOptions>) => (searchOptions.value = { ...searchOptions.value, ...v }),\r\n onCancelSearch: () => reader.value?.cancelSearch(),\r\n onSelectResult: (cfi: string) => {\r\n if (cfi) reader.value?.goTo(cfi)\r\n },\r\n }),\r\n h(DesktopBottomBar, {\r\n status: status.value,\r\n errorText: errorText.value,\r\n sectionLabel: sectionLabel,\r\n displayedPercent: displayed,\r\n onSeekStart: () => {\r\n isSeeking.value = true\r\n isDragging.value = true\r\n },\r\n onSeekChange: (v: number) => (seekPercent.value = v),\r\n onSeekEnd: (v: number) => {\r\n isDragging.value = false\r\n reader.value?.goToFraction(v / 100)\r\n },\r\n onSeekCommit: (v: number) => {\r\n isDragging.value = false\r\n reader.value?.goToFraction(v / 100)\r\n },\r\n }),\r\n ]\r\n\r\n return h(\r\n 'div',\r\n {\r\n ref: rootEl,\r\n class: 'epub-reader',\r\n 'data-theme': darkMode() ? 'dark' : 'light',\r\n 'data-layout': layout.value,\r\n 'aria-busy': downloadLoading.value != null,\r\n tabindex: 0,\r\n },\r\n children,\r\n )\r\n }\r\n },\r\n})\r\n"]}
1
+ {"version":3,"sources":["../src/core/reader.ts","../src/vue/types.ts","unplugin-vue:%00/plugin-vue/export-helper","../src/vue/components/TocTree.vue","../src/vue/components/SearchResultList.vue","../src/core/icons.ts","../src/vue/components/SvgIcon.vue","../src/vue/components/MobileUI.vue","../src/vue/EBookReaderVue.ts"],"names":["_openBlock","_createElementBlock","_Fragment","_renderList","_toDisplayString","_createElementVNode","_createVNode","_hoisted_1","_hoisted_3","_createCommentVNode","_hoisted_4","_hoisted_2","_normalizeStyle","computed","clamp","_normalizeClass","_toDisplayString3","_renderSlot","_createBlock","_withKeys","_hoisted_12","_hoisted_13","_hoisted_22","_hoisted_23","_hoisted_32","_hoisted_33","ref","dx","dy","nextTick","h","onBeforeUnmount","watch"],"mappings":";;;;AAsBA,IAAM,gBAAgB,CAAC,QAAA,EAAkB,MAAA,EAAiB,UAAA,EAAoB,eAAuB,QAAA,KAAsB;AAAA;AAAA;AAAA,gBAAA,EAGzG,MAAA,GAAS,SAAS,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA,SAAA,EAIhC,MAAA,GAAS,YAAY,OAAO,CAAA;AAAA,aAAA,EACxB,QAAQ,CAAA;AAAA,eAAA,EACN,UAAU,CAAA;AAAA,kBAAA,EACP,aAAa,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAA,EAOtB,MAAA,GAAS,YAAY,SAAS,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,EAMrC,MAAA,GAAS,2CAA2C,EAAE;AAAA;AAAA,EAExD,YAAY,EAAE;AAAA,CAAA;AAGT,SAAS,iBAAA,CAAkB,SAAA,EAAwB,OAAA,GAA8B,EAAC,EAAsB;AAC7G,EAAA,IAAI,CAAC,SAAA,EAAW,MAAM,IAAI,MAAM,uBAAuB,CAAA;AACvD,EAAA,IAAI,CAAC,eAAe,GAAA,CAAI,cAAc,GAAG,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAEtF,EAAA,MAAM;AAAA,IACJ,UAAU,eAAA,GAAkB,KAAA;AAAA,IAC5B,UAAU,eAAA,GAAkB,GAAA;AAAA,IAC5B,YAAY,iBAAA,GAAoB,GAAA;AAAA,IAChC,eAAe,oBAAA,GAAuB,CAAA;AAAA,IACtC,eAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAA;AAEJ,EAAA,IAAI,SAAA,GAAY,KAAA;AAChB,EAAA,IAAI,MAAiB,EAAC;AACtB,EAAA,IAAI,QAAA,GAAW,eAAA;AACf,EAAA,IAAI,QAAA,GAAW,eAAA;AACf,EAAA,IAAI,UAAA,GAAa,iBAAA;AACjB,EAAA,IAAI,aAAA,GAAgB,oBAAA;AACpB,EAAA,IAAI,WAAA,GAAc,CAAA;AAElB,EAAA,SAAA,CAAU,SAAA,GAAY,EAAA;AAEtB,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,cAAc,CAAA;AACpD,EAAA,MAAA,CAAO,MAAM,OAAA,GAAU,OAAA;AACvB,EAAA,MAAA,CAAO,MAAM,KAAA,GAAQ,MAAA;AACrB,EAAA,MAAA,CAAO,MAAM,MAAA,GAAS,MAAA;AACtB,EAAA,MAAA,CAAO,YAAA,CAAa,UAAU,IAAI,CAAA;AAClC,EAAA,MAAA,CAAO,YAAA,CAAa,OAAO,MAAM,CAAA;AAEjC,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,SAAA,EAAW;AACf,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,EAAU,SAAA,EAAW;AACjC,IAAA,MAAA,CAAO,QAAA,CAAS,UAAU,aAAA,CAAc,QAAA,EAAU,UAAU,UAAA,EAAY,aAAA,EAAe,eAAe,CAAC,CAAA;AACvG,IAAA,qBAAA,CAAsB,MAAM;AAC1B,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,IAAI,SAAA,EAAW;AACf,QAAA,MAAA,CAAO,UAAU,MAAA,IAAS;AAC1B,QAAA,MAAA,CAAO,UAAU,MAAA,IAAS;AAAA,MAC5B,GAAG,EAAE,CAAA;AAAA,IACP,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAa;AAC/B,IAAA,WAAA,EAAY;AACZ,IAAA,MAAM,SAAU,CAAA,CAAkB,MAAA;AAClC,IAAA,IAAI,MAAA,EAAQ,GAAA,EAAK,aAAA,GAAgB,MAAA,CAAO,GAAG,CAAA;AAAA,EAC7C,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAa;AACnC,IAAA,MAAM,SAAU,CAAA,CAAkB,MAAA;AAClC,IAAA,UAAA,GAAa,MAAM,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,MAAA,CAAO,gBAAA,CAAiB,QAAQ,UAA2B,CAAA;AAC3D,EAAA,MAAA,CAAO,gBAAA,CAAiB,YAAY,cAA+B,CAAA;AAEnE,EAAA,SAAA,CAAU,YAAY,MAAM,CAAA;AAE5B,EAAA,MAAM,MAAA,GAA4B;AAAA,IAChC,MAAM,KAAK,IAAA,EAAM;AACf,MAAA,IAAI,SAAA,EAAW;AACf,MAAA,IAAI,CAAC,IAAA,EAAM;AAEX,MAAA,IAAI;AACF,QAAA,MAAA,CAAO,WAAA,IAAc;AACrB,QAAA,WAAA,EAAA;AAEA,QAAA,MAAM,MAAA,CAAO,OAAO,IAAI,CAAA;AAExB,QAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,EAAM,GAAA,IAAO,EAAC;AACrC,QAAA,GAAA,GAAM,OAAA;AACN,QAAA,KAAA,GAAQ,GAAG,CAAA;AAEX,QAAA,MAAM,MAAA,CAAO,IAAA,GAAO,EAAE,aAAA,EAAe,MAAM,CAAA;AAC3C,QAAA,WAAA,EAAY;AAAA,MACd,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,GAAU,KAAK,CAAA;AACf,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IACA,OAAA,GAAU;AACR,MAAA,IAAI,SAAA,EAAW;AACf,MAAA,SAAA,GAAY,IAAA;AACZ,MAAA,WAAA,EAAA;AACA,MAAA,MAAA,CAAO,mBAAA,CAAoB,QAAQ,UAAU,CAAA;AAC7C,MAAA,MAAA,CAAO,mBAAA,CAAoB,YAAY,cAA+B,CAAA;AACtE,MAAA,SAAA,CAAU,SAAA,GAAY,EAAA;AAAA,IACxB,CAAA;AAAA,IACA,QAAA,GAAW;AACT,MAAA,MAAA,CAAO,MAAA,IAAS;AAAA,IAClB,CAAA;AAAA,IACA,QAAA,GAAW;AACT,MAAA,MAAA,CAAO,OAAA,IAAU;AAAA,IACnB,CAAA;AAAA,IACA,WAAA,GAAc;AACZ,MAAA,MAAA,CAAO,UAAU,WAAA,IAAc;AAAA,IACjC,CAAA;AAAA,IACA,WAAA,GAAc;AACZ,MAAA,MAAA,CAAO,UAAU,WAAA,IAAc;AAAA,IACjC,CAAA;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,MAAA,CAAO,OAAO,MAAM,CAAA;AAAA,IACtB,CAAA;AAAA,IACA,aAAa,QAAA,EAAU;AACrB,MAAA,MAAM,IAAA,GAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAC,CAAA;AAC9C,MAAA,MAAA,CAAO,eAAe,IAAI,CAAA;AAAA,IAC5B,CAAA;AAAA,IACA,YAAY,YAAA,EAAc;AACxB,MAAA,QAAA,GAAW,YAAA;AACX,MAAA,WAAA,EAAY;AAAA,IACd,CAAA;AAAA,IACA,YAAY,YAAA,EAAc;AACxB,MAAA,MAAM,IAAA,GAAO,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,GAAA,CAAI,EAAA,EAAI,YAAY,CAAC,CAAA;AACrD,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,WAAA,EAAY;AAAA,IACd,CAAA;AAAA,IACA,cAAc,cAAA,EAAgB;AAC5B,MAAA,MAAM,IAAA,GAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,cAAc,CAAC,CAAA;AACpD,MAAA,UAAA,GAAa,IAAA;AACb,MAAA,WAAA,EAAY;AAAA,IACd,CAAA;AAAA,IACA,iBAAiB,iBAAA,EAAmB;AAClC,MAAA,MAAM,IAAA,GAAO,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,GAAA,CAAI,CAAA,EAAG,iBAAiB,CAAC,CAAA;AACzD,MAAA,aAAA,GAAgB,IAAA;AAChB,MAAA,WAAA,EAAY;AAAA,IACd,CAAA;AAAA,IACA,MAAM,MAAA,CAAO,KAAA,EAAO,IAAA,GAAsB,EAAC,EAAG;AAC5C,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,EAAK;AAC9B,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAA,CAAO,WAAA,IAAc;AACrB,QAAA,OAAO,EAAC;AAAA,MACV;AAEA,MAAA,MAAM,QAAQ,EAAE,WAAA;AAChB,MAAA,MAAM,UAA0B,EAAC;AAEjC,MAAA,IAAI;AACF,QAAA,WAAA,MAAiB,IAAA,IAAQ,OAAO,MAAA,GAAS;AAAA,UACvC,KAAA,EAAO,UAAA;AAAA,UACP,SAAA,EAAW,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAA;AAAA,UACjC,eAAA,EAAiB,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAAA,UACxC,eAAA,EAAiB,OAAA,CAAQ,IAAA,CAAK,eAAe;AAAA,SAC9C,CAAA,IAAK,EAAC,EAAG;AACR,UAAA,IAAI,SAAA,IAAa,KAAA,KAAU,WAAA,EAAa,OAAO,OAAA;AAE/C,UAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,YAAA,gBAAA,GAAmB,EAAE,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,GAAG,CAAA;AAC9C,YAAA;AAAA,UACF;AAEA,UAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,IAAQ,cAAe,IAAA,EAAc;AACnE,YAAA,MAAM,WAAY,IAAA,CAAa,QAAA;AAC/B,YAAA,IAAI,OAAO,QAAA,KAAa,QAAA,EAAU,gBAAA,GAAmB,EAAE,UAAU,CAAA;AACjE,YAAA;AAAA,UACF;AAEA,UAAA,MAAM,OAAA,GAAU,IAAA;AAChB,UAAA,IAAI,OAAA,EAAS,UAAU,MAAA,EAAQ;AAC7B,YAAA,KAAA,MAAW,GAAA,IAAO,QAAQ,QAAA,EAAU;AAClC,cAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,gBACX,OAAO,OAAA,CAAQ,KAAA;AAAA,gBACf,KAAK,GAAA,EAAK,GAAA;AAAA,gBACV,SAAS,GAAA,EAAK,OAAA;AAAA,gBACd,OAAO,GAAA,EAAK;AAAA,eACb,CAAA;AAAA,YACH;AAAA,UACF,CAAA,MAAA,IAAW,SAAS,GAAA,EAAK;AACvB,YAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,cACX,KAAK,OAAA,CAAQ,GAAA;AAAA,cACb,SAAS,OAAA,CAAQ,OAAA;AAAA,cACjB,OAAO,OAAA,CAAQ;AAAA,aAChB,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,GAAU,KAAK,CAAA;AACf,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,YAAA,GAAe;AACb,MAAA,WAAA,EAAA;AAAA,IACF,CAAA;AAAA,IACA,WAAA,GAAc;AACZ,MAAA,MAAA,CAAO,WAAA,IAAc;AAAA,IACvB,CAAA;AAAA,IACA,MAAA,GAAS;AACP,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,GACF;AAEA,EAAA,OAAA,GAAU,MAAM,CAAA;AAChB,EAAA,OAAO,MAAA;AACT;;;ACjOO,IAAM,sBAAA,GAAyB;AAAA,EACpC,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAAiC,UAAU,KAAA,EAAM;AAAA,EAC/D,OAAA,EAAS,EAAE,IAAA,EAAM,MAAA,EAAQ,UAAU,KAAA,EAAM;AAAA,EACzC,UAAA,EAAY,EAAE,IAAA,EAAM,MAAA,EAAQ,UAAU,KAAA,EAAM;AAAA,EAC5C,iBAAiB,EAAE,IAAA,EAAM,QAAQ,QAAA,EAAU,KAAA,EAAO,SAAS,GAAA,EAAI;AAAA,EAC/D,QAAA,EAAU,EAAE,IAAA,EAAM,MAAA,EAAQ,UAAU,KAAA,EAAM;AAAA,EAC1C,mBAAmB,EAAE,IAAA,EAAM,QAAQ,QAAA,EAAU,KAAA,EAAO,SAAS,GAAA,EAAI;AAAA,EACjE,UAAA,EAAY,EAAE,IAAA,EAAM,MAAA,EAAQ,UAAU,KAAA,EAAM;AAAA,EAC5C,sBAAsB,EAAE,IAAA,EAAM,QAAQ,QAAA,EAAU,KAAA,EAAO,SAAS,CAAA,EAAE;AAAA,EAClE,aAAA,EAAe,EAAE,IAAA,EAAM,MAAA,EAAQ,UAAU,KAAA,EAAM;AAAA,EAC/C,iBAAiB,EAAE,IAAA,EAAM,SAAS,QAAA,EAAU,KAAA,EAAO,SAAS,KAAA,EAAM;AAAA,EAClE,QAAA,EAAU,EAAE,IAAA,EAAM,OAAA,EAAS,UAAU,KAAA,EAAM;AAAA,EAC3C,mBAAmB,EAAE,IAAA,EAAM,SAAS,QAAA,EAAU,KAAA,EAAO,SAAS,IAAA,EAAK;AAAA,EACnE,oBAAA,EAAsB;AAAA,IACpB,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU,KAAA;AAAA,IACV,OAAA,EAAS,OAAO,EAAE,SAAA,EAAW,OAAO,UAAA,EAAY,KAAA,EAAO,iBAAiB,KAAA,EAAM;AAAA;AAElF,CAAA;;;AC3CA,IAAO,qBAAA,GAAQ,CAAC,GAAA,EAAK,KAAA,KAAU;AAC7B,EAAA,MAAM,MAAA,GAAS,IAAI,SAAA,IAAa,GAAA;AAChC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,GAAG,CAAA,IAAK,KAAA,EAAO;AAC9B,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,GAAA;AAAA,EAChB;AACA,EAAA,OAAO,MAAA;AACT,CAAA;;;;;;;;;;;;ACAA,IAAA,MAAM,IAAA,GAAO,MAAA;;;;;;;;;AAMP,IAAA,UAAA,GAAA,EAAA,KAAA,EAAM,uBAAA,EAAA;;;;EAQK,KAAA,EAAM;;AACJ,IAAA,UAAA,GAAA,EAAA,KAAA,EAAM,0BAAA,EAAA;;;AATvB,EAAA,OAAAA,SAAA,EAAA,EAAAC,kBAAA,CAcK,IAAA,EAdL,UAAA,EAcK,EAAAD,SAAA,CAAA,IAAA,CAAA,EAbHC,kBAAA;AAYK,IAAAC,QAAA;AAAA,IAAA,IAAA;AAAA,IAAAC,UAAA,CAZqB,MAAA,CAAA,KAAA,EAAA,CAAd,IAAA,EAAM,GAAA,KAAG;AAArB,MAAA,OAAAH,SAAA,EAAA,EAAAC,kBAAA,CAYK,IAAA,EAAA;AAZ6B,QAAA,GAAA,EAAK,KAAK,IAAA,IAAI,CAAA,EAAO,KAAK,KAAA,IAAK,MAAA,IAAc,GAAA,CAAA,CAAA;QAAO,KAAA,EAAM;AACzE,OAAA,EAAA,CAAA,CAAA,IAAA,CAAK,QAAA,EAAU,MAAA,IAAAD,SAAA,EAAA,EAC9BC,mBAES,QAAA,EAAA;;QAFD,IAAA,EAAK,QAAA;QAAS,KAAA,EAAM,sBAAA;AAAwB,QAAA,OAAA,EAAA,CAAK,MAAA,KAAE,MAAA,CAAA,IAAA,CAAI,QAAA,EAAW,KAAK,IAAA;AAC1E,OAAA,EAAAG,eAAA,CAAA,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,IAAA,IAAI,oBAAA,CAAA,EAAA,CAAA,EAAA,UAAA,CAAA,KAAAJ,SAAA,EAAA,EAI5BC,kBAAA,CAGU,SAAA,EAHV,YAGU,CAFRI,kBAAA;AAA0F,QAAA,SAAA;AAA1F,QAAA,UAAA;AAA0F,QAAAD,eAAA,CAA7C,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,IAAA,IAAI,oBAAA,CAAA;AAAA,QAAA;;AACpE,OAAA,EAAAE,WAAA,CAAmE,kBAAA,EAAA;AAAzD,QAAA,KAAA,EAAO,IAAA,CAAK,QAAA;QAAW,QAAA,EAAM,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,MAAA,KAAE,MAAA,CAAA,IAAA,CAAI,QAAA,EAAW,MAAA,CAAA;;;;;;;;;;;;;;;;;AChBlE,IAAA,MAAM,IAAA,GAAO,MAAA;;;;;;;;;AAMP,IAAA,WAAA,GAAA,EAAA,KAAA,EAAM,0BAAA,EAAA;;;;EAOgB,KAAA,EAAM;;AACrB,IAAA,WAAA,GAAA,EAAA,KAAA,EAAM,6BAAA,EAAA;;AARjBL,EAAAA,OAAAA,SAAAA,EAAAA,EAAAA,kBAAAA,CAaK,IAAA,EAbLM,WAAAA,EAaK,EAAAP,SAAAA,CAAA,IAAA,CAAA,EAZHC,kBAAAA;AAWKC,IAAAA,QAAAA;AAAA,IAAA,IAAA;AAAAC,IAAAA,UAAAA,CAXkB,MAAA,CAAA,OAAA,EAAA,CAAX,CAAA,EAAG,GAAA,KAAG;AAAlBF,MAAAA,OAAAA,SAAAA,EAAAA,EAAAA,kBAAAA,CAWK,IAAA,EAAA;AAX4B,QAAA,GAAA,EAAG,CAAA,EAAK,CAAA,CAAE,GAAA,IAAG,QAAA,IAAgB,GAAA,CAAA,CAAA;QAAO,KAAA,EAAM;AACzEI,OAAAA,EAAAA,CAAAA,kBAAAA,CASS,QAAA,EAAA;QARP,IAAA,EAAK,QAAA;QACL,KAAA,EAAM,yBAAA;QACL,OAAA,EAAA,CAAK,WAAE,CAAA,CAAE,GAAA,IAAO,OAAA,IAAA,CAAI,QAAA,EAAW,EAAE,GAAA;UAEvB,CAAA,CAAE,KAAA,IAAAL,WAAA,EAAbC,kBAAAA;AAAyE,QAAA,KAAA;AAAzEO,QAAAA,WAAAA;AAAyEJ,QAAAA,eAAAA,CAAhB,EAAE,KAAA,CAAA;AAAK,QAAA;;WAAAK,kBAAA,CAAA,MAAA,EAAA,IAAA,CAAA,EAChEJ,kBAAAA;AAEM,QAAA,KAAA;AAFNK,QAAAA,WAAAA;QAEMN,eAAAA,CAAA,OADM,EAAE,OAAA,KAAO,QAAA,GAAgB,EAAE,OAAA,GAAO,CAAA,EAAM,EAAE,OAAA,EAAS,GAAA,IAAG,EAAA,CAAA,EAAS,CAAA,CAAE,SAAS,KAAA,IAAK,EAAA,GAAS,CAAA,CAAE,OAAA,EAAS,IAAA,IAAI,EAAA,CAAA,CAAA,CAAA;AAAA,QAAA;;OAAA,CAAA,EAAA,CAAA,EAAAO,WAAA,CAAA,CAAA,CAAA;;;;;;;;;ACtBpH,IAAM,KAAA,GAAgC;AAAA,EAC3C,IAAA,EAAM,2HAAA;AAAA,EACN,MAAA,EAAQ,0JAAA;AAAA,EACR,cAAA,EAAgB,mHAAA;AAAA,EAChB,eAAA,EAAiB,iHAAA;AAAA,EACjB,eAAA,EAAiB,kIAAA;AAAA,EACjB,gBAAA,EAAkB,+HAAA;AAAA,EAClB,GAAA,EAAK,oQAAA;AAAA,EACL,IAAA,EAAM,mJAAA;AAAA,EACN,IAAA,EAAM,oHAAA;AAAA,EACN,KAAA,EAAO,4GAAA;AAAA,EACP,CAAA,EAAG,wHAAA;AAAA,EACH,IAAA,EAAM,8HAAA;AAAA,EACN,OAAA,EAAS,yKAAA;AAAA,EACT,QAAA,EACE,6bAAA;AAAA,EACF,QAAA,EAAU;AACZ,CAAA;;;;;;;;;;;;;;;;;;;;;ACbA,IAAA,MAAM,KAAA,GAAQ,OAAA;AASd,IAAA,MAAM,WAAW,QAAA,CAAA,MAAe,MAAM,KAAA,CAAM,IAAA,KAAS,EAAA,CAAA;AAErD,IAAA,MAAM,SAAA,GAAY,SAAA,MAAe;AAC/B,MAAA,MAAM,OAAA,GAAU,OAAO,KAAA,CAAM,IAAA,KAAS,WAAW,CAAA,EAAG,KAAA,CAAM,IAAA,CAAA,EAAA,CAAA,GAAW,KAAA,CAAM,IAAA;AAC3E,MAAA,OAAO;QACL,KAAA,EAAO,OAAA;QACP,MAAA,EAAQ,OAAA;AACR,QAAA,KAAA,EAAO,KAAA,CAAM,KAAA;QACb,QAAA,EAAU;;;;;;;;;;;;;;;;;AAOJ,EAAA,OAAA,MAAA,CAAA,QAAA,IAAAX,SAAAA,EAAA,EADRC,kBAAAA,CASM,KAAA,EAAA;;IAPJ,KAAA,EAAM,4BAAA;IACN,OAAA,EAAQ,WAAA;IACR,IAAA,EAAK,MAAA;IACJ,KAAA,EAAKW,cAAA,CAAE,OAAA,SAAA,CAAA;IACR,KAAA,EAAM,kBAAA;AACN,IAAA,SAAA,EAAQ,MAAA,CAAA;;;;AC0CZ,IAAM,aAAA,GAAgB,EAAA;AACtB,IAAM,OAAA,GAAU,EAAA;AAChB,IAAM,OAAA,GAAU,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAtEhB,IAAA,MAAM,KAAA,GAAQ,OAAA;AAuBd,IAAA,MAAM,IAAA,GAAO,MAAA;AA4Bb,IAAA,MAAM,WAAA,GAAcC,SAAA,MAAe;AACjC,MAAA,QAAQ,MAAM,WAAA;QACZ,KAAK,MAAA;AAAQ,UAAA,OAAO,cAAA;QACpB,KAAK,QAAA;AAAU,UAAA,OAAO,cAAA;QACtB,KAAK,UAAA;AAAY,UAAA,OAAO,cAAA;QACxB,KAAK,UAAA;AAAY,UAAA,OAAO,cAAA;AACxB,QAAA;AAAS,UAAA,OAAO,EAAA;;;AAIpB,IAAA,MAAMC,MAAAA,GAAA,CAAS,CAAA,EAAW,GAAA,EAAa,GAAA,KAAgB,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,CAAA,CAAE,CAAA;AACrF,IAAA,MAAM,iBAAA,GAAoBD,QAAAA,CAAA,MAAeC,MAAAA,CAAM,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,QAAA,GAAW,CAAA,CAAA,EAAI,EAAA,EAAI,EAAA,CAAG,CAAA;AAEtF,IAAA,MAAM,eAAA,GAAkB,GAAA,CAAI,iBAAA,CAAkB,KAAA,CAAA;AAC9C,IAAA,MAAM,iBAAA,GAAoB,IAAwB,IAAA,CAAA;AAClD,IAAA,MAAM,eAAA,GAAkB,IAAI,CAAA,CAAA;AAC5B,IAAA,MAAM,cAAA,GAAiB,IAAI,KAAA,CAAA;AAI3B,IAAA,IAAI,MAAA,GAAgC,IAAA;AACpC,IAAA,IAAI,iBAAA,GAAmC,IAAA;AAEvC,IAAA,KAAA,CAAM,iBAAA,EAAA,CAAoB,CAAA,KAAM;AAC9B,MAAA,eAAA,CAAgB,KAAA,GAAQ,CAAA;;AAG1B,IAAA,MAAM,qBAAA,MAA2B;AAC/B,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,UAAA,EAAA;AACP,QAAA,MAAA,GAAS,IAAA;;;AAIb,IAAA,MAAM,kBAAkB,YAAY;AAClC,MAAA,MAAM,QAAA,EAAA;AACN,MAAA,MAAM,KAAK,iBAAA,CAAkB,KAAA;AAC7B,MAAA,IAAI,CAAC,EAAA,EAAI;AACT,MAAA,MAAM,SAAA,MAAe;AACnB,QAAA,eAAA,CAAgB,KAAA,GAAQ,EAAA,CAAG,qBAAA,EAAA,CAAwB,KAAA;;AAErD,MAAA,MAAA,EAAA;AACA,MAAA,kBAAA,EAAA;AACA,MAAA,MAAA,GAAS,IAAI,cAAA,CAAA,MAAqB,MAAA,EAAQ,CAAA;AAC1C,MAAA,MAAA,CAAO,QAAQ,EAAA,CAAA;;AAGjB,IAAA,KAAA,CAAA,MACQ,KAAA,CAAM,WAAA,EAAA,CACX,CAAA,KAAM;AACL,MAAA,IAAI,CAAA,KAAM,UAAA,EAAY,KAAK,eAAA,EAAA;WACtB,kBAAA,EAAA;OAEP,EAAE,SAAA,EAAW,MAAM,CAAA;AAGrB,IAAA,eAAA,CAAA,MAAsB,oBAAoB,CAAA;AAE1C,IAAA,MAAM,mBAAA,GAAsBD,SAAA,MAAA,CAAiB,eAAA,CAAgB,QAAQ,OAAA,KAAY,OAAA,GAAU,WAAY,GAAA,CAAA;AACvG,IAAA,MAAM,aAAA,GAAgBA,SAAA,MAAe;AACnC,MAAA,IAAI,CAAC,eAAA,CAAgB,KAAA,EAAO,OAAO,CAAA;AACnC,MAAA,MAAM,OAAA,GAAA,CAAW,eAAA,CAAgB,KAAA,GAAQ,OAAA,KAAY,OAAA,GAAU,OAAA,CAAA;AAC/D,MAAA,MAAM,OAAO,aAAA,GAAgB,CAAA;AAC7B,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,eAAA,CAAgB,KAAA,GAAQ,IAAA,EAAM,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAA,GAAO,OAAA,IAAW,eAAA,CAAgB,KAAA,GAAQ,cAAA,CAAe,CAAA;;AAGxH,IAAA,MAAM,gBAAA,MAAsB;AAC1B,MAAA,IAAI,iBAAA,EAAmB;AACrB,QAAA,YAAA,CAAa,iBAAA,CAAA;AACb,QAAA,iBAAA,GAAoB,IAAA;;AAEtB,MAAA,IAAA,CAAK,gBAAA,EAAkB,eAAA,CAAgB,KAAA,GAAQ,CAAA,CAAA;;AAGjD,IAAA,MAAM,gBAAA,GAAA,CAAoB,IAAA,KAAiB;AACzC,MAAA,IAAI,iBAAA,eAAgC,iBAAA,CAAA;AACpC,MAAA,iBAAA,GAAoB,MAAA,CAAO,WAAA,MAAiB;AAC1C,QAAA,iBAAA,GAAoB,IAAA;AACpB,QAAA,IAAA,CAAK,gBAAA,EAAkB,OAAO,CAAA,CAAA;SAC7B,EAAA,CAAA;;AAGL,IAAA,MAAM,qBAAA,GAAA,CAAyB,CAAA,KAAa;AAC1C,MAAA,MAAM,IAAA,GAAO,MAAA,CAAQ,CAAA,CAAE,MAAA,CAA4B,KAAA,CAAA;AACnD,MAAA,eAAA,CAAgB,KAAA,GAAQ,IAAA;AACxB,MAAA,gBAAA,CAAiB,IAAA,CAAA;;AAGnB,IAAA,eAAA,CAAA,MAAsB;AACpB,MAAA,IAAI,iBAAA,eAAgC,iBAAA,CAAA;;AAGtC,IAAA,MAAM,kBAAA,GAAA,CAAsB,GAAA,EAA0B,KAAA,KAAmB;AACvE,MAAA,IAAA,CAAK,wBAAwB,EAAA,CAAG,GAAA,GAAM,OAAO,CAAA;;AAG/C,IAAA,MAAM,OAAA,GAAU,IAA2C,IAAA,CAAA;AAC3D,IAAA,IAAI,KAAA,GAAuB,IAAA;AAE3B,IAAA,MAAM,YAAA,GAAe,IAAI,KAAA,CAAA;AAEzB,IAAA,MAAM,mBAAA,MAAyB;AAC7B,MAAA,YAAA,CAAa,KAAA,GAAQ,IAAA;AACrB,MAAA,MAAA,CAAO,WAAA,MAAiB;AACtB,QAAA,YAAA,CAAa,KAAA,GAAQ,KAAA;SACpB,GAAA,CAAA;;AAGL,IAAA,MAAM,eAAA,MAAqB;AACzB,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,YAAA,CAAa,KAAA,CAAA;AACb,QAAA,KAAA,GAAQ,IAAA;;AAEV,MAAA,OAAA,CAAQ,KAAA,GAAQ,IAAA;;AAGlB,IAAA,MAAM,iBAAA,MAAuB;AAC3B,MAAA,IAAA,CAAK,YAAA,CAAA;AACL,MAAA,YAAA,EAAA;AACA,MAAA,MAAM,KAAK,QAAA,CAAS,aAAA;AACpB,MAAA,IAAI,EAAA,IAAM,EAAA,YAAc,WAAA,EAAa,EAAA,CAAG,IAAA,EAAA;;AAG1C,IAAA,MAAM,eAAA,GAAA,CAAmB,KAAA,KAAuB;AAC9C,MAAA,IAAI,aAAa,KAAA,EAAO;AACxB,MAAA,IAAA,CAAK,eAAe,KAAA,CAAA;;AAGtB,IAAA,MAAM,QAAA,GAAW,IAAwB,IAAA,CAAA;AACzC,IAAA,MAAM,OAAA,GAAU;MAAE,MAAA,EAAQ,CAAA;MAAG,QAAA,EAAU,CAAA;MAAG,UAAA,EAAY;;AAEtD,IAAA,MAAM,sBAAA,GAAA,CAA0B,CAAA,KAAkB;AAChD,MAAA,YAAA,EAAA;AACA,MAAA,OAAA,CAAQ,MAAA,GAAS,CAAA,CAAE,OAAA,CAAQ,CAAA,CAAA,CAAG,OAAA;AAC9B,MAAA,OAAA,CAAQ,UAAA,GAAa,IAAA;AACrB,MAAA,IAAI,SAAS,KAAA,EAAO;AAClB,QAAA,QAAA,CAAS,KAAA,CAAM,MAAM,UAAA,GAAa,MAAA;;;AAItC,IAAA,MAAM,qBAAA,GAAA,CAAyB,CAAA,KAAkB;AAC/C,MAAA,IAAI,CAAC,QAAQ,UAAA,EAAY;AACzB,MAAA,CAAA,CAAE,cAAA,EAAA;AACF,MAAA,MAAM,SAAS,CAAA,CAAE,OAAA,CAAQ,CAAA,CAAA,CAAG,UAAU,OAAA,CAAQ,MAAA;AAC9C,MAAA,IAAI,MAAA,GAAS,CAAA,IAAK,QAAA,CAAS,KAAA,EAAO;AAEhC,QAAA,QAAA,CAAS,KAAA,CAAM,KAAA,CAAM,SAAA,GAAY,CAAA,WAAA,EAAc,MAAA,CAAA,GAAA,CAAA;AAC/C,QAAA,OAAA,CAAQ,QAAA,GAAW,MAAA;;;AAIvB,IAAA,MAAM,uBAAA,MAA6B;AACjC,MAAA,IAAI,CAAC,QAAQ,UAAA,EAAY;AACzB,MAAA,OAAA,CAAQ,UAAA,GAAa,KAAA;AAErB,MAAA,IAAI,SAAS,KAAA,EAAO;AAClB,QAAA,QAAA,CAAS,KAAA,CAAM,MAAM,UAAA,GAAa,EAAA;AAGlC,QAAA,IAAI,OAAA,CAAQ,WAAW,EAAA,EAAI;AACzB,UAAA,gBAAA,EAAA;AACA,UAAA,cAAA,EAAA;AAEA,UAAA,UAAA,CAAA,MAAiB;AACf,YAAA,IAAI,QAAA,CAAS,KAAA,EAAO,QAAA,CAAS,KAAA,CAAM,MAAM,SAAA,GAAY,EAAA;aACpD,GAAA,CAAA;AACE,QAAA,CAAA,MAAA;AAEL,UAAA,QAAA,CAAS,KAAA,CAAM,MAAM,SAAA,GAAY,EAAA;;;AAGrC,MAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;;AAGrB,IAAA,MAAM,gBAAA,GAAA,CAAoB,CAAA,EAAe,IAAA,KAAiB;AACxD,MAAA,MAAM,SAAS,CAAA,CAAE,aAAA;AACjB,MAAA,MAAM,IAAA,GAAO,OAAO,qBAAA,EAAA;AACpB,MAAA,KAAA,GAAQ,MAAA,CAAO,WAAA,MAAiB;AAC9B,QAAA,OAAA,CAAQ,KAAA,GAAQ;AACd,UAAA,IAAA;UACA,IAAA,EAAM,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,KAAA,GAAQ;;SAEhC,GAAA,CAAA;;AAGL,IAAA,MAAM,iBAAA,MAAuB;AAC3B,MAAA,YAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4FW,IAAA,UAAA,GAAA,EAAA,KAAA,EAAM,2BAAA,EAAA;AAKR,IAAA,UAAA,GAAA,EAAA,KAAA,EAAM,0BAAA,EAAA;;;EAUK,KAAA,EAAM;;AAIb,IAAA,UAAA,GAAA,EAAA,KAAA,EAAM,oBAAA,EAAA;;;AAkBN,IAAA,YAAA,GAAA,EAAA,KAAA,EAAM,qBAAA,EAAA;AACF,IAAA,YAAA,GAAA,EAAA,KAAA,EAAM,oBAAA,EAAA;;AAQN,IAAA,WAAA,GAAA,EAAA,KAAA,EAAM,oBAAA,EAAA;;AAQN,IAAA,WAAA,GAAA,EAAA,KAAA,EAAM,oBAAA,EAAA;;AAUV,IAAA,WAAA,GAAA,EAAA,KAAA,EAAM,mBAAA,EAAA;;;;EASC,KAAA,EAAM;;AAIb,IAAA,YAAA,GAAA,EAAA,KAAA,EAAM,mBAAA,EAAA;AACH,IAAA,YAAA,GAAA,EAAA,KAAA,EAAM,qBAAA,EAAA;;AAKT,IAAA,WAAA,GAAA,EAAA,KAAA,EAAM,wBAAA,EAAA;;AAgBJ,IAAA,WAAA,GAAA,EAAA,KAAA,EAAM,gCAAA,EAAA;AAGR,IAAA,WAAA,GAAA,EAAA,KAAA,EAAM,mBAAA,EAAA;;;EAiBN,KAAA,EAAM;;AACJ,IAAA,WAAA,GAAA,EAAA,KAAA,EAAM,0BAAA,EAAA;;AA0BN,IAAA,YAAA,GAAA,EAAA,KAAA,EAAM,4BAAA,EAAA;AACJ,IAAA,YAAA,GAAA,EAAA,KAAA,EAAM,uBAAA,EAAA;AACJ,IAAA,WAAA,GAAA,EAAA,KAAA,EAAM,4BAAA,EAAA;AAEJ,IAAA,WAAA,GAAA,EAAA,KAAA,EAAM,6BAAA,EAAA;;AAcV,IAAA,WAAA,GAAA,EAAA,KAAA,EAAM,uBAAA,EAAA;AACJ,IAAA,WAAA,GAAA,EAAA,KAAA,EAAM,4BAAA,EAAA;AAEJ,IAAA,WAAA,GAAA,EAAA,KAAA,EAAM,6BAAA,EAAA;;;;;;;;AA9P3BZ,EAAAA,OAAAA,SAAAA,EAAAA,EAAAA,kBAAAA,CA2RM,OAAA,IAAA,EAAA;AA1RJI,IAAAA,kBAAAA;AAuEM,MAAA,KAAA;MAAA,EAvEA,KAAA,EAAKU,cAAA,CAAA,CAAA,mBAAA,EAAA,EAAA,cAAwC,MAAA,CAAA,UAAA,EAAU,CAAA,CAAA,EAAA;;QAEnD,MAAA,CAAA,OAAA,IAAAf,WAAA,EADRC,kBAAAA;AAmBM,UAAA,KAAA;AAAA,UAAA;;YAjBJ,KAAA,EAAM,sBAAA;AACL,YAAA,KAAA,EAAKW,cAAAA,CAAA;;;AAAiF,cAAA,IAAA,EAAA,CAAA,EAAA,MAAA,CAAA,QAAQ,IAAA,CAAA,EAAA,CAAA;;;;;;;;;;;;AAe5F,UAAAI,eAAA,CAAA,MAAA,CAAA,QAAQ,IAAA,CAAA;AAAI,UAAA;;AAAAP,SAAAA,IAAAA,kBAAAA,CAAA,QAAA,IAAA,CAAA;AAEjBJ,QAAAA,kBAAAA,CAWS,QAAA,EAAA;UAVP,IAAA,EAAK,QAAA;UACL,KAAA,EAAM,kBAAA;AACL,UAAA,cAAA,EAAc,OAAA,WAAA,KAAW,MAAA;UACzB,OAAA,EAAK,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,IAAA,CAAA,MAAA,KAAE,MAAA,CAAA,eAAA,CAAe,MAAA,CAAA,CAAA;UACtB,YAAA,EAAU,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAG,CAAA,KAAM,MAAA,CAAA,gBAAA,CAAiB,CAAA,EAAC,cAAA,CAAA,CAAA;AACrC,UAAA,UAAA,EAAU,MAAA,CAAA,cAAA;AACV,UAAA,aAAA,EAAa,MAAA,CAAA,cAAA;UACd,KAAA,EAAM;YAENC,WAAAA,CAAuB,MAAA,CAAA,SAAA,CAAA,EAAA,EAAd,IAAA,EAAK,QAAM,CAAA,CAAA,EAAA,EAAA,EAAAC,WAAA,CAAA;AAEtBF,QAAAA,kBAAAA,CAWS,QAAA,EAAA;UAVP,IAAA,EAAK,QAAA;UACL,KAAA,EAAM,kBAAA;AACL,UAAA,cAAA,EAAc,OAAA,WAAA,KAAW,QAAA;UACzB,OAAA,EAAK,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,IAAA,CAAA,MAAA,KAAE,MAAA,CAAA,eAAA,CAAe,QAAA,CAAA,CAAA;UACtB,YAAA,EAAU,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAG,CAAA,KAAM,MAAA,CAAA,gBAAA,CAAiB,CAAA,EAAC,cAAA,CAAA,CAAA;AACrC,UAAA,UAAA,EAAU,MAAA,CAAA,cAAA;AACV,UAAA,aAAA,EAAa,MAAA,CAAA,cAAA;UACd,KAAA,EAAM;YAENC,WAAAA,CAAyB,MAAA,CAAA,SAAA,CAAA,EAAA,EAAhB,IAAA,EAAK,UAAQ,CAAA,CAAA,EAAA,EAAA,EAAAK,WAAA,CAAA;AAExBN,QAAAA,kBAAAA,CAWS,QAAA,EAAA;UAVP,IAAA,EAAK,QAAA;UACL,KAAA,EAAM,kBAAA;AACL,UAAA,cAAA,EAAc,OAAA,WAAA,KAAW,UAAA;UACzB,OAAA,EAAK,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,IAAA,CAAA,MAAA,KAAE,MAAA,CAAA,eAAA,CAAe,UAAA,CAAA,CAAA;UACtB,YAAA,EAAU,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAG,CAAA,KAAM,MAAA,CAAA,gBAAA,CAAiB,CAAA,EAAC,cAAA,CAAA,CAAA;AACrC,UAAA,UAAA,EAAU,MAAA,CAAA,cAAA;AACV,UAAA,aAAA,EAAa,MAAA,CAAA,cAAA;UACd,KAAA,EAAM;YAENC,WAAAA,CAA2B,MAAA,CAAA,SAAA,CAAA,EAAA,EAAlB,IAAA,EAAK,YAAU,CAAA,CAAA,EAAA,EAAA,EAAAE,WAAA,CAAA;AAE1BH,QAAAA,kBAAAA,CAWS,QAAA,EAAA;UAVP,IAAA,EAAK,QAAA;UACL,KAAA,EAAM,kBAAA;AACL,UAAA,cAAA,EAAc,OAAA,WAAA,KAAW,UAAA;UACzB,OAAA,EAAK,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,IAAA,CAAA,MAAA,KAAE,MAAA,CAAA,eAAA,CAAe,UAAA,CAAA,CAAA;UACtB,YAAA,EAAU,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAG,CAAA,KAAM,MAAA,CAAA,gBAAA,CAAiB,CAAA,EAAC,cAAA,CAAA,CAAA;AACrC,UAAA,UAAA,EAAU,MAAA,CAAA,cAAA;AACV,UAAA,aAAA,EAAa,MAAA,CAAA,cAAA;UACd,KAAA,EAAM;YAENC,WAAAA,CAA2B,MAAA,CAAA,SAAA,CAAA,EAAA,EAAlB,IAAA,EAAK,YAAU,CAAA,CAAA,EAAA,EAAA,EAAAI,WAAA,CAAA;AAGd,QAAA,IAAA,CAAA,MAAA,CAAO,YAAA,GAAnBO,UAAA,CAAuD,IAAA,CAAA,MAAA,EAAA,cAAA,EAAA,EAAA,GAAA,EAAA,CAAA,EAAA,CAAA,GAAAR,kBAAAA,CAAA,QAAA,IAAA;;;;;AAG9C,IAAA,MAAA,CAAA,WAAA,IAAAT,SAAAA,EAAA,EAAXC,kBAAAA,CAAgF,KAAA,EAAA;;MAAxD,KAAA,EAAM,uBAAA;AAAyB,MAAA,OAAA,EAAO,MAAA,CAAA;;AAE9DI,IAAAA,kBAAAA,CA8MM,KAAA,EAAA;MA7MJ,GAAA,EAAI,UAAA;MACH,KAAA,EAAKU,cAAA,CAAA,CAAA,qBAAA,EAAA,EAAA,WAAuC,MAAA,CAAA,WAAA,EAAW,CAAA,CAAA;AACvD,MAAA,aAAA,EAAW,CAAG,MAAA,CAAA;AAEfV,KAAAA,EAAAA,CAAAA,kBAAAA;AAUM,MAAA,KAAA;AAAA,MAAA;QATJ,KAAA,EAAM,4BAAA;AACL,QAAA,YAAA,EAAY,MAAA,CAAA,sBAAA;AACZ,QAAA,WAAA,EAAW,MAAA,CAAA,qBAAA;AACX,QAAA,UAAA,EAAU,MAAA,CAAA;;AAEXA,MAAAA,CAAAA,kBAAAA;AAA8D,QAAA,KAAA;AAA9D,QAAA,UAAA;AAA8DD,QAAAA,eAAAA,CAApB,OAAA,WAAA,CAAA;AAAW,QAAA;;AACrDC,OAAAA,EAAAA,kBAAAA,CAES,QAAA,EAAA;QAFD,IAAA,EAAK,QAAA;QAAS,KAAA,EAAM,kBAAA;AAAoB,QAAA,OAAA,EAAO,MAAA,CAAA;UACrDC,WAAAA,CAAoB,MAAA,CAAA,SAAA,CAAA,EAAA,EAAX,MAAK,GAAA,EAAG,CAAA,CAAA,CAAA,CAAA;;;AAGrBD,KAAAA,EAAAA,kBAAAA,CA6LM,OA7LN,UAAA,EA6LM;MA5LY,MAAA,CAAA,WAAA,KAAW,MAAA,IAAAL,SAAAA,EAAA,EAA3BC,kBAAAA;AAUWC,QAAAA,QAAAA;AAAA,QAAA,EAAA,KAAA,CAAA,EAAA;QAAA,CARD,MAAA,CAAA,IAAI,MAAA,IAAAF,SAAAA,IADZkB,WAAA,CAOE,MAAA,CAAA,SAAA,CAAA,EAAA;;AALC,UAAA,KAAA,EAAO,MAAA,CAAA,GAAA;AACP,UAAA,QAAA,EAAM,OAAA,CAAA,CAAA,KAAA,OAAA,CAAA,CAAA,GAAA,CAAG,IAAA,KAAI;AAAsB,YAAA,MAAA,CAAA,IAAA,CAAI,aAAc,IAAA,CAAA;AAAqB,YAAA,MAAA,CAAA,cAAA,EAAA;;gDAK7EjB,kBAAAA,CAAkD,KAAA,EAAlD,UAAA,EAAuC,gCAAA,CAAA,CAAK,CAAA;;;;MAG9B,MAAA,CAAA,WAAA,KAAW,QAAA,IAAAD,SAAAA,EAAA,EAA3BC,kBAAAA;AAwDWC,QAAAA,QAAAA;AAAA,QAAA,EAAA,KAAA,CAAA,EAAA;AAAA,QAAA;AAvDTG,UAAAA,kBAAAA,CAgBM,KAAA,EAhBN,UAAA,EAgBM,CAfJA,kBAAAA,CAWE,OAAA,EAAA;YAVA,KAAA,EAAM,oBAAA;YACN,WAAA,EAAY,gCAAA;AACX,YAAA,KAAA,EAAO,MAAA,CAAA,WAAA;AACP,YAAA,QAAA,EAAU,OAAA,MAAA,KAAM,OAAA;AAChB,YAAA,OAAA,EAAK,OAAA,CAAA,CAAA,KAAA,OAAA,CAAA,CAAA,GAAA,CAAG,CAAA,KAAM;AAA8B,cAAA,MAAA,CAAA,GAAI,EAAE,MAAA,CAAO,KAAA;AAAuB,cAAA,MAAA,CAAA,IAAA,CAAI,sBAAuB,CAAA,CAAA;AAAyB,cAAA,IAAA,CAAA,CAAA,CAAE,IAAA,EAAA,EAAQ,MAAA,CAAA,IAAA,CAAI,UAAA,EAAA,CAAA;;AAKlJ,YAAA,SAAA,EAAO,OAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,IAAAc,QAAA,CAAA,CAAA,MAAA,KAAQ,MAAA,CAAA,KAAI,QAAA,EAAW,MAAA,CAAA,WAAA,CAAA,EAAW,CAAA,OAAA,CAAA,CAAA;AAE5Cd,WAAAA,EAAAA,IAAAA,EAAAA,EAAAA,EAAAA,WAAAA,CAAAA,EAAAA,kBAAAA,CAES,QAAA,EAAA;YAFD,IAAA,EAAK,QAAA;YAAS,KAAA,EAAM,yCAAA;AAA2C,YAAA,QAAA,EAAU,OAAA,MAAA,KAAM,OAAA;AAAe,YAAA,OAAA,EAAK,MAAA,CAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,CAAA,GAAA,CAAA,MAAA,KAAE,MAAA,CAAA,IAAA,CAAI,QAAA,EAAW,MAAA,CAAA,WAAA,CAAA;aAAc,gBAAA,EAE1I,CAAA,EAAA,WAAA,CAAA,CAAA,CAAA;AAGFA,UAAAA,kBAAAA,CAyBM,OAzBNe,YAAAA,EAyBM;AAxBJf,YAAAA,kBAAAA,CAOQ,OAAA,EAPRgB,YAAAA,EAOQ,CANNhB,kBAAAA,CAIE,OAAA,EAAA;cAHA,IAAA,EAAK,UAAA;cACJ,OAAA,EAAS,OAAA,CAAQ,MAAA,CAAA,aAAA,CAAc,SAAA,CAAA;AAC/B,cAAA,QAAA,EAAM,MAAA,CAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,CAAA,GAAA,CAAG,CAAA,KAAW,MAAA,CAAA,kBAAA,CAAkB,WAAA,EAAc,CAAA,CAAE,OAAO,OAAA,CAAA;;AAC9D,cAAA,kCAAA;AAEJ,cAAA;;cAAA,CAAA,CAAA;AACAA,YAAAA,kBAAAA,CAOQ,OAAA,EAPR,WAAA,EAOQ,CANNA,kBAAAA,CAIE,OAAA,EAAA;cAHA,IAAA,EAAK,UAAA;cACJ,OAAA,EAAS,OAAA,CAAQ,MAAA,CAAA,aAAA,CAAc,UAAA,CAAA;AAC/B,cAAA,QAAA,EAAM,MAAA,CAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,CAAA,GAAA,CAAG,CAAA,KAAW,MAAA,CAAA,kBAAA,CAAkB,YAAA,EAAe,CAAA,CAAE,OAAO,OAAA,CAAA;;AAC/D,cAAA,4BAAA;AAEJ,cAAA;;cAAA,CAAA,CAAA;AACAA,YAAAA,kBAAAA,CAOQ,OAAA,EAPR,WAAA,EAOQ,CANNA,kBAAAA,CAIE,OAAA,EAAA;cAHA,IAAA,EAAK,UAAA;cACJ,OAAA,EAAS,OAAA,CAAQ,MAAA,CAAA,aAAA,CAAc,eAAA,CAAA;AAC/B,cAAA,QAAA,EAAM,MAAA,CAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,CAAA,GAAA,CAAG,CAAA,KAAW,MAAA,CAAA,kBAAA,CAAkB,iBAAA,EAAoB,CAAA,CAAE,OAAO,OAAA,CAAA;;AACpE,cAAA,4BAAA;AAEJ,cAAA;;cAAA,CAAA;;AAGFA,UAAAA,kBAAAA,CAMM,OANN,WAAA,EAMM;AALJA,YAAAA,kBAAAA;AAA4C,cAAA,MAAA;AAAA,cAAA,IAAA;cAAtC,eAAA,GAAGD,eAAAA,CAAG,MAAA,CAAA,qBAAA,CAAA,GAAwB,GAAA;AAAC,cAAA;;;YACzB,MAAA,CAAA,SAAA,IAAAJ,SAAAA,EAAA,EAAZC,kBAAAA,CAAkC,MAAA,EAAA,aAAX,0BAAA,CAAA,IAAIQ,kBAAAA,CAAA,MAAA,EAAA,IAAA,CAAA;AACb,YAAA,MAAA,CAAA,SAAA,IAAAT,SAAAA,EAAA,EAAdC,kBAAAA,CAES,QAAA,EAAA;;cAFgB,IAAA,EAAK,QAAA;cAAS,KAAA,EAAM,mBAAA;cAAqB,OAAA,EAAK,MAAA,CAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,IAAA,CAAA,MAAA,KAAE,MAAA,CAAA,IAAA,CAAI,cAAA,CAAA;eAAkB,gBAAA,CAAA,IAE/FQ,kBAAAA,CAAA,MAAA,EAAA,IAAA;;AAGsB,UAAA,MAAA,CAAA,cAAc,MAAA,IAAAT,SAAAA,IAAtCkB,WAAA,CAA4H,MAAA,CAAA,kBAAA,CAAA,EAAA;;AAA7E,YAAA,OAAA,EAAS,MAAA,CAAA,aAAA;YAAgB,QAAA,EAAM,MAAA,CAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,CAAA,GAAA,CAAG,GAAA,KAAQ,MAAA,CAAA,IAAA,CAAI,oBAAA,EAAuB,GAAA,CAAA;AACpHjB,WAAAA,EAAAA,IAAAA,EAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,CAAAA,KAAAA,SAAAA,EAAAA,EAAAA,kBAAAA;AAA0F,YAAA,KAAA;AAA1F,YAAA,WAAA;AAA0FG,YAAAA,eAAAA,CAAhD,MAAA,CAAA,WAAA,CAAY,IAAA,EAAA,GAAI,mCAAA,sCAAA,CAAA;AAAA,YAAA;;;;;;;MAG5C,MAAA,CAAA,WAAA,KAAW,UAAA,IAAAJ,SAAAA,EAAA,EAA3BC,kBAAAA;AAwCWC,QAAAA,QAAAA;AAAA,QAAA,EAAA,KAAA,CAAA,EAAA;AAAA,QAAA;UAvCTG,kBAAAA,CAKM,KAAA,EALNiB,cAKM,CAJJjB,kBAAAA;AAEO,YAAA,MAAA;AAFPkB,YAAAA,YAAAA;YAEOnB,eAAAA,CADF,MAAA,CAAA,MAAA,KAAM,OAAA,GAAe,MAAA,CAAA,SAAA,IAAS,iBAAW,MAAA,CAAA,MAAA,KAAM,SAAA,GAAA,gCAAA,GAAA,EAAA,CAAA;AAAA,YAAA;;aAExC,MAAA,CAAA,YAAA,IAAAJ,WAAA,EAAZC,kBAAAA;AAAmD,YAAA,MAAA;AAAA,YAAA,WAAA;AAAAG,YAAAA,eAAAA,CAAtB,OAAA,YAAA,CAAA;AAAY,YAAA;;eAAAK,kBAAAA,CAAA,MAAA,EAAA,IAAA,CAAA,CAAA,CAAA;AAE3CJ,UAAAA,kBAAAA,CAiBM,KAAA,EAjBN,WAAA,EAiBM,CAhBJA,kBAAAA,CAcE,OAAA,EAAA;YAbA,KAAA,EAAM,oBAAA;YACN,IAAA,EAAK,OAAA;YACJ,GAAA,EAAK,CAAA;YACL,GAAA,EAAK,GAAA;YACL,IAAA,EAAM,CAAA;AACN,YAAA,KAAA,EAAO,MAAA,CAAA,gBAAA;YACP,KAAA,EAAKO,cAAAA,CAAA,EAAA,UAAA,EAAA,CAAA,0FAAA,EAA6G,MAAA,CAAA,gBAAA,CAAA,kCAAA,EAAqD,MAAA,CAAA,gBAAA,CAAA,uCAAA,CAAA,EAAgB,CAAA;AACvL,YAAA,OAAA,EAAK,OAAA,EAAA,CAAA,KAAA,OAAA,EAAA,CAAA,GAAA,CAAG,CAAA,KAAM;AAAwB,cAAA,MAAA,CAAA,KAAI,WAAA,CAAA;AAA+B,cAAA,MAAA,CAAA,KAAI,YAAA,EAAe,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,KAAA,CAAK,CAAA;;AAIjH,YAAA,WAAA,EAAS,MAAA,CAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,CAAA,GAAA,CAAG,CAAA,KAAW,MAAA,CAAA,KAAI,SAAA,EAAY,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,KAAA,CAAK,CAAA,CAAA;YAC5D,OAAA,EAAK,MAAA,CAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,CAAA,GAAAO,QAAA,CAAA,CAAS,CAAA,KAAW,MAAA,CAAA,KAAI,YAAA,EAAe,MAAA,CAAO,EAAE,MAAA,CAAO,KAAA,CAAK,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA;AAEpEd,WAAAA,EAAAA,IAAAA,EAAAA,EAAAA,EAAAA,WAAAA,CAAAA,EAAAA,kBAAAA;AAAyE,YAAA,KAAA;AAAzE,YAAA,WAAA;YAAyED,eAAAA,CAA1B,MAAA,CAAA,gBAAA,CAAA,GAAmB,GAAA;AAAC,YAAA;;WAAA,CAAA,CAAA;AAGrEC,UAAAA,kBAAAA,CAaM,OAbN,WAAA,EAaM;AAZJA,YAAAA,kBAAAA,CAES,QAAA,EAAA;cAFD,IAAA,EAAK,QAAA;cAAS,KAAA,EAAM,kBAAA;cAAmB,KAAA,EAAM,oBAAA;cAAO,OAAA,EAAK,MAAA,CAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,IAAA,CAAA,MAAA,KAAE,MAAA,CAAA,IAAA,CAAI,aAAA,CAAA;gBACrEC,WAAAA,CAAgC,MAAA,CAAA,SAAA,CAAA,EAAA,EAAvB,MAAK,eAAA,EAAe,CAAA,CAAA,CAAA;AAE/BD,YAAAA,kBAAAA,CAES,QAAA,EAAA;cAFD,IAAA,EAAK,QAAA;cAAS,KAAA,EAAM,kBAAA;cAAmB,KAAA,EAAM,oBAAA;cAAO,OAAA,EAAK,MAAA,CAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,IAAA,CAAA,MAAA,KAAE,MAAA,CAAA,IAAA,CAAI,UAAA,CAAA;gBACrEC,WAAAA,CAA+B,MAAA,CAAA,SAAA,CAAA,EAAA,EAAtB,MAAK,cAAA,EAAc,CAAA,CAAA,CAAA;AAE9BD,YAAAA,kBAAAA,CAES,QAAA,EAAA;cAFD,IAAA,EAAK,QAAA;cAAS,KAAA,EAAM,kBAAA;cAAmB,KAAA,EAAM,oBAAA;cAAO,OAAA,EAAK,MAAA,CAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,IAAA,CAAA,MAAA,KAAE,MAAA,CAAA,IAAA,CAAI,UAAA,CAAA;gBACrEC,WAAAA,CAAgC,MAAA,CAAA,SAAA,CAAA,EAAA,EAAvB,MAAK,eAAA,EAAe,CAAA,CAAA,CAAA;AAE/BD,YAAAA,kBAAAA,CAES,QAAA,EAAA;cAFD,IAAA,EAAK,QAAA;cAAS,KAAA,EAAM,kBAAA;cAAmB,KAAA,EAAM,oBAAA;cAAO,OAAA,EAAK,MAAA,CAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,IAAA,CAAA,MAAA,KAAE,MAAA,CAAA,IAAA,CAAI,aAAA,CAAA;gBACrEC,WAAAA,CAAiC,MAAA,CAAA,SAAA,CAAA,EAAA,EAAxB,MAAK,gBAAA,EAAgB,CAAA,CAAA;;;;;;MAKpB,MAAA,CAAA,WAAA,KAAW,UAAA,IAAAN,SAAAA,EAAA,EACzBC,kBAAAA,CAyEM,OAzEN,WAAA,EAyEM,CAxEJI,kBAAAA,CAwBM,KAAA,EAxBN,WAAA,EAwBM;AAvBJA,QAAAA,MAAAA,CAAAA,EAAAA,CAAAA,KAAAA,MAAAA,CAAAA,EAAAA,CAAAA,GAAAA,kBAAAA;AAAkD,UAAA,KAAA;AAAA,UAAA,EAA7C,OAAM,+BAAA,EAAA;AAAgC,UAAA,GAAA;AAAC,UAAA;;;AAC5CA,QAAAA,kBAAAA;AAoBM,UAAA,KAAA;AAAA,UAAA;YApBD,GAAA,EAAI,mBAAA;YAAqB,KAAA,EAAKU,cAAA,CAAA,CAAA,2BAAA,EAAA,EAAA,eAAiD,MAAA,CAAA,cAAA,EAAc,CAAA;;AAChGV,UAAAA,CAAAA,kBAAAA,CAeE,OAAA,EAAA;YAdA,KAAA,EAAM,oBAAA;YACN,IAAA,EAAK,OAAA;AACJ,YAAA,GAAA,EAAK,MAAA,CAAA,OAAA;AACL,YAAA,GAAA,EAAK,MAAA,CAAA,OAAA;YACL,IAAA,EAAM,CAAA;AACN,YAAA,KAAA,EAAO,MAAA,CAAA,eAAA;YACP,KAAA,EAAKO,cAAAA,CAAA,EAAA,UAAA,EAAA,CAAA,0FAAA,EAA6G,MAAA,CAAA,mBAAA,CAAA,kCAAA,EAAwD,MAAA,CAAA,mBAAA,CAAA,uCAAA,CAAA,EAAmB,CAAA;YAC9L,YAAA,EAAW,cAAA;AACV,YAAA,OAAA,EAAO,MAAA,CAAA,qBAAA;YACP,aAAA,EAAW,MAAA,CAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,CAAA,GAAA,CAAA,MAAA,KAAE,MAAA,CAAA,cAAA,GAAc,IAAA,CAAA;AAC3B,YAAA,WAAA,EAAS,OAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,IAAA,MAAA;AAAU,cAAA,MAAA,CAAA,cAAA,GAAc,KAAA;AAAU,cAAA,MAAA,CAAA,aAAA,EAAA;;AAC3C,YAAA,eAAA,EAAa,OAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,IAAA,MAAA;AAAU,cAAA,MAAA,CAAA,cAAA,GAAc,KAAA;AAAU,cAAA,MAAA,CAAA,aAAA,EAAA;;YAC/C,YAAA,EAAU,MAAA,CAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,CAAA,GAAA,CAAA,MAAA,KAAE,MAAA,CAAA,cAAA,GAAc,IAAA,CAAA;AAC1B,YAAA,UAAA,EAAQ,OAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,IAAA,MAAA;AAAU,cAAA,MAAA,CAAA,cAAA,GAAc,KAAA;AAAU,cAAA,MAAA,CAAA,aAAA,EAAA;;AAE7CP,WAAAA,EAAAA,IAAAA,EAAAA,EAAAA,EAAAA,WAAAA,CAAAA,EAAAA,kBAAAA;AAEM,YAAA,KAAA;AAAA,YAAA;cAFD,KAAA,EAAM,0BAAA;AAA4B,cAAA,KAAA,EAAKO,cAAAA,CAAA;gBAAA,IAAA,EAAA,CAAA,EAAa,OAAA,aAAA,CAAA,EAAA,CAAA;gBAAa,KAAA,EAAA,CAAA,EAAgB,OAAA,aAAA,CAAA,EAAA,CAAA;gBAAa,MAAA,EAAA,CAAA,EAAiB,OAAA,aAAA,CAAA,EAAA;AAAa,eAAA;;AAC5H,YAAAI,eAAA,CAAA,MAAA,CAAA,eAAA,CAAA;AAAe,YAAA;;AAAA,WAAA,CAAA;;;;AAGtBX,QAAAA,MAAAA,CAAAA,EAAAA,CAAAA,KAAAA,MAAAA,CAAAA,EAAAA,CAAAA,GAAAA,kBAAAA;AAAgD,UAAA,KAAA;AAAA,UAAA,EAA3C,OAAM,6BAAA,EAAA;AAA8B,UAAA,GAAA;AAAC,UAAA;;;AAG5CA,OAAAA,CAAAA,EAAAA,kBAAAA,CA6CM,OA7CNmB,YAAAA,EA6CM;AA5CJnB,QAAAA,kBAAAA,CAeM,KAAA,EAfNoB,YAAAA,EAeM,CAdJpB,kBAAAA,CAGM,KAAA,EAHN,WAAA,EAGM,CAAA,MAAA,CAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,CAAA,GAFJA,kBAAAA;AAAiD,UAAA,KAAA;AAAA,UAAA,EAA5C,OAAM,6BAAA,EAAA;AAA8B,UAAA,cAAA;AAAE,UAAA;;AAC3CA,SAAAA,CAAAA,EAAAA,kBAAAA;AAAgF,UAAA,KAAA;AAAhF,UAAA,WAAA;AAAgFD,UAAAA,eAAAA,CAApC,MAAA,CAAA,KAAA,CAAM,UAAA,CAAW,OAAA,CAAO,CAAA,CAAA,CAAA;AAAA,UAAA;;SAAA,CAAA,CAAA,EAEtEC,mBASE,OAAA,EAAA;UARA,KAAA,EAAM,oBAAA;UACN,IAAA,EAAK,OAAA;UACJ,GAAA,EAAK,CAAA;UACL,GAAA,EAAK,CAAA;UACL,IAAA,EAAM,IAAA;AACN,UAAA,KAAA,EAAO,OAAA,KAAA,CAAM,UAAA;UACd,YAAA,EAAW,cAAA;AACV,UAAA,OAAA,EAAK,MAAA,CAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,CAAA,GAAA,CAAG,CAAA,KAAW,MAAA,CAAA,KAAI,kBAAA,EAAqB,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,KAAA,CAAK,CAAA;;AAItEA,QAAAA,kBAAAA,CAeM,KAAA,EAfN,WAAA,EAeM,CAdJA,kBAAAA,CAGM,KAAA,EAHN,WAAA,EAGM,CAAA,MAAA,CAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,CAAA,GAFJA,kBAAAA;AAAkD,UAAA,KAAA;AAAA,UAAA,EAA7C,OAAM,6BAAA,EAAA;AAA8B,UAAA,oBAAA;AAAG,UAAA;;AAC5CA,SAAAA,CAAAA,EAAAA,kBAAAA;AAAqF,UAAA,KAAA;AAArF,UAAA,WAAA;AAAqFD,UAAAA,eAAAA,CAAzC,OAAA,KAAA,CAAM,aAAA,CAAc,OAAA,CAAO,CAAA,CAAA,CAAA,GAAM,IAAA;AAAE,UAAA;;SAAA,CAAA,CAAA,EAEjFC,mBASE,OAAA,EAAA;UARA,KAAA,EAAM,oBAAA;UACN,IAAA,EAAK,OAAA;UACJ,GAAA,EAAK,CAAA;UACL,GAAA,EAAK,GAAA;UACL,IAAA,EAAM,IAAA;AACN,UAAA,KAAA,EAAO,OAAA,KAAA,CAAM,aAAA;UACd,YAAA,EAAW,oBAAA;AACV,UAAA,OAAA,EAAK,MAAA,CAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,CAAA,GAAA,CAAG,CAAA,KAAW,MAAA,CAAA,KAAI,qBAAA,EAAwB,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,KAAA,CAAK,CAAA;;AAIzEA,QAAAA,kBAAAA,CASS,QAAA,EAAA;UARP,IAAA,EAAK,QAAA;UACL,KAAA,EAAM,kBAAA;AACL,UAAA,cAAA,EAAc,MAAA,CAAA,QAAA;UACd,YAAA,EAAY,MAAA,CAAA,WAAQ,sFAAA,GAAA,sFAAA;UACpB,KAAA,EAAO,MAAA,CAAA,WAAQ,gCAAA,GAAA,gCAAA;AACf,UAAA,OAAA,EAAK,MAAA,CAAA,EAAA,CAAA,KAAA,MAAA,CAAA,EAAA,CAAA,GAAA,CAAA,MAAA,KAAE,MAAA,CAAA,IAAA,CAAI,gBAAA,EAAA,CAAoB,OAAA,QAAA,CAAA;AAEhCC,SAAAA,EAAAA,CAAAA,WAAAA,CAA6C,OAAA,SAAA,CAAA,EAAA,EAAnC,IAAA,EAAM,MAAA,CAAA,WAAQ,KAAA,GAAA,MAAA,EAAA,EAAA,IAAA,EAAA,GAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,GAAA,WAAA;;;;;;;;ACvgBxC,IAAM,gBAAA,GAAmB,GAAA;AACzB,IAAM,cAAA,GAAiB,IAAA;AAEvB,IAAM,KAAA,GAAQ,CAAC,CAAA,EAAW,GAAA,EAAa,GAAA,KAAgB,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,CAAC,CAAC,CAAA;AAIrF,IAAM,iCAAA,GAAoC,CAAC,kBAAA,KAAsC;AAC/E,EAAA,IAAI,CAAC,oBAAoB,OAAO,IAAA;AAChC,EAAA,MAAM,SAAA,GAAY,kBAAA,CAAmB,KAAA,CAAM,kCAAkC,CAAA;AAC7E,EAAA,IAAI,SAAA,GAAY,CAAC,CAAA,EAAG;AAClB,IAAA,IAAI;AACF,MAAA,OAAO,mBAAmB,SAAA,CAAU,CAAC,EAAE,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAC,CAAA;AAAA,IAC9D,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,SAAA,CAAU,CAAC,CAAA,CAAE,OAAA,CAAQ,UAAU,EAAE,CAAA;AAAA,IAC1C;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,KAAA,CAAM,yCAAyC,CAAA;AAChF,EAAA,OAAO,KAAA,GAAQ,CAAC,CAAA,IAAK,KAAA,GAAQ,CAAC,CAAA,IAAK,IAAA;AACrC,CAAA;AAEA,IAAM,qBAAA,GAAwB,CAAC,IAAA,KAAiB;AAC9C,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,EAAA,IAAI,CAAC,SAAS,OAAO,WAAA;AACrB,EAAA,IAAI,QAAQ,WAAA,EAAY,CAAE,QAAA,CAAS,OAAO,GAAG,OAAO,OAAA;AACpD,EAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG,OAAO,GAAG,OAAO,CAAA,KAAA,CAAA;AAC7C,EAAA,OAAO,OAAA;AACT,CAAA;AAEA,IAAM,kBAAA,GAAqB,CAAC,GAAA,KAAgB;AAC1C,EAAA,IAAI;AACF,IAAA,MAAM,IAAI,IAAI,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,SAAS,IAAI,CAAA;AAC3C,IAAA,MAAM,IAAA,GAAO,EAAE,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,GAAA,EAAI;AACvD,IAAA,OAAO,IAAA,GAAO,kBAAA,CAAmB,IAAI,CAAA,GAAI,IAAA;AAAA,EAC3C,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAEA,IAAM,kBAAA,GAAqB,OAAO,GAAA,EAAa,MAAA,KAAwB;AACrE,EAAA,MAAM,MAAM,MAAM,KAAA,CAAM,GAAA,EAAK,EAAE,QAAQ,CAAA;AACvC,EAAA,IAAI,CAAC,IAAI,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAAS,GAAA,CAAI,MAAM,CAAA,CAAA,CAAG,CAAA;AACnD,EAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAE5B,EAAA,MAAM,aAAa,iCAAA,CAAkC,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,qBAAqB,CAAC,CAAA;AAC3F,EAAA,MAAM,OAAA,GAAU,mBAAmB,GAAG,CAAA;AACtC,EAAA,MAAM,QAAA,GAAW,qBAAA,CAAsB,UAAA,IAAc,OAAA,IAAW,WAAW,CAAA;AAC3E,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAQ,sBAAA;AAE1B,EAAA,OAAO,IAAI,KAAK,CAAC,IAAI,GAAG,QAAA,EAAU,EAAE,MAAM,CAAA;AAC5C,CAAA;AAEO,IAAM,iBAAiB,eAAA,CAAgB;AAAA,EAC5C,IAAA,EAAM,gBAAA;AAAA,EACN,KAAA,EAAO,sBAAA;AAAA,EACP,KAAA,EAAO;AAAA,IACL,OAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,gBAAA;AAAA,IACA,kBAAA;AAAA,IACA,qBAAA;AAAA,IACA,gBAAA;AAAA,IACA,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,sBAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,MAAM,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAM,EAAG;AACpC,IAAA,MAAM,WAAW,kBAAA,EAAmB;AACpC,IAAA,MAAM,cAAA,GAAiB,CAAC,GAAA,KAAgB;AACtC,MAAA,MAAM,UAAA,GAAa,UAAU,KAAA,CAAM,KAAA;AACnC,MAAA,IAAI,CAAC,YAAY,OAAO,KAAA;AACxB,MAAA,OAAO,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,YAAY,GAAG,CAAA;AAAA,IAC7D,CAAA;AAEA,IAAA,MAAM,MAAA,GAASoB,IAAwB,IAAI,CAAA;AAC3C,IAAA,MAAM,UAAA,GAAaA,IAAwB,IAAI,CAAA;AAC/C,IAAA,MAAM,MAAA,GAASA,IAAiD,IAAI,CAAA;AAEpE,IAAA,MAAM,MAAA,GAASA,IAA4C,MAAM,CAAA;AACjE,IAAA,MAAM,SAAA,GAAYA,IAAI,EAAE,CAAA;AACxB,IAAA,MAAM,eAAA,GAAkBA,IAAgC,IAAI,CAAA;AAC5D,IAAA,MAAM,GAAA,GAAMA,GAAAA,CAAe,EAAE,CAAA;AAE7B,IAAA,MAAM,YAAA,GAAeA,IAAyB,IAAI,CAAA;AAClD,IAAA,MAAM,SAAA,GAAYA,IAAI,KAAK,CAAA;AAC3B,IAAA,MAAM,UAAA,GAAaA,IAAI,KAAK,CAAA;AAC5B,IAAA,MAAM,WAAA,GAAcA,IAAI,CAAC,CAAA;AAEzB,IAAA,MAAM,MAAA,GAASA,IAAmC,SAAS,CAAA;AAC3D,IAAA,MAAM,gBAAA,GAAmBA,IAAI,KAAK,CAAA;AAClC,IAAA,MAAM,WAAA,GAAcA,IAAwB,IAAI,CAAA;AAEhD,IAAA,MAAM,oBAAA,GAAuBA,GAAAA,CAAI,KAAA,CAAM,eAAA,IAAmB,GAAG,CAAA;AAC7D,IAAA,MAAM,oBAAA,GAAuBA,GAAAA,CAAI,OAAA,CAAQ,KAAA,CAAM,eAAe,CAAC,CAAA;AAC/D,IAAA,MAAM,sBAAA,GAAyBA,GAAAA,CAAI,KAAA,CAAM,iBAAA,IAAqB,GAAG,CAAA;AACjE,IAAA,MAAM,yBAAA,GAA4BA,GAAAA,CAAI,KAAA,CAAM,oBAAA,IAAwB,CAAC,CAAA;AAErE,IAAA,MAAM,QAAA,GAAW,MAAO,KAAA,CAAM,QAAA,IAAY,oBAAA,CAAqB,KAAA;AAC/D,IAAA,MAAM,QAAA,GAAW,MAAO,cAAA,CAAe,UAAU,IAAI,OAAA,CAAQ,KAAA,CAAM,QAAQ,CAAA,GAAI,oBAAA,CAAqB,KAAA;AACpG,IAAA,MAAM,UAAA,GAAa,MAAO,cAAA,CAAe,YAAY,IAAI,MAAA,CAAO,KAAA,CAAM,UAAU,CAAA,GAAI,sBAAA,CAAuB,KAAA;AAC3G,IAAA,MAAM,aAAA,GAAgB,MAAO,cAAA,CAAe,eAAe,IAAI,MAAA,CAAO,KAAA,CAAM,aAAa,CAAA,GAAI,yBAAA,CAA0B,KAAA;AAEvH,IAAA,MAAM,WAAA,GAAcA,IAAI,EAAE,CAAA;AAC1B,IAAA,MAAM,aAAA,GAAgBA,GAAAA,CAAmB,KAAA,CAAM,oBAAA,IAAwB,EAAE,SAAA,EAAW,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,eAAA,EAAiB,KAAA,EAAO,CAAA;AACtI,IAAA,MAAM,qBAAA,GAAwBA,IAAI,CAAC,CAAA;AACnC,IAAA,MAAM,SAAA,GAAYA,IAAI,KAAK,CAAA;AAC3B,IAAA,MAAM,aAAA,GAAgBA,GAAAA,CAAoB,EAAE,CAAA;AAE5C,IAAA,MAAM,mBAAmB,MAAM;AAC7B,MAAA,WAAA,CAAY,KAAA,GAAQ,IAAA;AAAA,IACtB,CAAA;AAEA,IAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAAuB;AAChD,MAAA,gBAAA,CAAiB,KAAA,GAAQ,IAAA;AACzB,MAAA,WAAA,CAAY,KAAA,GAAQ,WAAA,CAAY,KAAA,KAAU,KAAA,GAAQ,IAAA,GAAO,KAAA;AAAA,IAC3D,CAAA;AAEA,IAAA,MAAM,mBAAA,GAAsB,CAAC,IAAA,KAAkB;AAC7C,MAAA,IAAI,CAAC,cAAA,CAAe,UAAU,CAAA,uBAAwB,KAAA,GAAQ,IAAA;AAC9D,MAAA,IAAA,CAAK,mBAAmB,IAAI,CAAA;AAC5B,MAAA,IAAA,CAAK,kBAAkB,IAAI,CAAA;AAC3B,MAAA,MAAA,CAAO,KAAA,EAAO,YAAY,IAAI,CAAA;AAAA,IAChC,CAAA;AAEA,IAAA,MAAM,mBAAA,GAAsB,CAAC,IAAA,KAAiB;AAC5C,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,EAAM,EAAA,EAAI,GAAG,CAAA;AAChC,MAAA,IAAI,KAAA,CAAM,QAAA,IAAY,IAAA,EAAM,oBAAA,CAAqB,KAAA,GAAQ,IAAA;AACzD,MAAA,IAAA,CAAK,mBAAmB,IAAI,CAAA;AAC5B,MAAA,IAAA,CAAK,kBAAkB,IAAI,CAAA;AAC3B,MAAA,MAAA,CAAO,KAAA,EAAO,YAAY,IAAI,CAAA;AAAA,IAChC,CAAA;AAEA,IAAA,MAAM,qBAAA,GAAwB,CAAC,IAAA,KAAiB;AAC9C,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,EAAM,CAAA,EAAG,CAAC,CAAA;AAC7B,MAAA,IAAI,CAAC,cAAA,CAAe,YAAY,CAAA,yBAA0B,KAAA,GAAQ,IAAA;AAClE,MAAA,IAAA,CAAK,qBAAqB,IAAI,CAAA;AAC9B,MAAA,IAAA,CAAK,oBAAoB,IAAI,CAAA;AAC7B,MAAA,MAAA,CAAO,KAAA,EAAO,cAAc,IAAI,CAAA;AAAA,IAClC,CAAA;AAEA,IAAA,MAAM,wBAAA,GAA2B,CAAC,IAAA,KAAiB;AACjD,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,EAAM,CAAA,EAAG,GAAG,CAAA;AAC/B,MAAA,IAAI,CAAC,cAAA,CAAe,eAAe,CAAA,4BAA6B,KAAA,GAAQ,IAAA;AACxE,MAAA,IAAA,CAAK,wBAAwB,IAAI,CAAA;AACjC,MAAA,IAAA,CAAK,uBAAuB,IAAI,CAAA;AAChC,MAAA,MAAA,CAAO,KAAA,EAAO,iBAAiB,IAAI,CAAA;AAAA,IACrC,CAAA;AAEA,IAAA,MAAM,QAAA,GAAW,OAAO,QAAA,KAAmB;AACzC,MAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACnB,MAAA,MAAA,CAAO,KAAA,GAAQ,SAAA;AACf,MAAA,SAAA,CAAU,KAAA,GAAQ,EAAA;AAClB,MAAA,GAAA,CAAI,QAAQ,EAAC;AACb,MAAA,YAAA,CAAa,KAAA,GAAQ,IAAA;AACrB,MAAA,SAAA,CAAU,KAAA,GAAQ,KAAA;AAClB,MAAA,WAAA,CAAY,KAAA,GAAQ,CAAA;AACpB,MAAA,aAAA,CAAc,QAAQ,EAAC;AACvB,MAAA,qBAAA,CAAsB,KAAA,GAAQ,CAAA;AAC9B,MAAA,SAAA,CAAU,KAAA,GAAQ,KAAA;AAElB,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AAChC,QAAA,MAAA,CAAO,KAAA,GAAQ,OAAA;AAAA,MACjB,SAAS,CAAA,EAAQ;AACf,QAAA,MAAA,CAAO,KAAA,GAAQ,OAAA;AACf,QAAA,SAAA,CAAU,QAAQ,CAAA,EAAG,OAAA,GAAU,MAAA,CAAO,CAAA,CAAE,OAAO,CAAA,GAAI,0BAAA;AACnD,QAAA,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,MACjB;AAAA,IACF,CAAA;AAEA,IAAA,IAAI,cAAA,GAAyC,IAAA;AAE7C,IAAA,MAAM,gBAAgB,YAAY;AAChC,MAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AAEnB,MAAA,cAAA,EAAgB,KAAA,EAAM;AACtB,MAAA,cAAA,GAAiB,IAAA;AACjB,MAAA,eAAA,CAAgB,KAAA,GAAQ,IAAA;AAExB,MAAA,IAAI,MAAM,IAAA,EAAM;AACd,QAAA,MAAM,QAAA,CAAS,MAAM,IAAI,CAAA;AACzB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,EAAS,IAAA,EAAK;AACpC,MAAA,IAAI,CAAC,OAAA,EAAS;AAEd,MAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,MAAA,cAAA,GAAiB,UAAA;AACjB,MAAA,eAAA,CAAgB,KAAA,GAAQ,UAAA;AAExB,MAAA,MAAA,CAAO,KAAA,GAAQ,SAAA;AACf,MAAA,SAAA,CAAU,KAAA,GAAQ,EAAA;AAClB,MAAA,GAAA,CAAI,QAAQ,EAAC;AACb,MAAA,YAAA,CAAa,KAAA,GAAQ,IAAA;AACrB,MAAA,SAAA,CAAU,KAAA,GAAQ,KAAA;AAClB,MAAA,WAAA,CAAY,KAAA,GAAQ,CAAA;AACpB,MAAA,aAAA,CAAc,QAAQ,EAAC;AACvB,MAAA,qBAAA,CAAsB,KAAA,GAAQ,CAAA;AAC9B,MAAA,SAAA,CAAU,KAAA,GAAQ,KAAA;AAElB,MAAA,IAAI;AACF,QAAA,MAAM,UAAA,GAAa,MAAM,kBAAA,CAAmB,OAAA,EAAS,WAAW,MAAM,CAAA;AACtE,QAAA,IAAI,UAAA,CAAW,OAAO,OAAA,EAAS;AAC/B,QAAA,IAAI,mBAAmB,UAAA,EAAY;AACnC,QAAA,eAAA,CAAgB,KAAA,GAAQ,MAAA;AACxB,QAAA,MAAM,SAAS,UAAU,CAAA;AAAA,MAC3B,SAAS,CAAA,EAAQ;AACf,QAAA,IAAI,CAAA,EAAG,SAAS,YAAA,EAAc;AAC9B,QAAA,MAAA,CAAO,KAAA,GAAQ,OAAA;AACf,QAAA,SAAA,CAAU,QAAQ,CAAA,EAAG,OAAA,GAAU,MAAA,CAAO,CAAA,CAAE,OAAO,CAAA,GAAI,0BAAA;AACnD,QAAA,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,MACjB,CAAA,SAAE;AACA,QAAA,IAAI,cAAA,KAAmB,UAAA,EAAY,eAAA,CAAgB,KAAA,GAAQ,IAAA;AAAA,MAC7D;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,SAAA,GAAY,OAAO,KAAA,KAAkB;AACzC,MAAA,MAAM,IAAI,MAAA,CAAO,KAAA;AACjB,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,EAAK;AAC9B,MAAA,WAAA,CAAY,KAAA,GAAQ,KAAA;AACpB,MAAA,qBAAA,CAAsB,KAAA,GAAQ,CAAA;AAC9B,MAAA,SAAA,CAAU,KAAA,GAAQ,QAAQ,UAAU,CAAA;AAEpC,MAAA,IAAI,CAAC,CAAA,IAAK,CAAC,UAAA,EAAY;AACrB,QAAA,CAAA,EAAG,WAAA,EAAY;AACf,QAAA,aAAA,CAAc,QAAQ,EAAC;AACvB,QAAA,SAAA,CAAU,KAAA,GAAQ,KAAA;AAClB,QAAA;AAAA,MACF;AAEA,MAAA,CAAA,CAAE,YAAA,EAAa;AACf,MAAA,IAAI;AACF,QAAA,MAAM,UAAU,MAAM,CAAA,CAAE,MAAA,CAAO,UAAA,EAAY,cAAc,KAAK,CAAA;AAC9D,QAAA,aAAA,CAAc,KAAA,GAAQ,OAAA;AACtB,QAAA,qBAAA,CAAsB,KAAA,GAAQ,GAAA;AAAA,MAChC,SAAS,CAAA,EAAG;AACV,QAAA,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,MACjB,CAAA,SAAE;AACA,QAAA,SAAA,CAAU,KAAA,GAAQ,KAAA;AAAA,MACpB;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAqB;AAC3C,MAAA,IAAI,CAAC,MAAM,iBAAA,EAAmB;AAC9B,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,WAAA,EAAa,MAAA,CAAO,OAAO,QAAA,EAAS;AAClD,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,YAAA,EAAc,MAAA,CAAO,OAAO,QAAA,EAAS;AACnD,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU,gBAAA,EAAiB;AAAA,IAC3C,CAAA;AAEA,IAAA,IAAI,aAAA,GAAgB,CAAA;AACpB,IAAA,IAAI,aAAA,GAAgB,CAAA;AACpB,IAAA,IAAI,eAAA,GAAkB,KAAA;AACtB,IAAA,IAAI,YAAA,GAAe,KAAA;AACnB,IAAA,IAAI,kBAAA,GAAqB,KAAA;AACzB,IAAA,IAAI,cAAA,GAAiB,CAAA;AACrB,IAAA,IAAI,YAAA,GAAe,CAAA;AACnB,IAAA,IAAI,YAAA,GAAe,CAAA;AACnB,IAAA,IAAI,cAAA,GAAiB,KAAA;AACrB,IAAA,MAAM,SAAA,uBAAgB,OAAA,EAAkB;AAExC,IAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAAoB;AAC9C,MAAA,MAAM,IAAI,CAAA,CAAE,MAAA;AACZ,MAAA,IAAI,CAAC,CAAA,EAAG;AACR,MAAA,IAAI,EAAE,OAAA,CAAQ,oBAAoB,KAAK,CAAA,CAAE,OAAA,CAAQ,sBAAsB,CAAA,EAAG;AAC1E,MAAA,IAAI,CAAA,CAAE,OAAA,CAAQ,+EAA+E,CAAA,EAAG;AAEhG,MAAA,IAAI,MAAA,CAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,IAAI,CAAA,CAAE,gBAAgB,OAAA,EAAS;AAC/B,QAAA,IAAA,CAAK,CAAA,CAAE,OAAA,GAAU,CAAA,MAAO,CAAA,EAAG;AAC3B,QAAA,cAAA,GAAiB,IAAA;AACjB,QAAA,YAAA,GAAe,CAAA,CAAE,OAAA;AACjB,QAAA,YAAA,GAAe,CAAA,CAAE,OAAA;AACjB,QAAA;AAAA,MACF;AAEA,MAAA,eAAA,GAAkB,IAAA;AAClB,MAAA,YAAA,GAAe,KAAA;AACf,MAAA,kBAAA,GAAqB,KAAA;AACrB,MAAA,cAAA,GAAiB,CAAA,CAAE,SAAA;AACnB,MAAA,aAAA,GAAgB,CAAA,CAAE,OAAA;AAClB,MAAA,aAAA,GAAgB,CAAA,CAAE,OAAA;AAAA,IACpB,CAAA;AAEA,IAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAAoB;AAC9C,MAAA,IAAI,MAAA,CAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,IAAI,CAAC,cAAA,EAAgB;AACrB,QAAA,IAAI,EAAE,WAAA,KAAgB,OAAA,IAAA,CAAY,CAAA,CAAE,OAAA,GAAU,OAAO,CAAA,EAAG;AACtD,UAAA,cAAA,GAAiB,KAAA;AACjB,UAAA;AAAA,QACF;AAEA,QAAA,MAAMC,GAAAA,GAAK,EAAE,OAAA,GAAU,YAAA;AACvB,QAAA,MAAMC,GAAAA,GAAK,EAAE,OAAA,GAAU,YAAA;AAEvB,QAAA,IAAI,IAAA,CAAK,GAAA,CAAIA,GAAE,CAAA,GAAI,IAAA,CAAK,GAAA,CAAID,GAAE,CAAA,IAAK,IAAA,CAAK,GAAA,CAAIC,GAAE,CAAA,IAAK,EAAA,EAAI;AACrD,UAAA,cAAA,GAAiB,KAAA;AACjB,UAAA;AAAA,QACF;AAEA,QAAA,IAAI,IAAA,CAAK,GAAA,CAAID,GAAE,CAAA,IAAK,EAAA,IAAM,IAAA,CAAK,GAAA,CAAIA,GAAE,CAAA,GAAI,IAAA,CAAK,GAAA,CAAIC,GAAE,CAAA,EAAG;AACrD,UAAA,cAAA,GAAiB,KAAA;AACjB,UAAA,IAAID,GAAAA,GAAK,CAAA,EAAG,MAAA,CAAO,KAAA,EAAO,QAAA,EAAS;AAAA,eAC9B,MAAA,CAAO,OAAO,QAAA,EAAS;AAAA,QAC9B;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,eAAA,EAAiB;AACtB,MAAA,MAAM,EAAA,GAAK,EAAE,OAAA,GAAU,aAAA;AACvB,MAAA,MAAM,EAAA,GAAK,EAAE,OAAA,GAAU,aAAA;AAEvB,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,GAAI,CAAA,IAAK,KAAK,GAAA,CAAI,EAAE,CAAA,GAAI,CAAA,EAAG,YAAA,GAAe,IAAA;AACzD,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,GAAI,CAAA,EAAG;AAEtB,MAAA,IAAI,KAAK,GAAA,CAAI,EAAE,IAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG;AAC/B,QAAA,IAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,IAAK,GAAG,eAAA,GAAkB,KAAA;AACzC,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,MAAM,GAAA,EAAK;AACb,QAAA,kBAAA,GAAqB,IAAA;AACrB,QAAA,eAAA,GAAkB,KAAA;AAClB,QAAA,gBAAA,CAAiB,KAAA,GAAQ,IAAA;AACzB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,MAAM,EAAA,EAAI;AACZ,QAAA,kBAAA,GAAqB,IAAA;AACrB,QAAA,eAAA,GAAkB,KAAA;AAClB,QAAA,gBAAA,CAAiB,KAAA,GAAQ,KAAA;AACzB,QAAA,WAAA,CAAY,KAAA,GAAQ,IAAA;AAAA,MACtB;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,iBAAA,GAAoB,CAAC,CAAA,KAAoB;AAC7C,MAAA,IAAI,MAAA,CAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,cAAA,GAAiB,KAAA;AACjB,QAAA,eAAA,GAAkB,KAAA;AAClB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,kBAAA,EAAoB;AACtB,QAAA,eAAA,GAAkB,KAAA;AAClB,QAAA,YAAA,GAAe,KAAA;AACf,QAAA,kBAAA,GAAqB,KAAA;AACrB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,QAAA,YAAA,GAAe,KAAA;AACf,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,EAAA,GAAK,EAAE,OAAA,GAAU,aAAA;AACvB,MAAA,MAAM,EAAA,GAAK,EAAE,OAAA,GAAU,aAAA;AACvB,MAAA,MAAM,EAAA,GAAK,EAAE,SAAA,GAAY,cAAA;AACzB,MAAA,MAAM,KAAA,GAAQ,CAAC,YAAA,IAAgB,IAAA,CAAK,MAAM,EAAA,EAAI,EAAE,CAAA,IAAK,EAAA,IAAM,EAAA,IAAM,GAAA;AAEjE,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,MAAM,IAAA,GAAO,CAAC,gBAAA,CAAiB,KAAA;AAC/B,QAAA,gBAAA,CAAiB,KAAA,GAAQ,IAAA;AACzB,QAAA,IAAI,CAAC,IAAA,EAAM,WAAA,CAAY,KAAA,GAAQ,IAAA;AAAA,MACjC;AAEA,MAAA,eAAA,GAAkB,KAAA;AAClB,MAAA,YAAA,GAAe,KAAA;AAAA,IACjB,CAAA;AAEA,IAAA,MAAM,2BAAA,GAA8B,CAAC,GAAA,KAAkB;AACrD,MAAA,IAAI,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA,EAAG;AACxB,MAAA,SAAA,CAAU,IAAI,GAAG,CAAA;AACjB,MAAA,GAAA,CAAI,gBAAA,CAAiB,eAAe,kBAAkB,CAAA;AACtD,MAAA,GAAA,CAAI,gBAAA,CAAiB,eAAe,kBAAkB,CAAA;AACtD,MAAA,GAAA,CAAI,gBAAA,CAAiB,aAAa,iBAAiB,CAAA;AACnD,MAAA,GAAA,CAAI,gBAAA,CAAiB,iBAAiB,iBAAiB,CAAA;AAAA,IACzD,CAAA;AAEA,IAAA,IAAI,EAAA,GAA4B,IAAA;AAEhC,IAAA,SAAA,CAAU,YAAY;AACpB,MAAA,MAAME,QAAAA,EAAS;AACf,MAAA,MAAM,OAAO,UAAA,CAAW,KAAA;AACxB,MAAA,IAAI,CAAC,IAAA,EAAM;AAEX,MAAA,IAAI;AACF,QAAA,MAAA,CAAO,KAAA,GAAQ,kBAAkB,IAAA,EAAM;AAAA,UACrC,UAAU,QAAA,EAAS;AAAA,UACnB,UAAU,QAAA,EAAS;AAAA,UACnB,YAAY,UAAA,EAAW;AAAA,UACvB,eAAe,aAAA,EAAc;AAAA,UAC7B,OAAA,EAAS,CAACC,EAAAA,KAAM,IAAA,CAAK,SAASA,EAAC,CAAA;AAAA,UAC/B,OAAA,EAAS,CAAC,CAAA,KAAM,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,UAC/B,UAAA,EAAY,CAAC,IAAA,KAAS;AACpB,YAAA,YAAA,CAAa,KAAA,GAAQ,IAAA;AACrB,YAAA,IAAI,CAAC,WAAW,KAAA,EAAO;AACrB,cAAA,SAAA,CAAU,KAAA,GAAQ,KAAA;AAAA,YACpB;AACA,YAAA,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA,UACvB,CAAA;AAAA,UACA,KAAA,EAAO,CAAC,KAAA,KAAW,GAAA,CAAI,KAAA,GAAQ,KAAA;AAAA,UAC/B,gBAAA,EAAkB,CAAC,IAAA,KAAS;AAC1B,YAAA,IAAI,OAAO,IAAA,CAAK,QAAA,KAAa,QAAA,EAAU,qBAAA,CAAsB,QAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,QAAA,GAAW,GAAG,CAAA;AAAA,UACrG,CAAA;AAAA,UACA,aAAA,EAAe,CAAC,GAAA,KAAQ,2BAAA,CAA4B,GAAG;AAAA,SACxD,CAAA;AACD,QAAA,MAAA,CAAO,KAAA,GAAQ,OAAA;AAAA,MACjB,SAAS,CAAA,EAAQ;AACf,QAAA,MAAA,CAAO,KAAA,GAAQ,OAAA;AACf,QAAA,SAAA,CAAU,QAAQ,CAAA,EAAG,OAAA,GAAU,MAAA,CAAO,CAAA,CAAE,OAAO,CAAA,GAAI,gCAAA;AACnD,QAAA,IAAA,CAAK,SAAS,CAAC,CAAA;AACf,QAAA;AAAA,MACF;AAEA,MAAA,KAAK,aAAA,EAAc;AAEnB,MAAA,MAAM,OAAO,MAAA,CAAO,KAAA;AACpB,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,IAAA,CAAK,gBAAA,CAAiB,WAAW,cAAc,CAAA;AAC/C,QAAA,IAAA,CAAK,gBAAA,CAAiB,eAAe,kBAAkB,CAAA;AACvD,QAAA,IAAA,CAAK,gBAAA,CAAiB,eAAe,kBAAkB,CAAA;AACvD,QAAA,IAAA,CAAK,gBAAA,CAAiB,aAAa,iBAAiB,CAAA;AACpD,QAAA,IAAA,CAAK,gBAAA,CAAiB,iBAAiB,iBAAiB,CAAA;AAAA,MAC1D;AAEA,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,EAAA,GAAK,IAAI,cAAA,CAAe,CAAC,OAAA,KAAY;AACnC,UAAA,MAAM,CAAA,GAAI,QAAQ,CAAC,CAAA,EAAG,aAAa,KAAA,IAAS,IAAA,CAAK,uBAAsB,CAAE,KAAA;AACzE,UAAA,MAAA,CAAO,QAAQ,CAAA,IAAK,gBAAA,GAAmB,QAAA,GAAW,CAAA,IAAK,iBAAiB,MAAA,GAAS,SAAA;AAAA,QACnF,CAAC,CAAA;AACD,QAAA,EAAA,CAAG,QAAQ,IAAI,CAAA;AAAA,MACjB;AAAA,IACF,CAAC,CAAA;AAED,IAAAC,gBAAgB,MAAM;AACpB,MAAA,cAAA,EAAgB,KAAA,EAAM;AACtB,MAAA,eAAA,CAAgB,KAAA,GAAQ,IAAA;AACxB,MAAA,MAAM,OAAO,MAAA,CAAO,KAAA;AACpB,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,IAAA,CAAK,mBAAA,CAAoB,WAAW,cAAc,CAAA;AAClD,QAAA,IAAA,CAAK,mBAAA,CAAoB,eAAe,kBAAkB,CAAA;AAC1D,QAAA,IAAA,CAAK,mBAAA,CAAoB,eAAe,kBAAkB,CAAA;AAC1D,QAAA,IAAA,CAAK,mBAAA,CAAoB,aAAa,iBAAiB,CAAA;AACvD,QAAA,IAAA,CAAK,mBAAA,CAAoB,iBAAiB,iBAAiB,CAAA;AAAA,MAC7D;AACA,MAAA,EAAA,EAAI,UAAA,EAAW;AACf,MAAA,MAAA,CAAO,OAAO,OAAA,EAAQ;AACtB,MAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AAAA,IACjB,CAAC,CAAA;AAED,IAAAC,KAAAA;AAAA,MACE,MAAM,CAAC,KAAA,CAAM,IAAA,EAAM,MAAM,OAAO,CAAA;AAAA,MAChC,MAAM,KAAK,aAAA;AAAc,KAC3B;AAEA,IAAAA,KAAAA;AAAA,MACE,MAAM,QAAA,EAAS;AAAA,MACf,CAAC,CAAA,KAAM,MAAA,CAAO,OAAO,WAAA,CAAY,OAAA,CAAQ,CAAC,CAAC;AAAA,KAC7C;AAEA,IAAAA,KAAAA;AAAA,MACE,MAAM,QAAA,EAAS;AAAA,MACf,CAAC,CAAA,KAAM,MAAA,CAAO,OAAO,WAAA,CAAY,MAAA,CAAO,CAAC,CAAC;AAAA,KAC5C;AAEA,IAAAA,KAAAA;AAAA,MACE,MAAM,UAAA,EAAW;AAAA,MACjB,CAAC,CAAA,KAAM,MAAA,CAAO,OAAO,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC;AAAA,KAC9C;AAEA,IAAAA,KAAAA;AAAA,MACE,MAAM,aAAA,EAAc;AAAA,MACpB,CAAC,CAAA,KAAM,MAAA,CAAO,OAAO,gBAAA,CAAiB,MAAA,CAAO,CAAC,CAAC;AAAA,KACjD;AAEA,IAAAA,KAAAA;AAAA,MACE,MAAM,MAAA,CAAO,KAAA;AAAA,MACb,CAAC,CAAA,KAAM;AACL,QAAA,IAAI,MAAM,QAAA,EAAU;AAClB,UAAA,WAAA,CAAY,KAAA,GAAQ,IAAA;AACpB,UAAA,gBAAA,CAAiB,KAAA,GAAQ,KAAA;AAAA,QAC3B;AAAA,MACF;AAAA,KACF;AAEA,IAAA,MAAA,CAA8B;AAAA,MAC5B,QAAA,EAAU,MAAM,MAAA,CAAO,KAAA,EAAO,QAAA,EAAS;AAAA,MACvC,QAAA,EAAU,MAAM,MAAA,CAAO,KAAA,EAAO,QAAA,EAAS;AAAA,MACvC,WAAA,EAAa,MAAM,MAAA,CAAO,KAAA,EAAO,WAAA,EAAY;AAAA,MAC7C,WAAA,EAAa,MAAM,MAAA,CAAO,KAAA,EAAO,WAAA,EAAY;AAAA,MAC7C,MAAM,CAAC,CAAA,KAAM,MAAA,CAAO,KAAA,EAAO,KAAK,CAAC,CAAA;AAAA,MACjC,cAAc,CAAC,CAAA,KAAM,MAAA,CAAO,KAAA,EAAO,aAAa,CAAC,CAAA;AAAA,MACjD,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAA,KAAO,OAAO,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA,GAAI,OAAA,CAAQ,OAAA,CAAQ,EAAE,CAAA;AAAA,MAChF,YAAA,EAAc,MAAM,MAAA,CAAO,KAAA,EAAO,YAAA,EAAa;AAAA,MAC/C,WAAA,EAAa,MAAM,MAAA,CAAO,KAAA,EAAO,WAAA;AAAY,KAC9C,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAA,CAAO,aAAa,KAAA,EAAO,QAAA,IAAY,KAAK,GAAG,CAAA;AAChE,MAAA,MAAM,SAAA,GAAY,SAAA,CAAU,KAAA,GAAQ,WAAA,CAAY,KAAA,GAAQ,GAAA;AACxD,MAAA,MAAM,YAAA,GAAe,YAAA,CAAa,KAAA,EAAO,OAAA,EAAS,KAAA,IAAS,EAAA;AAC3D,MAAA,MAAM,MAAA,GAAS,EAAE,KAAA,EAAO,EAAE,OAAO,qBAAA,EAAuB,GAAA,EAAK,YAAY,CAAA;AACzE,MAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,KAAA,GAC5B,CAAA,CAAE,KAAA,EAAO,EAAE,KAAA,EAAO,sBAAA,EAAwB,IAAA,EAAM,QAAA,EAAU,WAAA,EAAa,QAAA,EAAS,EAAG;AAAA,QACjF,EAAE,KAAA,EAAO,EAAE,OAAO,sBAAA,EAAwB,aAAA,EAAe,QAAQ,CAAA;AAAA,QACjE,CAAA,CAAE,KAAA,EAAO,EAAE,KAAA,EAAO,2BAAA,IAA+B,eAAA,CAAgB,KAAA,KAAU,UAAA,GAAa,0BAAA,GAAS,0BAAM;AAAA,OACxG,CAAA,GACD,IAAA;AAEJ,MAAA,MAAM,QAAA,GAAW;AAAA,QACf,MAAA;AAAA,QACA,OAAA;AAAA,QACA,EAAE,gBAAA,EAAU;AAAA,UACV,UAAA,EAAY,MAAA,CAAO,KAAA,KAAU,QAAA,GAAW,iBAAiB,KAAA,GAAQ,IAAA;AAAA,UACjE,aAAa,WAAA,CAAY,KAAA;AAAA,UACzB,KAAK,GAAA,CAAI,KAAA;AAAA,UACT,QAAQ,MAAA,CAAO,KAAA;AAAA,UACf,WAAW,SAAA,CAAU,KAAA;AAAA,UACrB,YAAA;AAAA,UACA,gBAAA,EAAkB,SAAA;AAAA,UAClB,UAAU,QAAA,EAAS;AAAA,UACnB,UAAU,QAAA,EAAS;AAAA,UACnB,YAAY,UAAA,EAAW;AAAA,UACvB,eAAe,aAAA,EAAc;AAAA,UAC7B,aAAa,WAAA,CAAY,KAAA;AAAA,UACzB,eAAe,aAAA,CAAc,KAAA;AAAA,UAC7B,uBAAuB,qBAAA,CAAsB,KAAA;AAAA,UAC7C,WAAW,SAAA,CAAU,KAAA;AAAA,UACrB,eAAe,aAAA,CAAc,KAAA;AAAA,UAE7B,aAAA,EAAe,MAAM,MAAA,CAAO,KAAA,EAAO,WAAA,EAAY;AAAA,UAC/C,UAAA,EAAY,MAAM,MAAA,CAAO,KAAA,EAAO,QAAA,EAAS;AAAA,UACzC,UAAA,EAAY,MAAM,MAAA,CAAO,KAAA,EAAO,QAAA,EAAS;AAAA,UACzC,aAAA,EAAe,MAAM,MAAA,CAAO,KAAA,EAAO,WAAA,EAAY;AAAA,UAE/C,aAAA,EAAe,iBAAA;AAAA,UACf,YAAA,EAAc,gBAAA;AAAA,UACd,WAAA,EAAa,CAAC,IAAA,KAA6B;AACzC,YAAA,IAAI,IAAA,EAAM,MAAA,CAAO,KAAA,EAAO,IAAA,CAAK,IAAI,CAAA;AAAA,UACnC,CAAA;AAAA,UACA,QAAA,EAAU,CAAC,CAAA,KAAc,KAAK,UAAU,CAAC,CAAA;AAAA,UACzC,sBAAA,EAAwB,CAAC,CAAA,KAAe,WAAA,CAAY,KAAA,GAAQ,CAAA;AAAA,UAC5D,wBAAA,EAA0B,CAAC,CAAA,KAA+B,aAAA,CAAc,KAAA,GAAQ,EAAE,GAAG,aAAA,CAAc,KAAA,EAAO,GAAG,CAAA,EAAE;AAAA,UAC/G,cAAA,EAAgB,MAAM,MAAA,CAAO,KAAA,EAAO,YAAA,EAAa;AAAA,UACjD,oBAAA,EAAsB,CAAC,GAAA,KAAgB;AACrC,YAAA,IAAI,GAAA,EAAK,MAAA,CAAO,KAAA,EAAO,IAAA,CAAK,GAAG,CAAA;AAAA,UACjC,CAAA;AAAA,UACA,aAAa,MAAM;AACjB,YAAA,SAAA,CAAU,KAAA,GAAQ,IAAA;AAClB,YAAA,UAAA,CAAW,KAAA,GAAQ,IAAA;AAAA,UACrB,CAAA;AAAA,UACA,YAAA,EAAc,CAAC,CAAA,KAAe,WAAA,CAAY,KAAA,GAAQ,CAAA;AAAA,UAClD,SAAA,EAAW,CAAC,CAAA,KAAc;AACxB,YAAA,UAAA,CAAW,KAAA,GAAQ,KAAA;AACnB,YAAA,MAAA,CAAO,KAAA,EAAO,YAAA,CAAa,CAAA,GAAI,GAAG,CAAA;AAAA,UACpC,CAAA;AAAA,UACA,YAAA,EAAc,CAAC,CAAA,KAAc;AAC3B,YAAA,UAAA,CAAW,KAAA,GAAQ,KAAA;AACnB,YAAA,MAAA,CAAO,KAAA,EAAO,YAAA,CAAa,CAAA,GAAI,GAAG,CAAA;AAAA,UACpC,CAAA;AAAA,UACA,gBAAA,EAAkB,mBAAA;AAAA,UAClB,gBAAA,EAAkB,mBAAA;AAAA,UAClB,kBAAA,EAAoB,qBAAA;AAAA,UACpB,qBAAA,EAAuB;AAAA,SACzB,EAAG;AAAA,UACD,YAAA,EAAc,MAAM,KAAA,CAAM,kBAAA;AAAqB,SAChD;AAAA,OACH;AAEA,MAAA,OAAO,CAAA;AAAA,QACL,KAAA;AAAA,QACA;AAAA,UACE,GAAA,EAAK,MAAA;AAAA,UACL,KAAA,EAAO,aAAA;AAAA,UACP,OAAO,KAAA,CAAM,UAAA,GAAc,EAAE,sBAAA,EAAwB,KAAA,CAAM,YAAW,GAAY,MAAA;AAAA,UAClF,YAAA,EAAc,QAAA,EAAS,GAAI,MAAA,GAAS,OAAA;AAAA,UACpC,eAAe,MAAA,CAAO,KAAA;AAAA,UACtB,WAAA,EAAa,gBAAgB,KAAA,IAAS,IAAA;AAAA,UACtC,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,EACF;AACF,CAAC","file":"vue.js","sourcesContent":["import 'foliate-js/view.js'\r\nimport type { EBookReaderHandle, EBookReaderOptions, ProgressInfo, SearchOptions, SearchResult, TocItem } from './types.js'\r\n\r\ntype FoliateViewElement = HTMLElement & {\r\n book?: { toc?: TocItem[] }\r\n renderer?: {\r\n prevSection?: () => void\r\n nextSection?: () => void\r\n setStyles?: (css: string) => void\r\n render?: () => void\r\n expand?: () => void\r\n }\r\n open?: (file: File) => Promise<void>\r\n init?: (options?: unknown) => Promise<void>\r\n goLeft?: () => void\r\n goRight?: () => void\r\n goTo?: (target: string) => Promise<void> | void\r\n goToFraction?: (fraction: number) => Promise<void> | void\r\n search?: (options: unknown) => AsyncIterable<unknown>\r\n clearSearch?: () => void\r\n}\r\n\r\nconst getContentCSS = (fontSize: number, isDark: boolean, lineHeight: number, letterSpacing: number, extraCSS?: string) => `\n@namespace epub \"http://www.idpf.org/2007/ops\";\r\nhtml {\r\n color-scheme: ${isDark ? 'dark' : 'light'} !important;\r\n}\r\nbody {\r\n background-color: transparent !important;\r\n color: ${isDark ? '#e0e0e0' : 'black'} !important;\r\n font-size: ${fontSize}% !important;\r\n line-height: ${lineHeight} !important;\n letter-spacing: ${letterSpacing}em !important;\n}\r\np {\r\n line-height: inherit !important;\n margin-bottom: 1em;\r\n}\r\na {\r\n color: ${isDark ? '#64b5f6' : '#2563eb'} !important;\r\n}\r\nimg {\r\n max-width: 100%;\r\n height: auto;\r\n object-fit: contain;\r\n ${isDark ? 'filter: brightness(0.8) contrast(1.2);' : ''}\r\n}\r\n${extraCSS ?? ''}\r\n`\r\n\r\nexport function createEBookReader(container: HTMLElement, options: EBookReaderOptions = {}): EBookReaderHandle {\r\n if (!container) throw new Error('container is required')\r\n if (!customElements.get('foliate-view')) throw new Error('foliate-view is not defined')\r\n\r\n const {\r\n darkMode: initialDarkMode = false,\r\n fontSize: initialFontSize = 100,\r\n lineHeight: initialLineHeight = 1.6,\n letterSpacing: initialLetterSpacing = 0,\n extraContentCSS,\r\n onReady,\r\n onError,\r\n onProgress,\r\n onToc,\r\n onSearchProgress,\r\n onContentLoad,\r\n } = options\r\n\r\n let destroyed = false\r\n let toc: TocItem[] = []\r\n let fontSize = initialFontSize\r\n let darkMode = initialDarkMode\r\n let lineHeight = initialLineHeight\n let letterSpacing = initialLetterSpacing\n let searchToken = 0\r\n\r\n container.innerHTML = ''\r\n\r\n const viewer = document.createElement('foliate-view') as FoliateViewElement\r\n viewer.style.display = 'block'\r\n viewer.style.width = '100%'\r\n viewer.style.height = '100%'\r\n viewer.setAttribute('margin', '48')\r\n viewer.setAttribute('gap', '0.07')\r\n\r\n const applyStyles = () => {\r\n if (destroyed) return\r\n if (!viewer.renderer?.setStyles) return\r\n viewer.renderer.setStyles(getContentCSS(fontSize, darkMode, lineHeight, letterSpacing, extraContentCSS))\n requestAnimationFrame(() => {\r\n setTimeout(() => {\r\n if (destroyed) return\r\n viewer.renderer?.render?.()\r\n viewer.renderer?.expand?.()\r\n }, 50)\r\n })\r\n }\r\n\r\n const handleLoad = (e: Event) => {\r\n applyStyles()\r\n const detail = (e as CustomEvent).detail as { doc?: Document } | undefined\r\n if (detail?.doc) onContentLoad?.(detail.doc)\r\n }\r\n\r\n const handleRelocate = (e: Event) => {\r\n const detail = (e as CustomEvent).detail as ProgressInfo\r\n onProgress?.(detail)\r\n }\r\n\r\n viewer.addEventListener('load', handleLoad as EventListener)\r\n viewer.addEventListener('relocate', handleRelocate as EventListener)\r\n\r\n container.appendChild(viewer)\r\n\r\n const handle: EBookReaderHandle = {\r\n async open(file) {\r\n if (destroyed) return\r\n if (!file) return\r\n\r\n try {\r\n viewer.clearSearch?.()\r\n searchToken++\r\n\r\n await viewer.open?.(file)\r\n\r\n const nextToc = viewer.book?.toc ?? []\r\n toc = nextToc\r\n onToc?.(toc)\r\n\r\n await viewer.init?.({ showTextStart: true })\r\n applyStyles()\r\n } catch (error) {\r\n onError?.(error)\r\n throw error\r\n }\r\n },\r\n destroy() {\r\n if (destroyed) return\r\n destroyed = true\r\n searchToken++\r\n viewer.removeEventListener('load', handleLoad)\r\n viewer.removeEventListener('relocate', handleRelocate as EventListener)\r\n container.innerHTML = ''\r\n },\r\n prevPage() {\r\n viewer.goLeft?.()\r\n },\r\n nextPage() {\r\n viewer.goRight?.()\r\n },\r\n prevSection() {\r\n viewer.renderer?.prevSection?.()\r\n },\r\n nextSection() {\r\n viewer.renderer?.nextSection?.()\r\n },\r\n goTo(target) {\r\n if (!target) return\r\n viewer.goTo?.(target)\r\n },\r\n goToFraction(fraction) {\r\n const safe = Math.min(1, Math.max(0, fraction))\r\n viewer.goToFraction?.(safe)\r\n },\r\n setDarkMode(nextDarkMode) {\r\n darkMode = nextDarkMode\r\n applyStyles()\r\n },\r\n setFontSize(nextFontSize) {\r\n const safe = Math.min(300, Math.max(50, nextFontSize))\r\n fontSize = safe\r\n applyStyles()\r\n },\r\n setLineHeight(nextLineHeight) {\n const safe = Math.min(3, Math.max(1, nextLineHeight))\n lineHeight = safe\n applyStyles()\n },\n setLetterSpacing(nextLetterSpacing) {\n const safe = Math.min(0.3, Math.max(0, nextLetterSpacing))\n letterSpacing = safe\n applyStyles()\n },\n async search(query, opts: SearchOptions = {}) {\r\n const normalized = query.trim()\r\n if (!normalized) {\r\n viewer.clearSearch?.()\r\n return []\r\n }\r\n\r\n const token = ++searchToken\r\n const results: SearchResult[] = []\r\n\r\n try {\r\n for await (const item of viewer.search?.({\r\n query: normalized,\r\n matchCase: Boolean(opts.matchCase),\r\n matchWholeWords: Boolean(opts.wholeWords),\r\n matchDiacritics: Boolean(opts.matchDiacritics),\r\n }) ?? []) {\r\n if (destroyed || token !== searchToken) return results\r\n\r\n if (item === 'done') {\r\n onSearchProgress?.({ done: true, progress: 1 })\r\n break\r\n }\r\n\r\n if (typeof item === 'object' && item && 'progress' in (item as any)) {\r\n const progress = (item as any).progress\r\n if (typeof progress === 'number') onSearchProgress?.({ progress })\r\n continue\r\n }\r\n\r\n const anyItem = item as any\r\n if (anyItem?.subitems?.length) {\r\n for (const sub of anyItem.subitems) {\r\n results.push({\r\n label: anyItem.label,\r\n cfi: sub?.cfi,\r\n excerpt: sub?.excerpt,\r\n title: sub?.title,\r\n })\r\n }\r\n } else if (anyItem?.cfi) {\r\n results.push({\r\n cfi: anyItem.cfi,\r\n excerpt: anyItem.excerpt,\r\n title: anyItem.title,\r\n })\r\n }\r\n }\r\n } catch (error) {\r\n onError?.(error)\r\n throw error\r\n }\r\n\r\n return results\r\n },\r\n cancelSearch() {\r\n searchToken++\r\n },\r\n clearSearch() {\r\n viewer.clearSearch?.()\r\n },\r\n getToc() {\r\n return toc\r\n },\r\n }\r\n\r\n onReady?.(handle)\r\n return handle\r\n}\r\n","import type { PropType } from 'vue'\nimport type { EBookReaderHandle, ProgressInfo, SearchOptions } from '../core/types.js'\n\nexport type MobilePanel = 'menu' | 'search' | 'progress' | 'settings'\n\nexport type EBookReaderVueExposed = Pick<\n EBookReaderHandle,\n 'prevPage' | 'nextPage' | 'prevSection' | 'nextSection' | 'goTo' | 'goToFraction' | 'search' | 'cancelSearch' | 'clearSearch'\n>\n\nexport type EBookReaderVueProps = {\n file?: File | null\n fileUrl?: string | null\n themeColor?: string\n defaultFontSize?: number\n fontSize?: number\n defaultLineHeight?: number\n lineHeight?: number\n defaultLetterSpacing?: number\n letterSpacing?: number\n defaultDarkMode?: boolean\n darkMode?: boolean\n enableKeyboardNav?: boolean\n defaultSearchOptions?: SearchOptions\n}\n\nexport const EBookReaderVuePropsDef = {\n file: { type: Object as PropType<File | null>, required: false },\n fileUrl: { type: String, required: false },\n themeColor: { type: String, required: false },\n defaultFontSize: { type: Number, required: false, default: 100 },\n fontSize: { type: Number, required: false },\n defaultLineHeight: { type: Number, required: false, default: 1.6 },\n lineHeight: { type: Number, required: false },\n defaultLetterSpacing: { type: Number, required: false, default: 0 },\n letterSpacing: { type: Number, required: false },\n defaultDarkMode: { type: Boolean, required: false, default: false },\n darkMode: { type: Boolean, required: false },\n enableKeyboardNav: { type: Boolean, required: false, default: true },\n defaultSearchOptions: {\n type: Object as PropType<SearchOptions>,\n required: false,\n default: () => ({ matchCase: false, wholeWords: false, matchDiacritics: false }),\n },\n} as const\n\nexport type EBookReaderVueEmits = {\n (e: 'ready', handle: EBookReaderHandle): void\n (e: 'error', error: unknown): void\n (e: 'progress', info: ProgressInfo): void\n (e: 'fontSizeChange', fontSize: number): void\n (e: 'lineHeightChange', lineHeight: number): void\n (e: 'letterSpacingChange', letterSpacing: number): void\n (e: 'darkModeChange', darkMode: boolean): void\n (e: 'update:fontSize', fontSize: number): void\n (e: 'update:lineHeight', lineHeight: number): void\n (e: 'update:letterSpacing', letterSpacing: number): void\n (e: 'update:darkMode', darkMode: boolean): void\n}\n","\nexport default (sfc, props) => {\n const target = sfc.__vccOpts || sfc;\n for (const [key, val] of props) {\n target[key] = val;\n }\n return target;\n}\n","<script setup lang=\"ts\">\r\nimport type { TocItem } from '../../core/types'\r\n\r\ndefineProps<{\r\n items: TocItem[]\r\n}>()\r\n\r\nconst emit = defineEmits<{\r\n (e: 'select', href?: string): void\r\n}>()\r\n</script>\r\n\r\n<template>\r\n <ul class=\"epub-reader__toc-list\">\r\n <li v-for=\"(item, idx) in items\" :key=\"item.href || `${item.label ?? 'item'}-${idx}`\" class=\"epub-reader__toc-item\">\r\n <template v-if=\"!item.subitems?.length\">\r\n <button type=\"button\" class=\"epub-reader__toc-btn\" @click=\"emit('select', item.href)\">\r\n {{ item.label || item.href || '未命名' }}\r\n </button>\r\n </template>\r\n <template v-else>\r\n <details class=\"epub-reader__toc-details\">\r\n <summary class=\"epub-reader__toc-summary\">{{ item.label || item.href || '未命名' }}</summary>\r\n <TocTree :items=\"item.subitems\" @select=\"emit('select', $event)\" />\r\n </details>\r\n </template>\r\n </li>\r\n </ul>\r\n</template>\r\n","<script setup lang=\"ts\">\nimport type { SearchResult } from '../../core/types'\n\ndefineProps<{\n results: SearchResult[]\n}>()\n\nconst emit = defineEmits<{\n (e: 'select', cfi: string): void\n}>()\n</script>\n\n<template>\n <ul class=\"epub-reader__search-list\">\n <li v-for=\"(r, idx) in results\" :key=\"`${r.cfi ?? 'no-cfi'}-${idx}`\" class=\"epub-reader__search-item\">\n <button\n type=\"button\"\n class=\"epub-reader__search-btn\"\n @click=\"r.cfi && emit('select', r.cfi)\"\n >\n <div v-if=\"r.label\" class=\"epub-reader__search-label\">{{ r.label }}</div>\n <div class=\"epub-reader__search-excerpt\">\n {{ typeof r.excerpt === 'string' ? r.excerpt : `${r.excerpt?.pre ?? ''}${r.excerpt?.match ?? ''}${r.excerpt?.post ?? ''}` }}\n </div>\n </button>\n </li>\n </ul>\n</template>\n","export const icons: Record<string, string> = {\n list: '<path d=\"M3 12h18M3 6h18M3 18h18\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n search: '<path d=\"M11 19a8 8 0 1 0 0-16 8 8 0 0 0 0 16zM21 21l-4.35-4.35\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n 'chevron-left': '<path d=\"M15 18l-6-6 6-6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n 'chevron-right': '<path d=\"M9 18l6-6-6-6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n 'chevrons-left': '<path d=\"M11 17l-5-5 5-5M18 17l-5-5 5-5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n 'chevrons-right': '<path d=\"M13 17l5-5-5-5M6 17l5-5-5-5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n sun: '<circle cx=\"12\" cy=\"12\" r=\"5\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>',\n moon: '<path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n plus: '<path d=\"M12 5v14M5 12h14\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n minus: '<path d=\"M5 12h14\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n x: '<path d=\"M18 6L6 18M6 6l12 12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n type: '<path d=\"M4 7V4h16v3M9 20h6M12 4v16\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n sliders: '<path d=\"M4 21v-7M4 10V3M12 21v-9M12 8V3M20 21v-5M20 12V3M1 14h6M9 8h6M17 16h6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>',\n progress:\n '<g transform=\"scale(0.0234375)\"><path fill=\"currentColor\" d=\"M835.79 610.26a25.38 25.38 0 1 1 0-50.77h129.77a25.38 25.38 0 0 1 0 50.77zM58.23 606.63a25.38 25.38 0 1 1 0-50.77h64.87a25.38 25.38 0 1 1 0 50.77z\"/><path fill=\"currentColor\" d=\"M479.73 264.12C627.34 264.12 747 383.78 747 531.39S627.34 798.66 479.73 798.66 212.46 679 212.46 531.39s119.66-267.27 267.27-267.27m0-46a312.43 312.43 0 1 0 122 24.64 311.35 311.35 0 0 0-122-24.64z\"/></g>',\n settings: '<path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M12.563 3.2h-1.126l-.645 2.578l-.647.2a6.3 6.3 0 0 0-1.091.452l-.599.317l-2.28-1.368l-.796.797l1.368 2.28l-.317.598a6.3 6.3 0 0 0-.453 1.091l-.199.647l-2.578.645v1.126l2.578.645l.2.647q.173.568.452 1.091l.317.599l-1.368 2.28l.797.796l2.28-1.368l.598.317q.523.278 1.091.453l.647.199l.645 2.578h1.126l.645-2.578l.647-.2a6.3 6.3 0 0 0 1.091-.452l.599-.317l2.28 1.368l.796-.797l-1.368-2.28l.317-.598q.278-.523.453-1.091l.199-.647l2.578-.645v-1.126l-2.578-.645l-.2-.647a6.3 6.3 0 0 0-.452-1.091l-.317-.599l1.368-2.28l-.797-.796l-2.28 1.368l-.598-.317a6.3 6.3 0 0 0-1.091-.453l-.647-.199zm2.945 2.17l1.833-1.1a1 1 0 0 1 1.221.15l1.018 1.018a1 1 0 0 1 .15 1.221l-1.1 1.833q.33.62.54 1.3l2.073.519a1 1 0 0 1 .757.97v1.438a1 1 0 0 1-.757.97l-2.073.519q-.21.68-.54 1.3l1.1 1.833a1 1 0 0 1-.15 1.221l-1.018 1.018a1 1 0 0 1-1.221.15l-1.833-1.1q-.62.33-1.3.54l-.519 2.073a1 1 0 0 1-.97.757h-1.438a1 1 0 0 1-.97-.757l-.519-2.073a7.5 7.5 0 0 1-1.3-.54l-1.833 1.1a1 1 0 0 1-1.221-.15L4.42 18.562a1 1 0 0 1-.15-1.221l1.1-1.833a7.5 7.5 0 0 1-.54-1.3l-2.073-.519A1 1 0 0 1 2 12.72v-1.438a1 1 0 0 1 .757-.97l2.073-.519q.21-.68.54-1.3L4.27 6.66a1 1 0 0 1 .15-1.221L5.438 4.42a1 1 0 0 1 1.221-.15l1.833 1.1q.62-.33 1.3-.54l.519-2.073A1 1 0 0 1 11.28 2h1.438a1 1 0 0 1 .97.757l.519 2.073q.68.21 1.3.54zM12 14.8a2.8 2.8 0 1 0 0-5.6a2.8 2.8 0 0 0 0 5.6m0 1.2a4 4 0 1 1 0-8a4 4 0 0 1 0 8\"/>'\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { icons } from '../../core/icons'\n\nconst props = withDefaults(defineProps<{\n name: string\n size?: number | string\n color?: string\n}>(), {\n size: 24,\n color: 'currentColor'\n})\n\nconst iconPath = computed(() => icons[props.name] || '')\n\nconst iconStyle = computed(() => {\n const sizeVal = typeof props.size === 'number' ? `${props.size}px` : props.size\n return {\n width: sizeVal,\n height: sizeVal,\n color: props.color,\n minWidth: sizeVal // 防止在 flex 布局中被压缩\n }\n})\n</script>\n\n<template>\n <svg\n v-if=\"iconPath\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n :style=\"iconStyle\"\n class=\"epub-reader-icon\"\n v-html=\"iconPath\"\n >\n </svg>\n</template>\n","<script setup lang=\"ts\">\r\nimport { computed, nextTick, onBeforeUnmount, ref, watch } from 'vue'\r\nimport type { TocItem, SearchOptions, SearchResult } from '../../core/types'\r\nimport TocTree from './TocTree.vue'\r\nimport SearchResultList from './SearchResultList.vue'\r\nimport SvgIcon from './SvgIcon.vue'\r\nimport type { MobilePanel } from '../types'\r\n\r\nconst props = defineProps<{\r\n barVisible: boolean\r\n activePanel: MobilePanel | null\r\n \r\n // Data\r\n toc: TocItem[]\r\n status: 'idle' | 'ready' | 'opening' | 'error'\r\n errorText: string\r\n sectionLabel: string\r\n displayedPercent: number\r\n darkMode: boolean\r\n fontSize: number\r\n lineHeight: number\r\n letterSpacing: number\r\n \r\n // Search Data\r\n searchQuery: string\r\n searchOptions: SearchOptions\r\n searchProgressPercent: number\r\n searching: boolean\r\n searchResults: SearchResult[]\r\n}>()\r\n\r\nconst emit = defineEmits<{\r\n (e: 'togglePanel', panel: MobilePanel): void\r\n (e: 'closePanel'): void\r\n \r\n (e: 'tocSelect', href?: string): void\r\n \r\n (e: 'search', query: string): void\r\n (e: 'update:searchQuery', val: string): void\r\n (e: 'update:searchOptions', val: Partial<SearchOptions>): void\r\n (e: 'cancelSearch'): void\r\n (e: 'searchResultSelect', cfi: string): void\r\n \r\n (e: 'seekStart'): void\r\n (e: 'seekChange', val: number): void\r\n (e: 'seekEnd', val: number): void\r\n (e: 'seekCommit', val: number): void\r\n\r\n (e: 'prevSection'): void\r\n (e: 'prevPage'): void\r\n (e: 'nextPage'): void\r\n (e: 'nextSection'): void\r\n \r\n (e: 'toggleDarkMode', val: boolean): void\r\n (e: 'changeFontSize', val: number): void\r\n (e: 'changeLineHeight', val: number): void\r\n (e: 'changeLetterSpacing', val: number): void\r\n}>()\r\n\r\nconst mobileTitle = computed(() => {\r\n switch (props.activePanel) {\r\n case 'menu': return '目录'\r\n case 'search': return '搜索'\r\n case 'progress': return '进度'\r\n case 'settings': return '设置'\r\n default: return ''\r\n }\r\n})\r\n\r\nconst clamp = (n: number, min: number, max: number) => Math.min(max, Math.max(min, n))\r\nconst displayedFontSize = computed(() => clamp(Math.round(props.fontSize / 5), 10, 40))\r\n\r\nconst fontSliderValue = ref(displayedFontSize.value)\r\nconst fontSliderWrapRef = ref<HTMLElement | null>(null)\r\nconst fontSliderWidth = ref(0)\r\nconst isFontDragging = ref(false)\r\nconst fontThumbSize = 34\r\nconst fontMin = 10\r\nconst fontMax = 40\r\nlet fontRo: ResizeObserver | null = null\r\nlet fontDebounceTimer: number | null = null\r\n\r\nwatch(displayedFontSize, (v) => {\r\n fontSliderValue.value = v\r\n})\r\n\r\nconst teardownFontResize = () => {\r\n if (fontRo) {\r\n fontRo.disconnect()\r\n fontRo = null\r\n }\r\n}\r\n\r\nconst setupFontResize = async () => {\r\n await nextTick()\r\n const el = fontSliderWrapRef.value\r\n if (!el) return\r\n const update = () => {\r\n fontSliderWidth.value = el.getBoundingClientRect().width\r\n }\r\n update()\r\n teardownFontResize()\r\n fontRo = new ResizeObserver(() => update())\r\n fontRo.observe(el)\r\n}\r\n\r\nwatch(\r\n () => props.activePanel,\r\n (p) => {\r\n if (p === 'settings') void setupFontResize()\r\n else teardownFontResize()\r\n },\r\n { immediate: true },\r\n)\r\n\r\nonBeforeUnmount(() => teardownFontResize())\r\n\r\nconst fontProgressPercent = computed(() => ((fontSliderValue.value - fontMin) / (fontMax - fontMin)) * 100)\r\nconst fontThumbLeft = computed(() => {\r\n if (!fontSliderWidth.value) return 0\r\n const percent = (fontSliderValue.value - fontMin) / (fontMax - fontMin)\r\n const half = fontThumbSize / 2\r\n return Math.min(fontSliderWidth.value - half, Math.max(half, half + percent * (fontSliderWidth.value - fontThumbSize)))\r\n})\r\n\r\nconst flushFontSize = () => {\r\n if (fontDebounceTimer) {\r\n clearTimeout(fontDebounceTimer)\r\n fontDebounceTimer = null\r\n }\r\n emit('changeFontSize', fontSliderValue.value * 5)\r\n}\r\n\r\nconst scheduleFontSize = (next: number) => {\r\n if (fontDebounceTimer) clearTimeout(fontDebounceTimer)\r\n fontDebounceTimer = window.setTimeout(() => {\r\n fontDebounceTimer = null\r\n emit('changeFontSize', next * 5)\r\n }, 80)\r\n}\r\n\r\nconst handleFontSliderInput = (e: Event) => {\r\n const next = Number((e.target as HTMLInputElement).value)\r\n fontSliderValue.value = next\r\n scheduleFontSize(next)\r\n}\r\n\r\nonBeforeUnmount(() => {\r\n if (fontDebounceTimer) clearTimeout(fontDebounceTimer)\r\n})\r\n\r\nconst updateSearchOption = (key: keyof SearchOptions, value: boolean) => {\r\n emit('update:searchOptions', { [key]: value })\r\n}\r\n\r\nconst tooltip = ref<{ text: string, left: number } | null>(null)\r\nlet timer: number | null = null\r\n\r\nconst ignoreToggle = ref(false)\r\n\r\nconst markIgnoreToggle = () => {\r\n ignoreToggle.value = true\r\n window.setTimeout(() => {\r\n ignoreToggle.value = false\r\n }, 350)\r\n}\r\n\r\nconst clearTooltip = () => {\r\n if (timer) {\r\n clearTimeout(timer)\r\n timer = null\r\n }\r\n tooltip.value = null\r\n}\r\n\r\nconst closePanelSafe = () => {\r\n emit('closePanel')\r\n clearTooltip()\r\n const el = document.activeElement\r\n if (el && el instanceof HTMLElement) el.blur()\r\n}\r\n\r\nconst togglePanelSafe = (panel: MobilePanel) => {\r\n if (ignoreToggle.value) return\r\n emit('togglePanel', panel)\r\n}\r\n\r\nconst sheetRef = ref<HTMLElement | null>(null)\r\nconst dragRef = { startY: 0, currentY: 0, isDragging: false }\r\n\r\nconst handleHeaderTouchStart = (e: TouchEvent) => {\r\n clearTooltip()\r\n dragRef.startY = e.touches[0].clientY\r\n dragRef.isDragging = true\r\n if (sheetRef.value) {\r\n sheetRef.value.style.transition = 'none'\r\n }\r\n}\r\n\r\nconst handleHeaderTouchMove = (e: TouchEvent) => {\r\n if (!dragRef.isDragging) return\r\n e.preventDefault()\r\n const deltaY = e.touches[0].clientY - dragRef.startY\r\n if (deltaY > 0 && sheetRef.value) {\r\n // 允许跟随手指下滑\r\n sheetRef.value.style.transform = `translateY(${deltaY}px)`\r\n dragRef.currentY = deltaY\r\n }\r\n}\r\n\r\nconst handleHeaderTouchEnd = () => {\r\n if (!dragRef.isDragging) return\r\n dragRef.isDragging = false\r\n \r\n if (sheetRef.value) {\r\n sheetRef.value.style.transition = '' // 恢复 CSS 中的 transition\r\n \r\n // 如果下滑距离超过 80px,则关闭\r\n if (dragRef.currentY > 80) {\r\n markIgnoreToggle()\r\n closePanelSafe()\r\n // 稍微延迟清空 transform,避免闪烁\r\n setTimeout(() => {\r\n if (sheetRef.value) sheetRef.value.style.transform = ''\r\n }, 300)\r\n } else {\r\n // 回弹\r\n sheetRef.value.style.transform = ''\r\n }\r\n }\r\n dragRef.currentY = 0\r\n}\r\n\r\nconst handleTouchStart = (e: TouchEvent, text: string) => {\r\n const target = e.currentTarget as HTMLElement\r\n const rect = target.getBoundingClientRect()\r\n timer = window.setTimeout(() => {\r\n tooltip.value = {\r\n text,\r\n left: rect.left + rect.width / 2\r\n }\r\n }, 500)\r\n}\r\n\r\nconst handleTouchEnd = () => {\r\n clearTooltip()\r\n}\r\n</script>\r\n\r\n<template>\r\n <div>\r\n <div :class=\"['epub-reader__mbar', { 'is-visible': barVisible }]\">\r\n <div \r\n v-if=\"tooltip\"\r\n class=\"epub-reader__tooltip\"\r\n :style=\"{\r\n position: 'fixed',\r\n bottom: '60px',\r\n left: `${tooltip.left}px`,\r\n transform: 'translateX(-50%)',\r\n background: 'rgba(0,0,0,0.8)',\r\n color: '#fff',\r\n padding: '4px 8px',\r\n borderRadius: '4px',\r\n fontSize: '12px',\r\n pointerEvents: 'none',\r\n zIndex: 1000,\r\n whiteSpace: 'nowrap'\r\n }\"\r\n >\r\n {{ tooltip.text }}\r\n </div>\r\n <button \r\n type=\"button\" \r\n class=\"epub-reader__btn\" \r\n :aria-pressed=\"activePanel === 'menu'\" \r\n @click=\"togglePanelSafe('menu')\"\r\n @touchstart=\"(e) => handleTouchStart(e, '目录')\"\r\n @touchend=\"handleTouchEnd\"\r\n @touchcancel=\"handleTouchEnd\"\r\n title=\"目录\"\r\n >\r\n <SvgIcon name=\"list\" />\r\n </button>\r\n <button \r\n type=\"button\" \r\n class=\"epub-reader__btn\" \r\n :aria-pressed=\"activePanel === 'search'\" \r\n @click=\"togglePanelSafe('search')\"\r\n @touchstart=\"(e) => handleTouchStart(e, '搜索')\"\r\n @touchend=\"handleTouchEnd\"\r\n @touchcancel=\"handleTouchEnd\"\r\n title=\"搜索\"\r\n >\r\n <SvgIcon name=\"search\" />\r\n </button>\r\n <button \r\n type=\"button\" \r\n class=\"epub-reader__btn\" \r\n :aria-pressed=\"activePanel === 'progress'\" \r\n @click=\"togglePanelSafe('progress')\"\r\n @touchstart=\"(e) => handleTouchStart(e, '进度')\"\r\n @touchend=\"handleTouchEnd\"\r\n @touchcancel=\"handleTouchEnd\"\r\n title=\"进度\"\r\n >\r\n <SvgIcon name=\"progress\" />\r\n </button>\r\n <button \r\n type=\"button\" \r\n class=\"epub-reader__btn\" \r\n :aria-pressed=\"activePanel === 'settings'\" \r\n @click=\"togglePanelSafe('settings')\"\r\n @touchstart=\"(e) => handleTouchStart(e, '设置')\"\r\n @touchend=\"handleTouchEnd\"\r\n @touchcancel=\"handleTouchEnd\"\r\n title=\"设置\"\r\n >\r\n <SvgIcon name=\"settings\" />\r\n </button>\r\n\r\n <slot v-if=\"$slots.toolbarRight\" name=\"toolbarRight\" />\r\n </div>\r\n\r\n <div v-if=\"activePanel\" class=\"epub-reader__moverlay\" @click=\"closePanelSafe\" />\r\n\r\n <div \r\n ref=\"sheetRef\"\r\n :class=\"['epub-reader__msheet', { 'is-open': activePanel }]\" \r\n :aria-hidden=\"!activePanel\"\r\n >\r\n <div \r\n class=\"epub-reader__msheet-header\"\r\n @touchstart=\"handleHeaderTouchStart\"\r\n @touchmove=\"handleHeaderTouchMove\"\r\n @touchend=\"handleHeaderTouchEnd\"\r\n >\r\n <div class=\"epub-reader__msheet-title\">{{ mobileTitle }}</div>\r\n <button type=\"button\" class=\"epub-reader__btn\" @click=\"closePanelSafe\">\r\n <SvgIcon name=\"x\" />\r\n </button>\r\n </div>\r\n <div class=\"epub-reader__msheet-body\">\r\n <template v-if=\"activePanel === 'menu'\">\r\n <TocTree\r\n v-if=\"toc.length\"\r\n :items=\"toc\"\r\n @select=\"(href) => {\r\n emit('tocSelect', href)\r\n closePanelSafe()\r\n }\"\r\n />\r\n <div v-else class=\"epub-reader__empty\">未找到目录</div>\r\n </template>\r\n\r\n <template v-if=\"activePanel === 'search'\">\r\n <div class=\"epub-reader__field\">\r\n <input\r\n class=\"epub-reader__input\"\r\n placeholder=\"输入关键词\"\r\n :value=\"searchQuery\"\r\n :disabled=\"status !== 'ready'\"\r\n @input=\"(e: any) => {\r\n const v = e.target.value\r\n emit('update:searchQuery', v)\r\n if (!v.trim()) emit('search', '')\r\n }\"\r\n @keydown.enter=\"emit('search', searchQuery)\"\r\n />\r\n <button type=\"button\" class=\"epub-reader__btn epub-reader__btn--wide\" :disabled=\"status !== 'ready'\" @click=\"emit('search', searchQuery)\">\r\n 搜索\r\n </button>\r\n </div>\r\n\r\n <div class=\"epub-reader__checks\">\r\n <label class=\"epub-reader__check\">\r\n <input\r\n type=\"checkbox\"\r\n :checked=\"Boolean(searchOptions.matchCase)\"\r\n @change=\"(e: any) => updateSearchOption('matchCase', e.target.checked)\"\r\n />\r\n 区分大小写\r\n </label>\r\n <label class=\"epub-reader__check\">\r\n <input\r\n type=\"checkbox\"\r\n :checked=\"Boolean(searchOptions.wholeWords)\"\r\n @change=\"(e: any) => updateSearchOption('wholeWords', e.target.checked)\"\r\n />\r\n 全词匹配\r\n </label>\r\n <label class=\"epub-reader__check\">\r\n <input\r\n type=\"checkbox\"\r\n :checked=\"Boolean(searchOptions.matchDiacritics)\"\r\n @change=\"(e: any) => updateSearchOption('matchDiacritics', e.target.checked)\"\r\n />\r\n 区分变音\r\n </label>\r\n </div>\r\n\r\n <div class=\"epub-reader__meta\">\r\n <span>进度 {{ searchProgressPercent }}%</span>\r\n <span v-if=\"searching\">搜索中…</span>\r\n <button v-if=\"searching\" type=\"button\" class=\"epub-reader__link\" @click=\"emit('cancelSearch')\">\r\n 取消\r\n </button>\r\n </div>\r\n\r\n <SearchResultList v-if=\"searchResults.length\" :results=\"searchResults\" @select=\"(cfi) => emit('searchResultSelect', cfi)\" />\r\n <div v-else class=\"epub-reader__empty\">{{ searchQuery.trim() ? '无匹配结果' : '请输入关键词' }}</div>\r\n </template>\r\n\r\n <template v-if=\"activePanel === 'progress'\">\r\n <div class=\"epub-reader__meta\">\r\n <span class=\"epub-reader__status\">\r\n {{ status === 'error' ? errorText || '错误' : status === 'opening' ? '正在打开…' : '' }}\r\n </span>\r\n <span v-if=\"sectionLabel\">{{ sectionLabel }}</span>\r\n </div>\r\n <div class=\"epub-reader__mprogress\">\r\n <input\r\n class=\"epub-reader__range\"\r\n type=\"range\"\r\n :min=\"0\"\r\n :max=\"100\"\r\n :step=\"1\"\r\n :value=\"displayedPercent\"\r\n :style=\"{ background: `linear-gradient(to right, var(--epub-reader-range-fill) 0%, var(--epub-reader-range-fill) ${displayedPercent}%, var(--epub-reader-range-track) ${displayedPercent}%, var(--epub-reader-range-track) 100%)` }\"\r\n @input=\"(e: any) => {\r\n emit('seekStart')\r\n emit('seekChange', Number(e.target.value))\r\n }\"\r\n @pointerup=\"(e: any) => emit('seekEnd', Number(e.target.value))\"\r\n @keyup.enter=\"(e: any) => emit('seekCommit', Number(e.target.value))\"\r\n />\r\n <div class=\"epub-reader__mprogress-percent\">{{ displayedPercent }}%</div>\r\n </div>\r\n\r\n <div class=\"epub-reader__mnav\">\r\n <button type=\"button\" class=\"epub-reader__btn\" title=\"上一章\" @click=\"emit('prevSection')\">\r\n <SvgIcon name=\"chevrons-left\" />\r\n </button>\r\n <button type=\"button\" class=\"epub-reader__btn\" title=\"上一页\" @click=\"emit('prevPage')\">\r\n <SvgIcon name=\"chevron-left\" />\r\n </button>\r\n <button type=\"button\" class=\"epub-reader__btn\" title=\"下一页\" @click=\"emit('nextPage')\">\r\n <SvgIcon name=\"chevron-right\" />\r\n </button>\r\n <button type=\"button\" class=\"epub-reader__btn\" title=\"下一章\" @click=\"emit('nextSection')\">\r\n <SvgIcon name=\"chevrons-right\" />\r\n </button>\r\n </div>\r\n </template>\r\n\r\n <template v-if=\"activePanel === 'settings'\">\r\n <div class=\"epub-reader__msettings\">\r\n <div class=\"epub-reader__mfont-range\">\r\n <div class=\"epub-reader__mfont-a is-small\">A</div>\r\n <div ref=\"fontSliderWrapRef\" :class=\"['epub-reader__mfont-slider', { 'is-dragging': isFontDragging }]\">\r\n <input\r\n class=\"epub-reader__range\"\r\n type=\"range\"\r\n :min=\"fontMin\"\r\n :max=\"fontMax\"\r\n :step=\"1\"\r\n :value=\"fontSliderValue\"\r\n :style=\"{ background: `linear-gradient(to right, var(--epub-reader-range-fill) 0%, var(--epub-reader-range-fill) ${fontProgressPercent}%, var(--epub-reader-range-track) ${fontProgressPercent}%, var(--epub-reader-range-track) 100%)` }\"\r\n aria-label=\"字号\"\r\n @input=\"handleFontSliderInput\"\r\n @pointerdown=\"isFontDragging = true\"\r\n @pointerup=\"() => { isFontDragging = false; flushFontSize() }\"\r\n @pointercancel=\"() => { isFontDragging = false; flushFontSize() }\"\r\n @touchstart=\"isFontDragging = true\"\r\n @touchend=\"() => { isFontDragging = false; flushFontSize() }\"\r\n />\r\n <div class=\"epub-reader__mfont-thumb\" :style=\"{ left: `${fontThumbLeft}px`, width: `${fontThumbSize}px`, height: `${fontThumbSize}px` }\">\r\n {{ fontSliderValue }}\r\n </div>\r\n </div>\r\n <div class=\"epub-reader__mfont-a is-big\">A</div>\r\n </div>\r\n\r\n <div class=\"epub-reader__msettings-row\">\r\n <div class=\"epub-reader__msetting\">\r\n <div class=\"epub-reader__msetting-head\">\r\n <div class=\"epub-reader__msetting-label\">行高</div>\r\n <div class=\"epub-reader__msetting-value\">{{ props.lineHeight.toFixed(2) }}</div>\r\n </div>\r\n <input\r\n class=\"epub-reader__range\"\r\n type=\"range\"\r\n :min=\"1\"\r\n :max=\"3\"\r\n :step=\"0.05\"\r\n :value=\"props.lineHeight\"\r\n aria-label=\"行高\"\r\n @input=\"(e: any) => emit('changeLineHeight', Number(e.target.value))\"\r\n />\r\n </div>\r\n\r\n <div class=\"epub-reader__msetting\">\r\n <div class=\"epub-reader__msetting-head\">\r\n <div class=\"epub-reader__msetting-label\">字间距</div>\r\n <div class=\"epub-reader__msetting-value\">{{ props.letterSpacing.toFixed(2) }}em</div>\r\n </div>\r\n <input\r\n class=\"epub-reader__range\"\r\n type=\"range\"\r\n :min=\"0\"\r\n :max=\"0.3\"\r\n :step=\"0.01\"\r\n :value=\"props.letterSpacing\"\r\n aria-label=\"字间距\"\r\n @input=\"(e: any) => emit('changeLetterSpacing', Number(e.target.value))\"\r\n />\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"epub-reader__btn\"\r\n :aria-pressed=\"darkMode\"\r\n :aria-label=\"darkMode ? '暗黑模式:开,点击切换到亮色' : '暗黑模式:关,点击切换到暗黑'\"\r\n :title=\"darkMode ? '切换到亮色' : '切换到暗黑'\"\r\n @click=\"emit('toggleDarkMode', !darkMode)\"\r\n >\r\n <SvgIcon :name=\"darkMode ? 'sun' : 'moon'\" />\r\n </button>\r\n </div>\r\n </div>\r\n </template>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","import { defineComponent, getCurrentInstance, h, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\r\nimport { createEBookReader } from '../core/reader.js'\r\nimport type { ProgressInfo, SearchOptions, SearchResult, TocItem } from '../core/types.js'\r\nimport { EBookReaderVuePropsDef } from './types.js'\r\nimport type { EBookReaderVueEmits, EBookReaderVueExposed, MobilePanel } from './types.js'\r\nimport MobileUI from './components/MobileUI.vue'\r\n\r\nconst MOBILE_MAX_WIDTH = 768\r\nconst WIDE_MIN_WIDTH = 1024\r\n\r\nconst clamp = (n: number, min: number, max: number) => Math.min(max, Math.max(min, n))\r\n\r\nconst mergeClassName = (...parts: Array<string | undefined>) => parts.filter(Boolean).join(' ')\r\n\r\nconst getFileNameFromContentDisposition = (contentDisposition: string | null) => {\r\n if (!contentDisposition) return null\r\n const starMatch = contentDisposition.match(/filename\\*\\s*=\\s*UTF-8''([^;]+)/i)\r\n if (starMatch?.[1]) {\r\n try {\r\n return decodeURIComponent(starMatch[1].replace(/^\"|\"$/g, ''))\r\n } catch {\r\n return starMatch[1].replace(/^\"|\"$/g, '')\r\n }\r\n }\r\n\r\n const match = contentDisposition.match(/filename\\s*=\\s*(?:\"([^\"]+)\"|([^;\\s]+))/i)\r\n return match?.[1] ?? match?.[2] ?? null\r\n}\r\n\r\nconst normalizeEpubFileName = (name: string) => {\r\n const trimmed = name.trim()\r\n if (!trimmed) return 'book.epub'\r\n if (trimmed.toLowerCase().endsWith('.epub')) return trimmed\r\n if (!trimmed.includes('.')) return `${trimmed}.epub`\r\n return trimmed\r\n}\r\n\r\nconst getFileNameFromUrl = (url: string) => {\r\n try {\r\n const u = new URL(url, window.location.href)\r\n const last = u.pathname.split('/').filter(Boolean).pop()\r\n return last ? decodeURIComponent(last) : null\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\nconst downloadEpubAsFile = async (url: string, signal: AbortSignal) => {\r\n const res = await fetch(url, { signal })\r\n if (!res.ok) throw new Error(`下载失败 (${res.status})`)\r\n const blob = await res.blob()\r\n\r\n const headerName = getFileNameFromContentDisposition(res.headers.get('content-disposition'))\r\n const urlName = getFileNameFromUrl(url)\r\n const fileName = normalizeEpubFileName(headerName ?? urlName ?? 'book.epub')\r\n const type = blob.type || 'application/epub+zip'\r\n\r\n return new File([blob], fileName, { type })\r\n}\r\n\r\nexport const EBookReaderVue = defineComponent({\r\n name: 'EBookReaderVue',\r\n props: EBookReaderVuePropsDef,\r\n emits: [\r\n 'ready',\r\n 'error',\r\n 'progress',\r\n 'fontSizeChange',\r\n 'lineHeightChange',\r\n 'letterSpacingChange',\r\n 'darkModeChange',\r\n 'update:fontSize',\r\n 'update:lineHeight',\r\n 'update:letterSpacing',\r\n 'update:darkMode',\r\n ],\r\n setup(props, { emit, expose, slots }) {\r\n const instance = getCurrentInstance()\r\n const isPropProvided = (key: string) => {\r\n const vnodeProps = instance?.vnode.props\r\n if (!vnodeProps) return false\r\n return Object.prototype.hasOwnProperty.call(vnodeProps, key)\r\n }\r\n\r\n const rootEl = ref<HTMLElement | null>(null)\r\n const viewerHost = ref<HTMLElement | null>(null)\r\n const reader = ref<ReturnType<typeof createEBookReader> | null>(null)\r\n\r\n const status = ref<'idle' | 'ready' | 'opening' | 'error'>('idle')\r\n const errorText = ref('')\r\n const downloadLoading = ref<null | 'download' | 'open'>(null)\r\n const toc = ref<TocItem[]>([])\r\n\r\n const progressInfo = ref<ProgressInfo | null>(null)\r\n const isSeeking = ref(false)\r\n const isDragging = ref(false)\r\n const seekPercent = ref(0)\r\n\r\n const layout = ref<'mobile' | 'default' | 'wide'>('default')\r\n const mobileBarVisible = ref(false)\r\n const mobilePanel = ref<MobilePanel | null>(null)\r\n\r\n const uncontrolledFontSize = ref(props.defaultFontSize ?? 100)\r\n const uncontrolledDarkMode = ref(Boolean(props.defaultDarkMode))\r\n const uncontrolledLineHeight = ref(props.defaultLineHeight ?? 1.6)\r\n const uncontrolledLetterSpacing = ref(props.defaultLetterSpacing ?? 0)\r\n\r\n const fontSize = () => (props.fontSize ?? uncontrolledFontSize.value)\r\n const darkMode = () => (isPropProvided('darkMode') ? Boolean(props.darkMode) : uncontrolledDarkMode.value)\r\n const lineHeight = () => (isPropProvided('lineHeight') ? Number(props.lineHeight) : uncontrolledLineHeight.value)\r\n const letterSpacing = () => (isPropProvided('letterSpacing') ? Number(props.letterSpacing) : uncontrolledLetterSpacing.value)\r\n\r\n const searchQuery = ref('')\r\n const searchOptions = ref<SearchOptions>(props.defaultSearchOptions ?? { matchCase: false, wholeWords: false, matchDiacritics: false })\r\n const searchProgressPercent = ref(0)\r\n const searching = ref(false)\r\n const searchResults = ref<SearchResult[]>([])\r\n\r\n const closeMobileSheet = () => {\r\n mobilePanel.value = null\r\n }\r\n\r\n const toggleMobilePanel = (panel: MobilePanel) => {\r\n mobileBarVisible.value = true\r\n mobilePanel.value = mobilePanel.value === panel ? null : panel\r\n }\r\n\r\n const setDarkModeInternal = (next: boolean) => {\r\n if (!isPropProvided('darkMode')) uncontrolledDarkMode.value = next\r\n emit('update:darkMode', next)\r\n emit('darkModeChange', next)\r\n reader.value?.setDarkMode(next)\r\n }\r\n\r\n const setFontSizeInternal = (next: number) => {\r\n const safe = clamp(next, 50, 300)\r\n if (props.fontSize == null) uncontrolledFontSize.value = safe\r\n emit('update:fontSize', safe)\r\n emit('fontSizeChange', safe)\r\n reader.value?.setFontSize(safe)\r\n }\r\n\r\n const setLineHeightInternal = (next: number) => {\r\n const safe = clamp(next, 1, 3)\r\n if (!isPropProvided('lineHeight')) uncontrolledLineHeight.value = safe\r\n emit('update:lineHeight', safe)\r\n emit('lineHeightChange', safe)\r\n reader.value?.setLineHeight(safe)\r\n }\r\n\r\n const setLetterSpacingInternal = (next: number) => {\r\n const safe = clamp(next, 0, 0.3)\r\n if (!isPropProvided('letterSpacing')) uncontrolledLetterSpacing.value = safe\r\n emit('update:letterSpacing', safe)\r\n emit('letterSpacingChange', safe)\r\n reader.value?.setLetterSpacing(safe)\r\n }\r\n\r\n const openFile = async (nextFile: File) => {\r\n if (!reader.value) return\r\n status.value = 'opening'\r\n errorText.value = ''\r\n toc.value = []\r\n progressInfo.value = null\r\n isSeeking.value = false\r\n seekPercent.value = 0\r\n searchResults.value = []\r\n searchProgressPercent.value = 0\r\n searching.value = false\r\n\r\n try {\r\n await reader.value.open(nextFile)\r\n status.value = 'ready'\r\n } catch (e: any) {\r\n status.value = 'error'\r\n errorText.value = e?.message ? String(e.message) : '打开失败'\r\n emit('error', e)\r\n }\r\n }\r\n\r\n let openController: AbortController | null = null\r\n\r\n const openFromProps = async () => {\r\n if (!reader.value) return\r\n\r\n openController?.abort()\r\n openController = null\r\n downloadLoading.value = null\r\n\r\n if (props.file) {\r\n await openFile(props.file)\r\n return\r\n }\r\n\r\n const nextUrl = props.fileUrl?.trim()\r\n if (!nextUrl) return\r\n\r\n const controller = new AbortController()\r\n openController = controller\r\n downloadLoading.value = 'download'\r\n\r\n status.value = 'opening'\r\n errorText.value = ''\r\n toc.value = []\r\n progressInfo.value = null\r\n isSeeking.value = false\r\n seekPercent.value = 0\r\n searchResults.value = []\r\n searchProgressPercent.value = 0\r\n searching.value = false\r\n\r\n try {\r\n const downloaded = await downloadEpubAsFile(nextUrl, controller.signal)\r\n if (controller.signal.aborted) return\r\n if (openController !== controller) return\r\n downloadLoading.value = 'open'\r\n await openFile(downloaded)\r\n } catch (e: any) {\r\n if (e?.name === 'AbortError') return\r\n status.value = 'error'\r\n errorText.value = e?.message ? String(e.message) : '下载失败'\r\n emit('error', e)\r\n } finally {\r\n if (openController === controller) downloadLoading.value = null\r\n }\r\n }\r\n\r\n const runSearch = async (query: string) => {\r\n const r = reader.value\r\n const normalized = query.trim()\r\n searchQuery.value = query\r\n searchProgressPercent.value = 0\r\n searching.value = Boolean(normalized)\r\n\r\n if (!r || !normalized) {\r\n r?.clearSearch()\r\n searchResults.value = []\r\n searching.value = false\r\n return\r\n }\r\n\r\n r.cancelSearch()\r\n try {\r\n const results = await r.search(normalized, searchOptions.value)\r\n searchResults.value = results\r\n searchProgressPercent.value = 100\r\n } catch (e) {\r\n emit('error', e)\r\n } finally {\r\n searching.value = false\r\n }\r\n }\r\n\r\n const keydownHandler = (e: KeyboardEvent) => {\r\n if (!props.enableKeyboardNav) return\r\n if (e.key === 'ArrowLeft') reader.value?.prevPage()\r\n if (e.key === 'ArrowRight') reader.value?.nextPage()\r\n if (e.key === 'Escape') closeMobileSheet()\r\n }\r\n\r\n let gestureStartX = 0\r\n let gestureStartY = 0\r\n let gestureTracking = false\r\n let gestureMoved = false\r\n let gestureActionTaken = false\r\n let gestureStartAt = 0\r\n let pcDragStartX = 0\r\n let pcDragStartY = 0\r\n let pcDragTracking = false\r\n const boundDocs = new WeakSet<Document>()\r\n\r\n const pointerDownHandler = (e: PointerEvent) => {\r\n const t = e.target as HTMLElement | null\r\n if (!t) return\r\n if (t.closest('.epub-reader__mbar') || t.closest('.epub-reader__msheet')) return\r\n if (t.closest('a,button,input,textarea,select,label,[role=\"button\"],[contenteditable=\"true\"]')) return\r\n\r\n if (layout.value !== 'mobile') {\r\n if (e.pointerType !== 'mouse') return\r\n if ((e.buttons & 1) !== 1) return\r\n pcDragTracking = true\r\n pcDragStartX = e.screenX\r\n pcDragStartY = e.screenY\r\n return\r\n }\r\n\r\n gestureTracking = true\r\n gestureMoved = false\r\n gestureActionTaken = false\r\n gestureStartAt = e.timeStamp\r\n gestureStartX = e.screenX\r\n gestureStartY = e.screenY\r\n }\r\n\r\n const pointerMoveHandler = (e: PointerEvent) => {\r\n if (layout.value !== 'mobile') {\r\n if (!pcDragTracking) return\r\n if (e.pointerType !== 'mouse' || (e.buttons & 1) !== 1) {\r\n pcDragTracking = false\r\n return\r\n }\r\n\r\n const dx = e.screenX - pcDragStartX\r\n const dy = e.screenY - pcDragStartY\r\n\r\n if (Math.abs(dy) > Math.abs(dx) && Math.abs(dy) >= 16) {\r\n pcDragTracking = false\r\n return\r\n }\r\n\r\n if (Math.abs(dx) >= 60 && Math.abs(dx) > Math.abs(dy)) {\r\n pcDragTracking = false\r\n if (dx > 0) reader.value?.prevPage()\r\n else reader.value?.nextPage()\r\n }\r\n return\r\n }\r\n\r\n if (!gestureTracking) return\r\n const dx = e.screenX - gestureStartX\r\n const dy = e.screenY - gestureStartY\r\n\r\n if (Math.abs(dx) > 8 || Math.abs(dy) > 8) gestureMoved = true\r\n if (Math.abs(dy) < 8) return\r\n\r\n if (Math.abs(dy) < Math.abs(dx)) {\r\n if (Math.abs(dx) >= 8) gestureTracking = false\r\n return\r\n }\r\n\r\n if (dy <= -24) {\r\n gestureActionTaken = true\r\n gestureTracking = false\r\n mobileBarVisible.value = true\r\n return\r\n }\r\n if (dy >= 24) {\r\n gestureActionTaken = true\r\n gestureTracking = false\r\n mobileBarVisible.value = false\r\n mobilePanel.value = null\r\n }\r\n }\r\n\r\n const pointerEndHandler = (e: PointerEvent) => {\r\n if (layout.value !== 'mobile') {\r\n pcDragTracking = false\r\n gestureTracking = false\r\n return\r\n }\r\n\r\n if (gestureActionTaken) {\r\n gestureTracking = false\r\n gestureMoved = false\r\n gestureActionTaken = false\r\n return\r\n }\r\n\r\n if (!gestureTracking) {\r\n gestureMoved = false\r\n return\r\n }\r\n\r\n const dx = e.screenX - gestureStartX\r\n const dy = e.screenY - gestureStartY\r\n const dt = e.timeStamp - gestureStartAt\r\n const isTap = !gestureMoved && Math.hypot(dx, dy) <= 10 && dt <= 300\r\n\r\n if (isTap) {\r\n const next = !mobileBarVisible.value\r\n mobileBarVisible.value = next\r\n if (!next) mobilePanel.value = null\r\n }\r\n\r\n gestureTracking = false\r\n gestureMoved = false\r\n }\r\n\r\n const bindContentPointerListeners = (doc: Document) => {\r\n if (boundDocs.has(doc)) return\r\n boundDocs.add(doc)\r\n doc.addEventListener('pointerdown', pointerDownHandler)\r\n doc.addEventListener('pointermove', pointerMoveHandler)\r\n doc.addEventListener('pointerup', pointerEndHandler)\r\n doc.addEventListener('pointercancel', pointerEndHandler)\r\n }\r\n\r\n let ro: ResizeObserver | null = null\r\n\r\n onMounted(async () => {\r\n await nextTick()\r\n const host = viewerHost.value\r\n if (!host) return\r\n\r\n try {\r\n reader.value = createEBookReader(host, {\r\n darkMode: darkMode(),\r\n fontSize: fontSize(),\r\n lineHeight: lineHeight(),\r\n letterSpacing: letterSpacing(),\r\n onReady: (h) => emit('ready', h),\r\n onError: (e) => emit('error', e),\r\n onProgress: (info) => {\r\n progressInfo.value = info\r\n if (!isDragging.value) {\r\n isSeeking.value = false\r\n }\r\n emit('progress', info)\r\n },\r\n onToc: (items) => (toc.value = items),\r\n onSearchProgress: (info) => {\r\n if (typeof info.progress === 'number') searchProgressPercent.value = Math.round(info.progress * 100)\r\n },\r\n onContentLoad: (doc) => bindContentPointerListeners(doc),\r\n })\r\n status.value = 'ready'\r\n } catch (e: any) {\r\n status.value = 'error'\r\n errorText.value = e?.message ? String(e.message) : '初始化失败'\r\n emit('error', e)\r\n return\r\n }\r\n\r\n void openFromProps()\r\n\r\n const root = rootEl.value\r\n if (root) {\r\n root.addEventListener('keydown', keydownHandler)\r\n root.addEventListener('pointerdown', pointerDownHandler)\r\n root.addEventListener('pointermove', pointerMoveHandler)\r\n root.addEventListener('pointerup', pointerEndHandler)\r\n root.addEventListener('pointercancel', pointerEndHandler)\r\n }\r\n\r\n if (root) {\r\n ro = new ResizeObserver((entries) => {\r\n const w = entries[0]?.contentRect?.width ?? root.getBoundingClientRect().width\r\n layout.value = w <= MOBILE_MAX_WIDTH ? 'mobile' : w >= WIDE_MIN_WIDTH ? 'wide' : 'default'\r\n })\r\n ro.observe(root)\r\n }\r\n })\r\n\r\n onBeforeUnmount(() => {\r\n openController?.abort()\r\n downloadLoading.value = null\r\n const root = rootEl.value\r\n if (root) {\r\n root.removeEventListener('keydown', keydownHandler)\r\n root.removeEventListener('pointerdown', pointerDownHandler)\r\n root.removeEventListener('pointermove', pointerMoveHandler)\r\n root.removeEventListener('pointerup', pointerEndHandler)\r\n root.removeEventListener('pointercancel', pointerEndHandler)\r\n }\r\n ro?.disconnect()\r\n reader.value?.destroy()\r\n reader.value = null\r\n })\r\n\r\n watch(\r\n () => [props.file, props.fileUrl],\r\n () => void openFromProps(),\r\n )\r\n\r\n watch(\r\n () => darkMode(),\r\n (v) => reader.value?.setDarkMode(Boolean(v)),\r\n )\r\n\r\n watch(\r\n () => fontSize(),\r\n (v) => reader.value?.setFontSize(Number(v)),\r\n )\r\n\r\n watch(\r\n () => lineHeight(),\r\n (v) => reader.value?.setLineHeight(Number(v)),\r\n )\r\n\r\n watch(\r\n () => letterSpacing(),\r\n (v) => reader.value?.setLetterSpacing(Number(v)),\r\n )\r\n\r\n watch(\r\n () => layout.value,\r\n (v) => {\r\n if (v !== 'mobile') {\r\n mobilePanel.value = null\r\n mobileBarVisible.value = false\r\n }\r\n },\r\n )\r\n\r\n expose<EBookReaderVueExposed>({\r\n prevPage: () => reader.value?.prevPage(),\r\n nextPage: () => reader.value?.nextPage(),\r\n prevSection: () => reader.value?.prevSection(),\r\n nextSection: () => reader.value?.nextSection(),\r\n goTo: (t) => reader.value?.goTo(t),\r\n goToFraction: (f) => reader.value?.goToFraction(f),\r\n search: (q, o) => (reader.value ? reader.value.search(q, o) : Promise.resolve([])),\r\n cancelSearch: () => reader.value?.cancelSearch(),\r\n clearSearch: () => reader.value?.clearSearch(),\r\n })\r\n\r\n return () => {\r\n const pct = Math.round((progressInfo.value?.fraction ?? 0) * 100)\r\n const displayed = isSeeking.value ? seekPercent.value : pct\r\n const sectionLabel = progressInfo.value?.tocItem?.label ?? ''\r\n const viewer = h('div', { class: 'epub-reader__viewer', ref: viewerHost })\r\n const loading = downloadLoading.value\r\n ? h('div', { class: 'epub-reader__loading', role: 'status', 'aria-live': 'polite' }, [\r\n h('div', { class: 'epub-reader__spinner', 'aria-hidden': 'true' }),\r\n h('div', { class: 'epub-reader__loading-text' }, downloadLoading.value === 'download' ? '下载中…' : '加载中…'),\r\n ])\r\n : null\r\n\r\n const children = [\r\n viewer,\r\n loading,\r\n h(MobileUI, {\r\n barVisible: layout.value === 'mobile' ? mobileBarVisible.value : true,\r\n activePanel: mobilePanel.value,\r\n toc: toc.value,\r\n status: status.value,\r\n errorText: errorText.value,\r\n sectionLabel: sectionLabel,\r\n displayedPercent: displayed,\r\n darkMode: darkMode(),\r\n fontSize: fontSize(),\r\n lineHeight: lineHeight(),\r\n letterSpacing: letterSpacing(),\r\n searchQuery: searchQuery.value,\r\n searchOptions: searchOptions.value,\r\n searchProgressPercent: searchProgressPercent.value,\r\n searching: searching.value,\r\n searchResults: searchResults.value,\r\n\r\n onPrevSection: () => reader.value?.prevSection(),\r\n onPrevPage: () => reader.value?.prevPage(),\r\n onNextPage: () => reader.value?.nextPage(),\r\n onNextSection: () => reader.value?.nextSection(),\r\n\r\n onTogglePanel: toggleMobilePanel,\r\n onClosePanel: closeMobileSheet,\r\n onTocSelect: (href: string | undefined) => {\r\n if (href) reader.value?.goTo(href)\r\n },\r\n onSearch: (q: string) => void runSearch(q),\r\n 'onUpdate:searchQuery': (v: string) => (searchQuery.value = v),\r\n 'onUpdate:searchOptions': (v: Partial<SearchOptions>) => (searchOptions.value = { ...searchOptions.value, ...v }),\r\n onCancelSearch: () => reader.value?.cancelSearch(),\r\n onSearchResultSelect: (cfi: string) => {\r\n if (cfi) reader.value?.goTo(cfi)\r\n },\r\n onSeekStart: () => {\r\n isSeeking.value = true\r\n isDragging.value = true\r\n },\r\n onSeekChange: (v: number) => (seekPercent.value = v),\r\n onSeekEnd: (v: number) => {\r\n isDragging.value = false\r\n reader.value?.goToFraction(v / 100)\r\n },\r\n onSeekCommit: (v: number) => {\r\n isDragging.value = false\r\n reader.value?.goToFraction(v / 100)\r\n },\r\n onToggleDarkMode: setDarkModeInternal,\r\n onChangeFontSize: setFontSizeInternal,\r\n onChangeLineHeight: setLineHeightInternal,\r\n onChangeLetterSpacing: setLetterSpacingInternal,\r\n }, {\r\n toolbarRight: () => slots.mobileToolbarRight?.(),\r\n }),\r\n ]\r\n\r\n return h(\r\n 'div',\r\n {\r\n ref: rootEl,\r\n class: 'epub-reader',\r\n style: props.themeColor ? ({ '--epub-reader-accent': props.themeColor } as any) : undefined,\r\n 'data-theme': darkMode() ? 'dark' : 'light',\r\n 'data-layout': layout.value,\r\n 'aria-busy': downloadLoading.value != null,\r\n tabindex: 0,\r\n },\r\n children,\r\n )\r\n }\r\n },\r\n})\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@somecat/epub-reader",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "A cross-framework EPUB ebook reader component library based on foliate-js",
5
5
  "license": "MIT",
6
6
  "author": "SomeCat <zt@somecat.cn>",