@somecat/epub-reader 0.1.0

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.
@@ -0,0 +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","_toDisplayString6","_hoisted_5","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_13","_hoisted_17","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","ref","h"],"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' | 'theme' | 'font'\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 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 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}\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=\"ebook-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=\"ebook-reader__toolbar\">\r\n <div class=\"ebook-reader__panel\">\r\n <button type=\"button\" class=\"ebook-reader__btn\" title=\"目录\" @click=\"emit('toggleToc')\">\r\n <SvgIcon name=\"list\" />\r\n </button>\r\n <button type=\"button\" class=\"ebook-reader__btn\" title=\"搜索\" @click=\"emit('toggleSearch')\">\r\n <SvgIcon name=\"search\" />\r\n </button>\r\n <div class=\"ebook-reader__divider\" />\r\n <button type=\"button\" class=\"ebook-reader__btn\" title=\"上一章\" @click=\"emit('prevSection')\">\r\n <SvgIcon name=\"chevrons-left\" />\r\n </button>\r\n <button type=\"button\" class=\"ebook-reader__btn\" title=\"上一页\" @click=\"emit('prevPage')\">\r\n <SvgIcon name=\"chevron-left\" />\r\n </button>\r\n <button type=\"button\" class=\"ebook-reader__btn\" title=\"下一页\" @click=\"emit('nextPage')\">\r\n <SvgIcon name=\"chevron-right\" />\r\n </button>\r\n <button type=\"button\" class=\"ebook-reader__btn\" title=\"下一章\" @click=\"emit('nextSection')\">\r\n <SvgIcon name=\"chevrons-right\" />\r\n </button>\r\n </div>\r\n\r\n <div class=\"ebook-reader__panel\">\r\n <button type=\"button\" class=\"ebook-reader__btn\" title=\"主题\" @click=\"emit('toggleDarkMode')\">\r\n <SvgIcon :name=\"darkMode ? 'sun' : 'moon'\" />\r\n </button>\r\n <div class=\"ebook-reader__divider\" />\r\n <button type=\"button\" class=\"ebook-reader__btn\" title=\"增大字号\" @click=\"emit('changeFontSize', fontSize + 10)\">\r\n <SvgIcon name=\"plus\" />\r\n </button>\r\n <div class=\"ebook-reader__font\">{{ fontSize }}%</div>\r\n <button type=\"button\" class=\"ebook-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=\"ebook-reader__bottom\">\n <div class=\"ebook-reader__bottom-left\">\n <span class=\"ebook-reader__status\">\n {{ status === 'error' ? errorText || '错误' : status === 'opening' ? '正在打开…' : '就绪' }}\n </span>\n <span v-if=\"sectionLabel\" class=\"ebook-reader__section\">{{ sectionLabel }}</span>\n </div>\n <div class=\"ebook-reader__bottom-right\">\n <input\n class=\"ebook-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=\"ebook-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=\"ebook-reader__toc-list\">\r\n <li v-for=\"(item, idx) in items\" :key=\"item.href || `${item.label ?? 'item'}-${idx}`\" class=\"ebook-reader__toc-item\">\r\n <template v-if=\"!item.subitems?.length\">\r\n <button type=\"button\" class=\"ebook-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=\"ebook-reader__toc-details\">\r\n <summary class=\"ebook-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=\"['ebook-reader__drawer', { 'is-open': isOpen }]\" :aria-hidden=\"!isOpen\">\n <div class=\"ebook-reader__drawer-header\">\n <div class=\"ebook-reader__drawer-title\">目录</div>\n <button type=\"button\" class=\"ebook-reader__btn\" @click=\"emit('close')\">\n <SvgIcon name=\"x\" />\n </button>\n </div>\n <div class=\"ebook-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=\"ebook-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=\"ebook-reader__search-list\">\n <li v-for=\"(r, idx) in results\" :key=\"`${r.cfi ?? 'no-cfi'}-${idx}`\" class=\"ebook-reader__search-item\">\n <button\n type=\"button\"\n class=\"ebook-reader__search-btn\"\n @click=\"r.cfi && emit('select', r.cfi)\"\n >\n <div v-if=\"r.label\" class=\"ebook-reader__search-label\">{{ r.label }}</div>\n <div class=\"ebook-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=\"['ebook-reader__drawer', 'right', { 'is-open': isOpen }]\" :aria-hidden=\"!isOpen\">\n <div class=\"ebook-reader__drawer-header\">\n <div class=\"ebook-reader__drawer-title\">搜索</div>\n <button type=\"button\" class=\"ebook-reader__btn\" @click=\"emit('close')\">\n <SvgIcon name=\"x\" />\n </button>\n </div>\n <div class=\"ebook-reader__drawer-body\">\n <div class=\"ebook-reader__field\">\n <input\n class=\"ebook-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=\"ebook-reader__btn\" :disabled=\"status !== 'ready'\" @click=\"emit('search', query)\">\n <SvgIcon name=\"search\" />\n </button>\n </div>\n\n <div class=\"ebook-reader__checks\">\n <label class=\"ebook-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=\"ebook-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=\"ebook-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=\"ebook-reader__meta\">\n <span>进度 {{ progressPercent }}%</span>\n <span v-if=\"searching\">搜索中…</span>\n <button v-if=\"searching\" type=\"button\" class=\"ebook-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=\"ebook-reader__empty\">{{ query.trim() ? '无匹配结果' : '请输入关键词' }}</div>\n </div>\n </aside>\n</template>\n","<script setup lang=\"ts\">\r\nimport { computed, ref } 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 'theme': return '明暗'\r\n case 'font': return '字号'\r\n default: return ''\r\n }\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 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 if (timer) {\r\n clearTimeout(timer)\r\n timer = null\r\n }\r\n tooltip.value = null\r\n}\r\n</script>\r\n\r\n<template>\r\n <div>\r\n <div :class=\"['ebook-reader__mbar', { 'is-visible': barVisible }]\">\r\n <div \r\n v-if=\"tooltip\"\r\n class=\"ebook-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=\"ebook-reader__btn\" \r\n :aria-pressed=\"activePanel === 'menu'\" \r\n @click=\"emit('togglePanel', '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=\"ebook-reader__btn\" \r\n :aria-pressed=\"activePanel === 'search'\" \r\n @click=\"emit('togglePanel', '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=\"ebook-reader__btn\" \r\n :aria-pressed=\"activePanel === 'progress'\" \r\n @click=\"emit('togglePanel', 'progress')\"\r\n @touchstart=\"(e) => handleTouchStart(e, '进度')\"\r\n @touchend=\"handleTouchEnd\"\r\n @touchcancel=\"handleTouchEnd\"\r\n title=\"进度\"\r\n >\r\n <SvgIcon name=\"sliders\" />\r\n </button>\r\n <button \r\n type=\"button\" \r\n class=\"ebook-reader__btn\" \r\n :aria-pressed=\"activePanel === 'theme'\" \r\n @click=\"emit('togglePanel', 'theme')\"\r\n @touchstart=\"(e) => handleTouchStart(e, '明暗')\"\r\n @touchend=\"handleTouchEnd\"\r\n @touchcancel=\"handleTouchEnd\"\r\n title=\"明暗\"\r\n >\r\n <SvgIcon name=\"sun\" />\r\n </button>\r\n <button \r\n type=\"button\" \r\n class=\"ebook-reader__btn\" \r\n :aria-pressed=\"activePanel === 'font'\" \r\n @click=\"emit('togglePanel', 'font')\"\r\n @touchstart=\"(e) => handleTouchStart(e, '字号')\"\r\n @touchend=\"handleTouchEnd\"\r\n @touchcancel=\"handleTouchEnd\"\r\n title=\"字号\"\r\n >\r\n <SvgIcon name=\"type\" />\r\n </button>\r\n </div>\r\n\r\n <div v-if=\"activePanel\" class=\"ebook-reader__moverlay\" @click=\"emit('closePanel')\" />\r\n\r\n <div :class=\"['ebook-reader__msheet', { 'is-open': activePanel }]\" :aria-hidden=\"!activePanel\">\r\n <div class=\"ebook-reader__msheet-header\">\r\n <div class=\"ebook-reader__msheet-title\">{{ mobileTitle }}</div>\r\n <button type=\"button\" class=\"ebook-reader__btn\" @click=\"emit('closePanel')\">\r\n <SvgIcon name=\"x\" />\r\n </button>\r\n </div>\r\n <div class=\"ebook-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 emit('closePanel')\r\n }\"\r\n />\r\n <div v-else class=\"ebook-reader__empty\">未找到目录</div>\r\n </template>\r\n\r\n <template v-if=\"activePanel === 'search'\">\r\n <div class=\"ebook-reader__field\">\r\n <input\r\n class=\"ebook-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=\"ebook-reader__btn\" :disabled=\"status !== 'ready'\" @click=\"emit('search', searchQuery)\">\r\n 搜索\r\n </button>\r\n </div>\r\n\r\n <div class=\"ebook-reader__checks\">\r\n <label class=\"ebook-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=\"ebook-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=\"ebook-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=\"ebook-reader__meta\">\r\n <span>进度 {{ searchProgressPercent }}%</span>\r\n <span v-if=\"searching\">搜索中…</span>\r\n <button v-if=\"searching\" type=\"button\" class=\"ebook-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=\"ebook-reader__empty\">{{ searchQuery.trim() ? '无匹配结果' : '请输入关键词' }}</div>\r\n </template>\r\n\r\n <template v-if=\"activePanel === 'progress'\">\r\n <div class=\"ebook-reader__meta\">\r\n <span class=\"ebook-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=\"ebook-reader__mprogress\">\r\n <input\r\n class=\"ebook-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=\"ebook-reader__mprogress-percent\">{{ displayedPercent }}%</div>\r\n </div>\r\n </template>\r\n\r\n <template v-if=\"activePanel === 'theme'\">\r\n <button type=\"button\" class=\"ebook-reader__btn\" @click=\"emit('toggleDarkMode', !darkMode)\">\r\n {{ darkMode ? '切换到亮色' : '切换到暗黑' }}\r\n </button>\r\n </template>\r\n\r\n <template v-if=\"activePanel === 'font'\">\r\n <div class=\"ebook-reader__mfont\">\r\n <button type=\"button\" class=\"ebook-reader__btn\" @click=\"emit('changeFontSize', fontSize - 10)\">\r\n A-\r\n </button>\r\n <div class=\"ebook-reader__font\">{{ fontSize }}%</div>\r\n <button type=\"button\" class=\"ebook-reader__btn\" @click=\"emit('changeFontSize', fontSize + 10)\">\r\n A+\r\n </button>\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 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\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 }) {\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 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 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 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('.ebook-reader__mbar') || t.closest('.ebook-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 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 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 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,\r\n (next) => {\r\n if (next) void openFile(next)\r\n },\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: 'ebook-reader__viewer', ref: viewerHost })\r\n\r\n const children = isMobile\r\n ? [\r\n viewer,\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: () => (isSeeking.value = true),\r\n onSeekChange: (v: number) => (seekPercent.value = v),\r\n onSeekEnd: (v: number) => {\r\n isSeeking.value = false\r\n reader.value?.goToFraction(v / 100)\r\n },\r\n onSeekCommit: (v: number) => {\r\n isSeeking.value = false\r\n reader.value?.goToFraction(v / 100)\r\n },\r\n onToggleDarkMode: setDarkModeInternal,\r\n onChangeFontSize: setFontSizeInternal,\r\n }),\r\n ]\r\n : [\r\n viewer,\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: 'ebook-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: () => (isSeeking.value = true),\r\n onSeekChange: (v: number) => (seekPercent.value = v),\r\n onSeekEnd: (v: number) => {\r\n isSeeking.value = false\r\n reader.value?.goToFraction(v / 100)\r\n },\r\n onSeekCommit: (v: number) => {\r\n isSeeking.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: 'ebook-reader',\r\n 'data-theme': darkMode() ? 'dark' : 'light',\r\n 'data-layout': layout.value,\r\n tabindex: 0,\r\n },\r\n children,\r\n )\r\n }\r\n },\r\n})\r\n"]}
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "@somecat/epub-reader",
3
+ "version": "0.1.0",
4
+ "description": "A cross-framework EPUB ebook reader component library based on foliate-js",
5
+ "license": "MIT",
6
+ "author": "SomeCat <zt@somecat.cn>",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/zzzttt1017/EbookReader.git"
10
+ },
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "type": "module",
15
+ "files": [
16
+ "dist",
17
+ "style.css"
18
+ ],
19
+ "sideEffects": [
20
+ "*.css"
21
+ ],
22
+ "exports": {
23
+ ".": {
24
+ "types": "./dist/index.d.ts",
25
+ "import": "./dist/index.js",
26
+ "require": "./dist/index.cjs"
27
+ },
28
+ "./core": {
29
+ "types": "./dist/core.d.ts",
30
+ "import": "./dist/core.js",
31
+ "require": "./dist/core.cjs"
32
+ },
33
+ "./react": {
34
+ "types": "./dist/react.d.ts",
35
+ "import": "./dist/react.js",
36
+ "require": "./dist/react.cjs"
37
+ },
38
+ "./vue": {
39
+ "types": "./dist/vue.d.ts",
40
+ "import": "./dist/vue.js",
41
+ "require": "./dist/vue.cjs"
42
+ },
43
+ "./style.css": "./style.css"
44
+ },
45
+ "main": "./dist/index.cjs",
46
+ "module": "./dist/index.js",
47
+ "types": "./dist/index.d.ts",
48
+ "scripts": {
49
+ "build": "tsup && node scripts/copy-style.mjs",
50
+ "dev:react": "pnpm -C playgrounds/react-demo dev",
51
+ "dev:vue": "pnpm -C playgrounds/vue-demo dev",
52
+ "typecheck": "tsc -p tsconfig.json --noEmit"
53
+ },
54
+ "dependencies": {
55
+ "foliate-js": "^1.0.1"
56
+ },
57
+ "peerDependencies": {
58
+ "react": ">=18",
59
+ "react-dom": ">=18",
60
+ "vue": ">=3"
61
+ },
62
+ "devDependencies": {
63
+ "@types/node": "^25.0.10",
64
+ "@types/react": "^19.2.5",
65
+ "@types/react-dom": "^19.2.3",
66
+ "react": "^19.2.0",
67
+ "react-dom": "^19.2.0",
68
+ "tsup": "^8.5.0",
69
+ "typescript": "^5.9.2",
70
+ "unplugin-vue": "^7.1.1",
71
+ "vue": "^3.5.13"
72
+ }
73
+ }