You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-**Dexie**: IndexedDB wrapper for storing volumes and files
39
40
-**@zip.js/zip.js**: ZIP file extraction
40
-
-**Panzoom**: Pan/zoom functionality for manga pages
41
+
-**Zoom architecture**: Shared ZoomController + measurement-based correction drives zoom in all reader modes (`src/lib/reader/zoom-*.ts`, `paged-*.ts`)
41
42
-**Flowbite Svelte**: UI component library
42
43
-**Tailwind CSS**: Styling
43
44
-**Vitest**: Testing framework
@@ -53,7 +54,6 @@ src/
53
54
│ ├── components/ # Svelte components
54
55
│ ├── consts/ # Application constants
55
56
│ ├── import/ # File import pipeline and processing
56
-
│ ├── panzoom/ # Custom pan/zoom implementation
57
57
│ ├── reader/ # Core reader logic
58
58
│ ├── settings/ # Settings stores and profiles
59
59
│ ├── styles/ # Shared CSS styles
@@ -217,11 +217,11 @@ Tracked per volume in the `volumes` store:
217
217
218
218
### Text Selection Handling
219
219
220
-
The reader has complex text selection logic to prevent interference with panzoom drag:
220
+
The reader has complex text selection logic to prevent interference with drag panning:
221
221
222
-
-`beforeMouseDown` handler in MangaPage.svelte checks if click is on text
222
+
- Pointer handlers skip pan initiation for `.textBox` targets (PagedViewport.svelte and the scroll readers), so text selection works inside boxes
223
+
- Double-clicking text to select it does not trigger zoom (`.textBox` guard in Reader's onDoubleTap)
223
224
- Text selection is only allowed within text boxes, not on background
224
-
- See `src/routes/[manga]/[volume]/+page.svelte` for implementation
225
225
226
226
### Modal Button Z-Index
227
227
@@ -263,6 +263,13 @@ These are only required for Google Drive sync. MEGA and WebDAV don't require env
263
263
- Run tests with `npm test`
264
264
- Example test files: `src/lib/util/count-chars.test.ts`, `src/lib/components/Settings/__tests__/QuickAccess.test.ts`
265
265
266
+
### E2E (Playwright)
267
+
268
+
-`npm run test:e2e` runs `e2e/*.spec.ts`. The config starts (or **silently reuses**) a dev server on port 5173.
269
+
-**Multi-worktree caveat**: if another worktree's dev server already owns 5173, the suite would run against that worktree's code. Set `E2E_PORT=<free port>` to start a dedicated server for the current worktree.
270
+
-`E2E_CHROMIUM=/path/to/chrome` points Playwright at an existing browser binary instead of downloading one (e.g. a build under `~/.cache/ms-playwright/`).
271
+
- The zoom specs import production modules (`zoom-controller.ts`, `zoom-layout.ts`, `page-detection.ts`) through the Vite dev server and drive them against synthetic page strips.
0 commit comments