From 14f1956bbf78a7c7bacbe22b4005bee1c2684bc5 Mon Sep 17 00:00:00 2001 From: gkxk Date: Tue, 20 Oct 2026 11:42:57 +0800 Subject: [PATCH] refactor: streamline RSVP reader for The Well of Ascension single-book focus - Clean up legacy multi-format/CJK modules (orp, epub, samples, modals) - Replace with lightweight pure English tokenizer and chunking engine - Add SettingsDrawer, auto-hiding HUD, and PWA icons - Update manifest and touch icons Co-Authored-By: Claude Code --- index.html | 15 +- package.json | 2 - pnpm-lock.yaml | 96 - public/apple-touch-icon.png | Bin 0 -> 22808 bytes public/books/The Well of Ascension.txt | 19027 +++++++++++++++++++++++ public/favicon.svg | 51 +- public/manifest.json | 23 + public/pwa-192.png | Bin 0 -> 24940 bytes public/pwa-512.png | Bin 0 -> 76321 bytes src/App.tsx | 530 +- src/components/ChapterDrawer.tsx | 78 - src/components/Controls.tsx | 210 - src/components/FocusDisplay.tsx | 168 +- src/components/Header.tsx | 147 - src/components/LibraryModal.tsx | 338 - src/components/PasteModal.tsx | 197 - src/components/SettingsDrawer.tsx | 247 + src/components/SettingsModal.tsx | 265 - src/components/ShortcutsModal.tsx | 65 - src/core/epub.ts | 158 - src/core/orp.ts | 80 - src/core/timing.ts | 88 +- src/core/tokenizer.ts | 337 +- src/db/index.ts | 318 +- src/db/samples.ts | 132 - src/hooks/useKeyboardShortcuts.ts | 66 +- src/hooks/useReaderEngine.ts | 228 +- src/index.css | 138 +- src/types/index.ts | 69 +- 29 files changed, 19791 insertions(+), 3282 deletions(-) create mode 100644 public/apple-touch-icon.png create mode 100755 public/books/The Well of Ascension.txt create mode 100644 public/manifest.json create mode 100644 public/pwa-192.png create mode 100644 public/pwa-512.png delete mode 100644 src/components/ChapterDrawer.tsx delete mode 100644 src/components/Controls.tsx delete mode 100644 src/components/Header.tsx delete mode 100644 src/components/LibraryModal.tsx delete mode 100644 src/components/PasteModal.tsx create mode 100644 src/components/SettingsDrawer.tsx delete mode 100644 src/components/SettingsModal.tsx delete mode 100644 src/components/ShortcutsModal.tsx delete mode 100644 src/core/epub.ts delete mode 100644 src/core/orp.ts delete mode 100644 src/db/samples.ts diff --git a/index.html b/index.html index 2d9377b..3e5721e 100644 --- a/index.html +++ b/index.html @@ -1,15 +1,20 @@ - + + - - Focus — 极速 RSVP 闪屏专注阅读器 + + + + + + Focus - -
+ +
diff --git a/package.json b/package.json index 2808700..8629308 100644 --- a/package.json +++ b/package.json @@ -10,14 +10,12 @@ "preview": "vite preview" }, "dependencies": { - "jszip": "^3.10.2", "lucide-react": "^1.59.0", "react": "^19.3.1", "react-dom": "^19.3.1" }, "devDependencies": { "@tailwindcss/vite": "^4.3.3", - "@types/jszip": "^3.4.1", "@types/node": "^24.19.2", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b317939..e97a5e9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,9 +8,6 @@ importers: .: dependencies: - jszip: - specifier: ^3.10.2 - version: 3.10.2 lucide-react: specifier: ^1.59.0 version: 1.59.0(@types/react@19.3.0)(react@19.3.1) @@ -24,9 +21,6 @@ importers: '@tailwindcss/vite': specifier: ^4.3.3 version: 4.3.3(vite@8.3.4(@types/node@24.19.2)(jiti@2.7.0)) - '@types/jszip': - specifier: ^3.4.1 - version: 3.4.1 '@types/node': specifier: ^24.19.2 version: 24.19.2 @@ -370,10 +364,6 @@ packages: peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 - '@types/jszip@3.4.1': - resolution: {integrity: sha512-TezXjmf3lj+zQ651r6hPqvSScqBLvyPI9FxdXBqpEwBijNGQ2NXpaFW/7joGzveYkKQUil7iiDHLo6LV71Pc0A==} - deprecated: This is a stub types definition. jszip provides its own type definitions, so you do not need this installed. - '@types/node@24.19.2': resolution: {integrity: sha512-93d49wCWJkCyN87MxLpNN6KXPCwFw7bVUg79mGUV1OS40JGWwVCr8n61DXCSqz7CV6/VfPkb7xec7uP2M+QHWQ==} @@ -521,9 +511,6 @@ packages: oxc-transform-react: optional: true - core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -552,25 +539,10 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - immediate@3.0.6: - resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - jiti@2.7.0: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true - jszip@3.10.2: - resolution: {integrity: sha512-3l+rb15IOWtUhU0H5MFqES/T6Kh7abYwjosBey/vD6hDt8zoEffkSC5Ws5SGtgVw3gBx2NEbhTeSW1+kWkpyTQ==} - - lie@3.3.0: - resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} - lightningcss-android-arm64@1.32.0: resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} engines: {node: '>= 12.0.0'} @@ -741,9 +713,6 @@ packages: vite-plus: optional: true - pako@1.0.11: - resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -755,9 +724,6 @@ packages: resolution: {integrity: sha512-YUbWYCgErwnMAVkjUnYa+KlMBzGpHwiIt/DE7f0G33AuX2LH9UcTk6KgWxd3zRU+pN3u/C+Xl3EnMLM4Hea7Sg==} engines: {node: ^10 || ^12 || >=14} - process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - react-dom@19.3.1: resolution: {integrity: sha512-Y0bARz53lhEC1NMCASs0/j+faB/zqt3R8hpvg1e8+61ZVJ4UL0UdC4cBbXfZMcIuhrfgeILTLe+ZeBCavQPtKQ==} peerDependencies: @@ -767,30 +733,18 @@ packages: resolution: {integrity: sha512-QNhWdt7nrgVWWQG58QuGsAR3jv3Hbe4mb4vz7w2csnHavciZJgda1CPNaldF6eVxv90ud3jUXpKlHL69gO38yw==} engines: {node: '>=0.10.0'} - readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - rolldown@1.2.14: resolution: {integrity: sha512-eTBTTqMR6uHKLgcUqpJP8ntzDI6V4LYA8negAMBEI7gkgVvOdrx6VsvS2Ym+83KhOPdLCHWJu0w7UQFJZhHKNw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - scheduler@0.28.0: resolution: {integrity: sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==} - setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - source-map-js@1.2.2: resolution: {integrity: sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==} engines: {node: '>=0.10.0'} - string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - tailwindcss@4.3.3: resolution: {integrity: sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==} @@ -810,9 +764,6 @@ packages: undici-types@7.24.6: resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - vite@8.3.4: resolution: {integrity: sha512-IftLE8phJhdNRIGNEV4JCCvfNScoZQVfcXaN8TQropWGJtOHcu+iAB9pHcuGvmEb/kddw0LBe/jS8ztdC6xdiQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1051,10 +1002,6 @@ snapshots: tailwindcss: 4.3.3 vite: 8.3.4(@types/node@24.19.2)(jiti@2.7.0) - '@types/jszip@3.4.1': - dependencies: - jszip: 3.10.2 - '@types/node@24.19.2': dependencies: undici-types: 7.24.6 @@ -1132,8 +1079,6 @@ snapshots: '@rolldown/pluginutils': 1.0.1 vite: 8.3.4(@types/node@24.19.2)(jiti@2.7.0) - core-util-is@1.0.3: {} - csstype@3.2.3: {} detect-libc@2.1.2: {} @@ -1152,25 +1097,8 @@ snapshots: graceful-fs@4.2.11: {} - immediate@3.0.6: {} - - inherits@2.0.4: {} - - isarray@1.0.0: {} - jiti@2.7.0: {} - jszip@3.10.2: - dependencies: - lie: 3.3.0 - pako: 1.0.11 - readable-stream: 2.3.8 - setimmediate: 1.0.5 - - lie@3.3.0: - dependencies: - immediate: 3.0.6 - lightningcss-android-arm64@1.32.0: optional: true @@ -1303,8 +1231,6 @@ snapshots: '@oxlint/binding-win32-ia32-msvc': 1.89.0 '@oxlint/binding-win32-x64-msvc': 1.89.0 - pako@1.0.11: {} - picocolors@1.1.1: {} picomatch@4.0.7: {} @@ -1315,8 +1241,6 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.2 - process-nextick-args@2.0.1: {} - react-dom@19.3.1(react@19.3.1): dependencies: react: 19.3.1 @@ -1324,16 +1248,6 @@ snapshots: react@19.3.1: {} - readable-stream@2.3.8: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - rolldown@1.2.14: dependencies: '@oxc-project/types': 0.154.0 @@ -1355,18 +1269,10 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.2.14 '@rolldown/binding-win32-x64-msvc': 1.2.14 - safe-buffer@5.1.2: {} - scheduler@0.28.0: {} - setimmediate@1.0.5: {} - source-map-js@1.2.2: {} - string_decoder@1.1.1: - dependencies: - safe-buffer: 5.1.2 - tailwindcss@4.3.3: {} tapable@2.3.3: {} @@ -1401,8 +1307,6 @@ snapshots: undici-types@7.24.6: {} - util-deprecate@1.0.2: {} - vite@8.3.4(@types/node@24.19.2)(jiti@2.7.0): dependencies: lightningcss: 1.33.0 diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e54ae2c6e028c40d83fc30d219ffd884d3625fdc GIT binary patch literal 22808 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