From f123dfef959c40a3c3cdf11c0251e36bb38a44b9 Mon Sep 17 00:00:00 2001 From: Yoosseph <122846703+Yoosseph@users.noreply.github.com> Date: Sat, 10 Oct 2026 04:12:46 +0200 Subject: [PATCH 1/3] Improve explorer layout, navigation and loading recovery --- .github/workflows/ci.yml | 7 ++ .gitignore | 2 + README.md | 8 +- docs/architecture.md | 23 ++-- .../explorer-ui-44/desktop-after.png | Bin 0 -> 69640 bytes .../explorer-ui-44/desktop-before.png | Bin 0 -> 71342 bytes .../explorer-ui-44/mobile-after.png | Bin 0 -> 49376 bytes .../explorer-ui-44/mobile-expanded.png | Bin 0 -> 56992 bytes e2e/explorer.spec.ts | 107 ++++++++++++++++++ eslint.config.mjs | 4 +- package-lock.json | 46 ++++++++ package.json | 2 + playwright.config.ts | 20 ++++ src/app/router.test.ts | 34 +++++- src/app/router.ts | 42 +++++-- src/engine/Engine.ts | 54 +++++++-- src/engine/selection.test.ts | 74 ++++++++++++ src/i18n/interface.ts | 19 ++++ src/main.tsx | 1 + src/state/sceneTransitions.ts | 23 ++++ src/state/store.test.ts | 21 ++++ src/state/store.ts | 17 +-- src/styles/app.css | 49 +++++++- src/ui/App.tsx | 83 +------------- src/ui/CanalFrequency.tsx | 6 +- src/ui/DetailPanel.tsx | 28 ++--- src/ui/Dock.tsx | 7 +- src/ui/LayersPanel.tsx | 60 ++++++---- src/ui/NerveControls.tsx | 8 +- src/ui/Overlays.tsx | 16 +++ src/ui/SearchPanel.tsx | 39 +++++-- src/ui/SinusControls.tsx | 5 +- src/ui/StructureTree.tsx | 5 +- src/ui/SurfaceFeatureControls.tsx | 3 +- src/ui/VesselControls.tsx | 3 +- src/ui/useKeyboard.ts | 7 +- src/ui/useViewportInsets.ts | 85 ++++++++++++++ tsconfig.eslint.json | 2 +- 38 files changed, 716 insertions(+), 194 deletions(-) create mode 100644 docs/screenshots/explorer-ui-44/desktop-after.png create mode 100644 docs/screenshots/explorer-ui-44/desktop-before.png create mode 100644 docs/screenshots/explorer-ui-44/mobile-after.png create mode 100644 docs/screenshots/explorer-ui-44/mobile-expanded.png create mode 100644 e2e/explorer.spec.ts create mode 100644 playwright.config.ts create mode 100644 src/engine/selection.test.ts create mode 100644 src/i18n/interface.ts create mode 100644 src/state/sceneTransitions.ts create mode 100644 src/ui/useViewportInsets.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1168741..e37d3e8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,3 +18,10 @@ jobs: - run: npm run lint - run: npm test - run: npm run build + - run: npx playwright install --with-deps chromium + - run: npm run test:e2e + - uses: actions/upload-artifact@v4 + if: failure() + with: + name: browser-test-results + path: test-results/ diff --git a/.gitignore b/.gitignore index 20c5190..9ecdb81 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,8 @@ dist/ *.log .vite/ coverage/ +playwright-report/ +test-results/ tools/pipeline/raw/ tools/pipeline/.cache/ __pycache__/ diff --git a/README.md b/README.md index 3674dde..242f6a2 100644 --- a/README.md +++ b/README.md @@ -51,8 +51,12 @@ npm test # unit tests (Vitest) npm run typecheck npm run typecheck:tests # TypeScript checks for tests and Vite config npm run lint # ESLint (type-aware rules on src/**) -npm run build # static site in dist/ (includes a 404.html SPA fallback) -``` +npm run build # static site in dist/ (includes a 404.html SPA fallback) +npx playwright install chromium # once, for browser tests +npm run test:e2e # desktop and phone flows against the production build +``` + +Browser regressions cover selection/dissection Back and Forward, search focus and dismissal, layer scrolling, primary dentition, mobile reading trays, failed-download retry and credits links. CI installs Chromium and runs these after the production build; failed runs retain traces and screenshots in `test-results/`. The built site is fully static. For a sub-path deployment set `DS_BASE`, e.g. `DS_BASE=/dental-scope/ npm run build`; with a relative base (`DS_BASE=./`) deep links switch to hash URLs (`#/tooth/36`) so the build works from any folder. Set `VITE_DS_REPO_URL` to link the “Made by Yoseph” credit and the About dialog to the repository; when it is unset the credit is plain text, so a build never advertises a private repository. The live site is deployed by Vercel from `main`; set `VITE_DS_REPO_URL` and `DS_SITE_URL` in the Vercel project's environment variables. diff --git a/docs/architecture.md b/docs/architecture.md index ff5f8a1..48b4f9a 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -14,7 +14,8 @@ Checked against the code on 2026-09-26. |---|---|---| | Install | `npm install` | Node 22 (as in CI). Nothing else is needed for the app. | | Run | `npm run dev` | Vite dev server on . In dev, `window.ds = { registry, engine }` is exposed for debugging. | -| Unit tests | `npm test` | Vitest, `src/**/*.test.ts`, Node environment (no WebGL) | +| Unit tests | `npm test` | Vitest, `src/**/*.test.ts`, Node environment (no WebGL) | +| Browser tests | `npm run test:e2e` | Playwright, `e2e/`, desktop and phone Chromium against the production build | | Type check | `npm run typecheck` | `tsc -b --noEmit`, strict | | Build | `npm run build` | Type check, then `vite build` into `dist/`. The SEO plugin also writes `404.html`, the tooth entry pages, `robots.txt` and `sitemap.xml` (§9). | | Preview a build | `npm run preview` | | @@ -29,7 +30,7 @@ Build-time environment variables: | `VITE_DS_REPO_URL` | Links the "Made by Yoseph" credit and the About dialog to the repository. When unset these show as plain text, so a build never advertises a private repository. | | `VITE_DS_URL=off` | Stop the app from writing to the address bar (for embedding). | -CI (`.github/workflows/ci.yml`) runs typecheck, test and build on pushes and PRs. Vercel deploys `main` to production and every other branch to a preview. `DS_SITE_URL` and `VITE_DS_REPO_URL` come from the Vercel project's environment variables; unknown deep links fall back to the generated `404.html` app shell. +CI (`.github/workflows/ci.yml`) runs app/test typechecking, lint, unit tests, production build and browser tests on pushes to main and PRs. Browser failures retain screenshots and traces. Vercel deploys `main` to production and every other branch to a preview. `DS_SITE_URL` and `VITE_DS_REPO_URL` come from the Vercel project's environment variables; unknown deep links fall back to the generated `404.html` app shell. ## 2. Principles @@ -65,7 +66,8 @@ src/ en/teeth.json, en/structures.json The text itself (draft) search/search.ts Index builder and scorer state/ - store.ts Zustand store: AppState, initial state, actions, persisted preferences + store.ts Zustand store: AppState, initial state, actions, persisted preferences + sceneTransitions.ts Shared scene reset and adult-scene snapshot for development transitions visibility.ts Pure per-mesh visibility resolver + pluggable filters engine/ Engine.ts Owns renderer, scene, loop, loading, visibility/highlight/explode/section/labels, picking @@ -80,7 +82,7 @@ src/ ui/ React components: App, TopBar, LayersPanel, StructureTree, DetailPanel, Dock (bottom toolbar), CameraControls (orbit, view pictograms / View picker, zoom), SearchPanel, Overlays (About, footer, loading, start hint), icons, - useKeyboard, context (ServicesContext) + useKeyboard, useViewportInsets (panel occlusion), context (ServicesContext) modes/modes.ts 🧩 Mode interface, lesson format, quiz picker (not wired to the UI) styles/ tokens.css (design tokens: paper and ink, one ultramarine accent, light/dark), app.css public/ @@ -97,14 +99,17 @@ docs/ This file, assets, content, sources, research and compar 1. `main.tsx` calls `restorePreferences()` (numbering, theme, orbit mode from `localStorage`), checks WebGL, then `loadManifest()`. 2. It builds the `Registry` (pure, from the manifest), the `Engine` and the search index, and renders `` with all three in `ServicesContext`. 3. `App` mounts the engine on the stage `
`, starts `engine.loadAll()` (staged loading, §7) and `startRouter()`. It sets `data-theme` on ``, installs the keyboard shortcuts (`useKeyboard`) and tells the engine which parts of the canvas are covered by panels (`engine.setInsets`). -4. `startRouter` applies the current URL (select, focus, maybe enter dissection) and then keeps the URL in sync with `selectedId` / `dissectFdi` through `replaceState`. Explicit navigation (search, tree, detail links) calls `pushPath`. `popstate` / `hashchange` re-apply. It also keeps `document.title` in sync. +4. `startRouter` applies the current URL (select, focus, maybe enter dissection) and then keeps the URL in sync with `selectedId` / `dissectFdi` through `replaceState`. Explicit navigation (search, tree, detail links) uses `navigate(command)` to push an entry after the scene commits. `popstate` / `hashchange` re-apply. It also keeps `document.title` in sync. | URL | Effect | |---|---| | `/` | Overview | | `/tooth/36/` | Select and focus tooth 36 (FDI). The build writes a static entry page here, with its own title. | | `/tooth/36/dissect` | Open the dissection of tooth 36 | -| `/structure/` | Select and focus any structure (served through the `noindex` 404.html shell on static hosts) | +| `/structure/` | Select and focus any structure (served through the `noindex` 404.html shell on static hosts) | +| `/credits/` | Open the native credits dialog over the explorer; translated links use `/credits//`. | + +Explicit UI and canvas selections use `navigate(command)`: URL synchronization is suspended while the command loads and commits the scene, then one history entry is pushed. Route replay cancels pending selection and suppresses history writes. The guided demonstration replaces its route instead of adding history entries. ## 5. State (`src/state/store.ts`) @@ -113,13 +118,15 @@ One vanilla Zustand store. React reads it with `useApp(selector)`, and the engin | Group | Fields | |---|---| | loading | `ready`, `loading` (stage → 0…1), `error` | -| selection | `selectedId`, `hoveredId` | +| selection | `selectedId`, `hoveredId`, `selectionRequest` (target, command and loading/error status) | | visibility | `categories` (id → `on`/`ghost`/`off`), `hidden`, `ghosted` (id → true), `isolateId`, `isolateContext`, `ghostOpacity` | | arch view | `explode` (0…1), `explodePhase` (1 in position / 2 laid out), `labels`, `clip` {enabled, axis, offset, flip}, `view` (preset or null), `autoRotate`, `orbitMode` (`fixed`/`free`) | | tooth dissection | `dissectFdi`, `dissectLevel` (0 whole → 4 canals), `toothExplode` | | UI | `numbering`, `theme`, `searchOpen`, `aboutOpen`, `panel` (layers/tree), `mobileSheet`, `mode` 🧩 | -`numbering`, `theme` and `orbitMode` are saved per viewer in `localStorage`. +`numbering`, `theme` and `orbitMode` are saved per viewer in `localStorage`. + +`state/sceneTransitions.ts` owns the shared study/development reset and the adult scene snapshot restored on leaving development. Pending selection is plain state: only the current request may commit after a download, and failed tooth requests are removed from the engine cache so Retry can load them again. `ui/useViewportInsets.ts` measures the panels, mobile controls and tour; the engine receives only the resulting insets. **Visibility** (`state/visibility.ts`). `resolveMesh(meshKey, ctx)` is the only function that decides whether a mesh is `on`, `ghost`, `faint` (a quieter ghost used for context around a dissected tooth) or `off`. It combines categories, hide/ghost on the structure and its ancestors, tooth shell vs internal layers (`layersActive`), dissection-level rules (`dissectRule`), isolation, and any filters added with `registerVisibilityFilter` (the hook for modes and a future timeline). `revealPatch` makes a structure reachable, and `Engine.selectFromUI` uses it for search, tree, label and deep-link navigation. diff --git a/docs/screenshots/explorer-ui-44/desktop-after.png b/docs/screenshots/explorer-ui-44/desktop-after.png new file mode 100644 index 0000000000000000000000000000000000000000..b2516a2925d0cb7b39ab4e4426b665464e693f9d GIT binary patch literal 69640 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

J>pR&lK*UM2n-Km=?lx_^ZtkDa5kA+{in8uFS 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 HWAc9i{KYwr literal 0 HcmV?d00001 diff --git a/docs/screenshots/explorer-ui-44/desktop-before.png b/docs/screenshots/explorer-ui-44/desktop-before.png new file mode 100644 index 0000000000000000000000000000000000000000..47673f448a96dfe2e652375f4eafb3bc49c4ce30 GIT binary patch literal 71342 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

%Q%g4_rORk_zOunxTiq8jlu55zsnvzLYv=+VSA z*HSRq(>0k-i(`U-6GTWtd^$2(Mn=dfk-(>2l~HG5F-G@PtYvq9`y!R9LG{Iyg2mlc zCkcdt`9@K)8cQFQE=wkGzIs*BfdrDbW{bt1A;Hoi-L>|O=Qu#sPZp7GW-i`Y zzd8n{^e2?yKttnW6Dvt+O5P|Y=wt~>XFHB9aP6o?(cZbEv+$=9yuqfUMDAS#<&a1E zil)TRgB^?A(K{b8qUoK8xvD4~A2p2k)S0bET?~Ybw9xGPnXpAllk|jTRGC{1NJ>+e z`7HE_73-2)t7K1$Bs{`01gQ{+k#0mvF`cGAGW6Yojj4R!X`3G$C}?7DIuKENjDltC zAdg+c5a$p|NsolrqT{XDt+)7|2GW-0P1Xi)hv)fvjgGD-M2@&;)X@2p1P*n96JR@Q1jyvN4MK2Ee= z)7;3`H8e0(XK)@X@eg!vT%P^l{qZmJn5;g%#SR;~@t_xPno|A>#r1=vC#c{SKJLUY=ju9Jel=XHWZ7 z4$|`ct0rOF#MLLg960Td0S_WC=ugku;$A5bDFAsXRYPj=J%_iNmECX_MzUH>rP!Hfa}*O;CFk?-h9ombc+RedrgSr z{rqm=6@l~Z)dI-6$NazaN{GVIDP50Vl%xF`uXpjQI z@`MkO)H?ftV~h{*Ypl0ab5*FaEzB(z1vFBs=J_Oogk*#iT7f;9GOC9uab4n4hy@?) zd9efRED^-d;shyMUy0^aguGu%6c5&ln>5L+s*5?1?

}(&x>!bSvA}z6O5mHRef0 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°LSn~I%Ha*cRlkA?SQqhB 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 literal 0 HcmV?d00001 diff --git a/docs/screenshots/explorer-ui-44/mobile-after.png b/docs/screenshots/explorer-ui-44/mobile-after.png new file mode 100644 index 0000000000000000000000000000000000000000..b01d4b8e122e3cf20f186f7b43ef86c29f165dca GIT binary patch literal 49376 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 literal 0 HcmV?d00001 diff --git a/docs/screenshots/explorer-ui-44/mobile-expanded.png b/docs/screenshots/explorer-ui-44/mobile-expanded.png new file mode 100644 index 0000000000000000000000000000000000000000..a145c3e9ac47fcc738abc2ca8ef55f3b050e5ded GIT binary patch literal 56992 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 SW-;TX6*JELz#kK{*7sMT*J1ep literal 0 HcmV?d00001 diff --git a/e2e/explorer.spec.ts b/e2e/explorer.spec.ts new file mode 100644 index 0000000..47a437f --- /dev/null +++ b/e2e/explorer.spec.ts @@ -0,0 +1,107 @@ +import { expect, test, type Page } from '@playwright/test'; + +test.beforeEach(async ({ page }) => { + await page.addInitScript(() => localStorage.setItem('ds.guide.seen.v1', 'seen')); +}); + +async function searchTooth(page: Page, fdi: number) { + await page.locator('[data-tour="search"]:visible').click(); + const input = page.getByRole('combobox', { name: 'Search anatomy' }); + await input.fill(`fdi ${fdi}`); + await expect(page.locator('#ds-search-results').getByRole('option').first()).toContainText(`FDI ${fdi}`); + await input.press('Enter'); +} + +test('search selections and dissection support Back and Forward', async ({ page }) => { + await page.goto('/'); + await searchTooth(page, 36); + await expect(page).toHaveURL(/\/tooth\/36\/$/); + await searchTooth(page, 11); + await expect(page).toHaveURL(/\/tooth\/11\/$/); + await page.goBack(); + await expect(page.getByRole('heading', { name: 'Mandibular left first molar' })).toBeVisible(); + await page.goForward(); + await expect(page.getByRole('heading', { name: 'Maxillary right central incisor' })).toBeVisible(); + await page.getByRole('button', { name: 'Explore inside this tooth' }).click(); + await expect(page).toHaveURL(/\/tooth\/11\/dissect$/); + await page.goBack(); + await expect(page.getByRole('button', { name: 'Explore inside this tooth' })).toBeVisible(); + await expect(page.getByRole('button', { name: 'Back to the full mouth' })).toHaveCount(0); + await page.getByRole('button', { name: 'Close details', exact: true }).click(); + await expect(page).toHaveURL(/\/$/); + await page.goBack(); + await expect(page.getByRole('heading', { name: 'Maxillary right central incisor' })).toBeVisible(); +}); + +test('search contains keyboard focus and restores its opener', async ({ page }) => { + await page.goto('/'); + const opener = page.locator('[data-tour="search"]:visible'); + await opener.click(); + const input = page.getByRole('combobox', { name: 'Search anatomy' }); + await expect(input).toBeFocused(); + await input.press('Shift+Tab'); + await expect.poll(() => page.locator('.ds-search-layer').evaluate(element => element.contains(document.activeElement))).toBe(true); + await page.keyboard.press('Escape'); + await expect(page.getByRole('dialog', { name: 'Search anatomy' })).toBeHidden(); + await expect(opener).toBeFocused(); + await opener.click(); + await page.locator('.ds-search-layer').click({ position: { x: 5, y: 5 } }); + await expect(page.getByRole('dialog', { name: 'Search anatomy' })).toBeHidden(); +}); + +test('desktop layers remain reachable with nerve settings expanded', async ({ page }, testInfo) => { + test.skip(testInfo.project.name !== 'desktop'); + await page.goto('/'); + await page.locator('.ds-nerve-controls summary').click(); + await expect.poll(() => page.locator('.ds-layer-scroll').evaluate(element => element.clientHeight)).toBeGreaterThan(100); + await page.getByRole('button', { name: 'Show only Permanent teeth', exact: true }).click(); + await expect(page.getByRole('button', { name: 'Show Permanent teeth', exact: true })).toHaveAttribute('aria-pressed', 'true'); + await expect(page.locator('.ds-count[aria-label="32 teeth"]')).toHaveText('32'); +}); + +test('primary dentition has an explicit development action', async ({ page }, testInfo) => { + await page.goto('/'); + if (testInfo.project.name === 'phone') await page.getByRole('button', { name: 'Layers', exact: true }).click(); + await page.getByRole('button', { name: 'Open primary dentition', exact: true }).click(); + await expect(page.getByRole('button', { name: 'Make Primary teeth translucent' })).toHaveCount(0); + await expect(page.locator('.ds-development-panel')).toBeVisible(); +}); + +test('phone detail actions stay visible and the reading tray expands', async ({ page }, testInfo) => { + test.skip(testInfo.project.name !== 'phone'); + await page.goto('/tooth/11/'); + const action = page.getByRole('button', { name: 'Explore inside this tooth' }); + await expect(action).toBeInViewport(); + await page.locator('.ds-detail-body').evaluate(element => { element.scrollTop = element.scrollHeight; }); + await expect(action).toBeInViewport(); + const tray = page.locator('.ds-detail'); + const initialHeight = await tray.evaluate(element => element.clientHeight); + await page.getByRole('button', { name: 'Expand details' }).click(); + await expect.poll(() => tray.evaluate(element => element.clientHeight)).toBeGreaterThan(initialHeight + 100); + await expect(action).toBeInViewport(); + await page.getByRole('button', { name: 'Collapse details' }).click(); + await action.click(); + await expect(page).toHaveURL(/\/tooth\/11\/dissect$/); +}); + +test('a failed tooth download can be retried without reloading', async ({ page }) => { + await page.route('**/models/teeth/tooth-11.glb', route => route.abort()); + await page.goto('/'); + await searchTooth(page, 11); + await expect(page.getByRole('alert')).toContainText('This anatomy could not be loaded'); + await page.unroute('**/models/teeth/tooth-11.glb'); + await page.getByRole('button', { name: 'Retry', exact: true }).click(); + await expect(page).toHaveURL(/\/tooth\/11\/$/); + await expect(page.getByRole('alert')).toHaveCount(0); +}); + +test('credits deep links retain theme and keyboard dismissal', async ({ page }) => { + await page.addInitScript(() => localStorage.setItem('ds.theme', 'dark')); + await page.goto('/credits/'); + await expect(page.getByRole('dialog', { name: 'Credits', exact: true })).toBeVisible(); + await expect(page.locator('html')).toHaveAttribute('data-theme', 'dark'); + await expect(page.getByRole('link', { name: 'Roy Namo — GitHub' })).toHaveAttribute('href', 'https://github.com/roynamo'); + await page.keyboard.press('Escape'); + await expect(page.getByRole('dialog', { name: 'Credits', exact: true })).toBeHidden(); + await expect(page).toHaveURL(/\/$/); +}); diff --git a/eslint.config.mjs b/eslint.config.mjs index 38b0c69..b233ba8 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -15,7 +15,7 @@ import jsxA11y from 'eslint-plugin-jsx-a11y'; export default tseslint.config( { - ignores: ['dist/**', 'public/**', 'tools/pipeline/.cache/**', 'docs/**'], + ignores: ['dist/**', 'public/**', 'tools/pipeline/.cache/**', 'docs/**', '.vite/**', 'playwright-report/**', 'test-results/**'], }, js.configs.recommended, { @@ -61,7 +61,7 @@ export default tseslint.config( }, { // Tests run in Node (vitest, `environment: 'node'`). - files: ['**/*.test.ts', 'tools/**'], + files: ['**/*.test.ts', 'tools/**', 'e2e/**', 'playwright.config.ts'], languageOptions: { globals: { ...globals.node } }, }, { diff --git a/package-lock.json b/package-lock.json index 9bb944a..024dc78 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,7 @@ "@gltf-transform/core": "^4.5.0", "@gltf-transform/extensions": "^4.5.0", "@gltf-transform/functions": "^4.5.0", + "@playwright/test": "^1.64.0", "@types/node": "^22.20.5", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", @@ -1220,6 +1221,22 @@ "url": "https://github.com/sponsors/oxc-project" } }, + "node_modules/@playwright/test": { + "version": "1.64.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.64.0.tgz", + "integrity": "sha512-oTN9FNYuN6bqQMwiho6jJKLCG2/QOYCixGXuCjRmzOq23eODeukuY2XiAVoVpAECbuezMt1MHQjAiQxK8F+Y+g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.64.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/@rolldown/binding-android-arm-eabi": { "version": "1.2.11", "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.11.tgz", @@ -4977,6 +4994,35 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/playwright": { + "version": "1.64.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.64.0.tgz", + "integrity": "sha512-kVzTnYFYEyQ9RGzBjNCd2+yEqWmVbxl3AHPynv3qQ6JTjv4a+kwRcnqQwIpuP3NnrnIrE/Q6wWAIAvMfIE2/Yg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.64.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/playwright-core": { + "version": "1.64.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.64.0.tgz", + "integrity": "sha512-T9r+MZkTECl2+oUcZ26YgZzTrYidTsIhYYkJix+6iDOymOb1FB2RLLSOxRGnZGv5DStt+aduIVbt+E8WygXYpg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", diff --git a/package.json b/package.json index fd52983..34647e8 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "typecheck": "tsc -b --noEmit", "typecheck:tests": "tsc6 -p tsconfig.eslint.json --noEmit", "test": "vitest run", + "test:e2e": "playwright test", "lint": "eslint .", "assets:build": "python3 tools/pipeline/build_assets.py --bp3d tools/pipeline/raw/stl --out tools/pipeline/.cache/build", "assets:compress": "node tools/pipeline/compress.mjs tools/pipeline/.cache/build public/models", @@ -33,6 +34,7 @@ "@gltf-transform/core": "^4.5.0", "@gltf-transform/extensions": "^4.5.0", "@gltf-transform/functions": "^4.5.0", + "@playwright/test": "^1.64.0", "@types/node": "^22.20.5", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 0000000..0336a8e --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,20 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + timeout: 120_000, + expect: { timeout: 30_000 }, + workers: 1, + retries: process.env.CI ? 1 : 0, + reporter: 'list', + use: { baseURL: 'http://127.0.0.1:5176', reducedMotion: 'reduce', trace: 'retain-on-failure', screenshot: 'only-on-failure' }, + projects: [ + { name: 'desktop', use: { ...devices['Desktop Chrome'], viewport: { width: 1280, height: 720 } } }, + { name: 'phone', use: { ...devices['Pixel 5'], viewport: { width: 390, height: 844 } } }, + ], + webServer: { + command: 'npm run preview -- --host 127.0.0.1 --port 5176 --strictPort', + url: 'http://127.0.0.1:5176', + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/src/app/router.test.ts b/src/app/router.test.ts index 7e4eea6..6f50277 100644 --- a/src/app/router.test.ts +++ b/src/app/router.test.ts @@ -4,16 +4,17 @@ import { Registry } from '../anatomy/registry'; import type { Manifest } from '../anatomy/types'; import type { Engine } from '../engine/Engine'; import { actions, getState, initialState, setState } from '../state/store'; -import { parsePath, startRouter } from './router'; +import { navigate, parsePath, startRouter } from './router'; const registry = new Registry(JSON.parse(readFileSync('public/models/manifest.json', 'utf8')) as Manifest); let stop: (() => void) | undefined; let url: URL; let events: EventTarget; -const navigate = (_data: unknown, _title: string, path: string) => { url = new URL(path, url); }; -const pushState = vi.fn(navigate); -const replaceState = vi.fn(navigate); +const updateUrl = (_data: unknown, _title: string, path: string) => { url = new URL(path, url); }; +const pushState = vi.fn(updateUrl); +const replaceState = vi.fn(updateUrl); const engine = { + cancelSelection: vi.fn(), selectFromUI: vi.fn((id: string) => { actions.select(id); return Promise.resolve(); }), exploreTooth: vi.fn((fdi: number) => { actions.enterDissect(fdi); return Promise.resolve(); }), } as unknown as Engine; @@ -32,6 +33,31 @@ beforeEach(() => { vi.stubGlobal('document', { title: '' }); }); +describe('explicit selection navigation', () => { + it('pushes one entry per search selection instead of replacing the previous tooth', async () => { + stop = startRouter(engine, registry); + await navigate(() => engine.selectFromUI('tooth-36')); + await navigate(() => engine.selectFromUI('tooth-11')); + expect(pushState.mock.calls.map(call => call[2])).toEqual(['/tooth/36/', '/tooth/11/']); + expect(replaceState).not.toHaveBeenCalled(); + url = new URL('https://example.org/tooth/36/'); + events.dispatchEvent(new Event('popstate')); + await Promise.resolve(); + expect(getState().selectedId).toBe('tooth-36'); + expect(pushState).toHaveBeenCalledTimes(2); + }); + + it('commits selection and dissection as one navigation and ignores an obsolete completion', async () => { + stop = startRouter(engine, registry); + let finish!: () => void; + const previous = navigate(() => new Promise(resolve => { finish = resolve; })); + await navigate(() => { actions.select('tooth-11'); actions.enterDissect(11); }); + finish(); + await previous; + expect(pushState.mock.calls.map(call => call[2])).toEqual(['/tooth/11/dissect']); + }); +}); + afterEach(() => { stop?.(); stop = undefined; diff --git a/src/app/router.ts b/src/app/router.ts index a271f3a..7e09d17 100644 --- a/src/app/router.ts +++ b/src/app/router.ts @@ -70,8 +70,30 @@ export function pathFor(id: string | null, dissectFdi: number | null, registry: export function startRouter(engine: Engine, registry: Registry): () => void { let applying = false; + let navigating = false; + let revision = 0; + + const runNavigation = async (command: NavigationCommand) => { + const push = !getState().guideOpen; + const request = ++revision; + applying = false; + navigating = true; + try { await command(); } + finally { + if (request === revision) { + navigating = false; + const s = getState(); + const next = s.creditsOpen ? `${HASH ? '' : BASE}/${creditsPath(s.lang)}` : pathFor(s.selectedId, s.dissectFdi, registry); + if (next !== currentPath()) writeUrl(next, push); + } + } + }; + navigationHandler = runNavigation; const apply = async (path: string) => { + const request = ++revision; + navigating = false; + engine.cancelSelection(); const r = parsePath(path, registry); applying = true; try { @@ -92,7 +114,7 @@ export function startRouter(engine: Engine, registry: Registry): () => void { await engine.exploreTooth(s.tooth.fdi); } else await engine.selectFromUI(r.id, { focus: true }); } finally { - applying = false; + if (request === revision) applying = false; } }; @@ -102,7 +124,7 @@ export function startRouter(engine: Engine, registry: Registry): () => void { syncTitle(getState().selectedId); const unsub = store.subscribe((s, p) => { if (s.selectedId !== p.selectedId || s.lang !== p.lang) syncTitle(s.selectedId); - if (applying) return; + if (applying || navigating) return; if (s.creditsOpen) { if (!p.creditsOpen || s.lang !== p.lang) writeUrl(`${HASH ? '' : BASE}/${creditsPath(s.lang)}`, !p.creditsOpen); return; @@ -120,19 +142,19 @@ export function startRouter(engine: Engine, registry: Registry): () => void { if (HASH) window.addEventListener('hashchange', onPop); void apply(currentPath()); return () => { + ++revision; + if (navigationHandler === runNavigation) navigationHandler = undefined; unsub(); window.removeEventListener('popstate', onPop); window.removeEventListener('hashchange', onPop); }; } -/** Explicit navigation (search, tree): pushes a history entry. */ -export function pushPath(path: string) { - if (path !== currentPath()) writeUrl(path, true); -} +type NavigationCommand = () => void | Promise; +let navigationHandler: ((command: NavigationCommand) => Promise) | undefined; -/** Push a history entry for the current selection / dissection. */ -export function pushCurrentPath(registry: Registry) { - const { selectedId, dissectFdi } = getState(); - pushPath(pathFor(selectedId, dissectFdi, registry)); +/** One explicit user action creates one history entry, after the scene commits. */ +export async function navigate(command: NavigationCommand) { + if (navigationHandler) await navigationHandler(command); + else await command(); } diff --git a/src/engine/Engine.ts b/src/engine/Engine.ts index 2f7e791..0036933 100644 --- a/src/engine/Engine.ts +++ b/src/engine/Engine.ts @@ -34,6 +34,7 @@ import { renderPixelRatio } from './renderQuality'; import { resolveContent } from '../content/content'; import { SINUS_NOTE } from '../i18n/study'; import { dentitionFrame, skullOverviewFrame } from './framing'; +import { navigate } from '../app/router'; interface MeshEntry { key: string; @@ -240,7 +241,7 @@ export class Engine { this.startView(0); this.labels = new LabelLayer(this.overlay); -this.labels.onClick = (id) => { void this.selectFromUI(id, { focus: false }); }; + this.labels.onClick = (id) => { void navigate(() => this.selectFromUI(id, { focus: false })); }; this.labels.onHover = (id, rect) => { actions.hover(id); if (id && rect) { @@ -285,6 +286,7 @@ this.labels.onClick = (id) => { void this.selectFromUI(id, { focus: false }); }; /* ============================================================== loading */ async loadAll() { + setState({ error: undefined }); try { for (const st of STAGES) { actions.setLoading(st.id, 0); @@ -297,7 +299,7 @@ this.labels.onClick = (id) => { void this.selectFromUI(id, { focus: false }); }; } // idle prefetch of the detailed exemplar tooth const idle = (window as unknown as { requestIdleCallback?: (cb: () => void) => void }).requestIdleCallback ?? ((cb: () => void) => setTimeout(cb, 600)); - idle(() => void this.ensureTooth(EXEMPLAR_TOOTH)); + idle(() => { if (!this.disposed) void this.ensureTooth(EXEMPLAR_TOOTH).catch(() => {}); }); } catch (e) { console.error(e); setState({ error: 'load' }); // shown translated by the loading card @@ -311,9 +313,13 @@ this.labels.onClick = (id) => { void this.selectFromUI(id, { focus: false }); }; const asset = this.registry.get(`tooth-${fdi}`)?.tooth?.asset; if (!asset) return Promise.resolve(); const p = this.loader.load(asset).then((geos) => { + if (this.disposed) return; this.addGeometries(geos); this.loadedTeeth.add(fdi); this.refreshAll(); + }).catch((error: unknown) => { + this.toothLoads.delete(fdi); + throw error; }); this.toothLoads.set(fdi, p); return p; @@ -492,8 +498,8 @@ this.labels.onClick = (id) => { void this.selectFromUI(id, { focus: false }); }; if (s.selectedId !== p.selectedId || s.hoveredId !== p.hoveredId || s.dissectFdi !== p.dissectFdi) this.refreshHighlight(); if (visChanged || s.lang !== p.lang || s.numbering !== p.numbering) this.pointerDirty = true; if (s.clip !== p.clip || s.dissectFdi !== p.dissectFdi) this.refreshClip(); - if (s.clip.enabled && !p.clip.enabled && s.dissectFdi === null) void this.ensureAllTeeth(); - if (s.dissectFdi !== p.dissectFdi && s.dissectFdi !== null) void this.ensureTooth(s.dissectFdi); + if (s.clip.enabled && !p.clip.enabled && s.dissectFdi === null) void this.ensureAllTeeth().catch(() => setState({ error: 'load' })); + if (s.dissectFdi !== p.dissectFdi && s.dissectFdi !== null) void this.ensureTooth(s.dissectFdi).catch(() => {}); if (s.autoRotate !== p.autoRotate) this.rig.controls.autoRotate = s.autoRotate; if (s.theme !== p.theme) this.applyTheme(s.theme); if (s.orbitMode !== p.orbitMode) this.rig.setMode(s.orbitMode); @@ -883,8 +889,8 @@ this.labels.onClick = (id) => { void this.selectFromUI(id, { focus: false }); }; if (moved > 6 || performance.now() - d.t > 600) return; this.setPointer(ev); const hit = this.pick(); - if (hit) void this.selectFromUI(hit, { focus: false, reveal: false }); - else actions.select(null); + if (hit) void navigate(() => this.selectFromUI(hit, { focus: false, reveal: false })); + else void navigate(() => actions.select(null)); }); dom.addEventListener('dblclick', (ev) => { this.setPointer(ev); @@ -1007,15 +1013,18 @@ this.labels.onClick = (id) => { void this.selectFromUI(id, { focus: false }); }; async selectFromUI(id: string, opts: { focus?: boolean; reveal?: boolean } = {}) { const s = this.registry.get(id); if (!s) return; + if (!await this.prepareSelection(id, 'select', s.toothFdi)) return; if (!getState().developmentStage && this.developmentScene.active) { this.developmentScene.finishTransition(); this.refreshVisibility(); } if (id.startsWith('development-')) { actions.setDevelopmentStage(getState().developmentStage ?? 'incisor-transition'); + this.cancelSelection(); this.setView('three-quarter'); return; } else if (getState().developmentStage) actions.setDevelopmentStage(null); const { focus = true, reveal = true } = opts; const fdi = s.toothFdi; const isToothPart = fdi !== undefined && s.id !== `tooth-${fdi}`; + if (!isToothPart && getState().dissectFdi !== null) actions.exitDissect(); if (reveal) setState(revealPatch(this.registry, id, getState())); if (isToothPart) { const st = getState(); @@ -1027,7 +1036,6 @@ this.labels.onClick = (id) => { void this.selectFromUI(id, { focus: false }); }; actions.setDissectLevel(levelShowing(id)); } else if (inTooth && !levelShows(st.dissectLevel, id)) actions.setDissectLevel(levelShowing(id)); } - if (fdi !== undefined) await this.ensureTooth(fdi); actions.select(id); if (focus) this.focus(id); } @@ -1070,14 +1078,44 @@ this.labels.onClick = (id) => { void this.selectFromUI(id, { focus: false }); }; /** Enter on the tooth's assembled pose, even while the mouth/board is moving back. */ async exploreTooth(fdi: number) { + if (!await this.prepareSelection(`tooth-${fdi}`, 'explore', fdi)) return; actions.enterDissect(fdi); - await this.ensureTooth(fdi); // Let the new control tray render and its viewport insets be measured first. await new Promise((resolve) => requestAnimationFrame(() => resolve())); if (this.disposed || getState().dissectFdi !== fdi) return; this.focus(`tooth-${fdi}`, { restPose: true }); } + /** A newer choice, route, reset or scene transition invalidates this request. */ + private async prepareSelection(id: string, kind: 'select' | 'explore', fdi?: number) { + const request = { id, kind, status: 'loading' as const }; + setState({ selectionRequest: request }); + try { + if (fdi !== undefined) await this.ensureTooth(fdi); + return !this.disposed && getState().selectionRequest === request; + } catch { + if (!this.disposed && getState().selectionRequest === request) setState({ selectionRequest: { ...request, status: 'error' } }); + return false; + } + } + + cancelSelection() { setState({ selectionRequest: null }); } + + async retrySelection() { + const request = getState().selectionRequest; + if (!request || request.status !== 'error') return; + if (request.kind === 'explore') await this.exploreTooth(this.registry.require(request.id).toothFdi!); + else await this.selectFromUI(request.id); + } + + async retryAssets() { + await this.loadAll(); + if (getState().clip.enabled && getState().dissectFdi === null) { + try { await this.ensureAllTeeth(); } + catch { setState({ error: 'load' }); } + } + } + focus(id: string, opts: { restPose?: boolean } = {}) { this.cancelArchPreparation?.(); const s = this.registry.get(id); diff --git a/src/engine/selection.test.ts b/src/engine/selection.test.ts new file mode 100644 index 0000000..d219e64 --- /dev/null +++ b/src/engine/selection.test.ts @@ -0,0 +1,74 @@ +import { readFileSync } from 'node:fs'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import { Registry } from '../anatomy/registry'; +import type { Manifest } from '../anatomy/types'; +import { actions, getState, initialState, setState } from '../state/store'; +import { Engine } from './Engine'; + +const registry = new Registry(JSON.parse(readFileSync('public/models/manifest.json', 'utf8')) as Manifest); + +function viewer() { + const load = vi.fn(() => Promise.resolve(new Map())); + const focus = vi.fn(); + const engine: Engine = Object.assign(Object.create(Engine.prototype) as Engine, { + registry, loader: { load }, toothLoads: new Map(), loadedTeeth: new Set(), + developmentScene: { active: false }, disposed: false, + addGeometries: vi.fn(), refreshAll: vi.fn(), focus, + }); + return { engine, load, focus }; +} + +beforeEach(() => setState({ ...initialState })); +afterEach(() => { vi.unstubAllGlobals(); actions.resetAll(); }); + +describe('selection loading', () => { + it('retries a failed tooth download without reloading the page', async () => { + const { engine, load, focus } = viewer(); + load.mockRejectedValueOnce(new Error('offline')); + await engine.selectFromUI('tooth-11'); + expect(getState()).toMatchObject({ selectedId: null, selectionRequest: { id: 'tooth-11', status: 'error' } }); + expect(focus).not.toHaveBeenCalled(); + await engine.retrySelection(); + expect(load).toHaveBeenCalledTimes(2); + expect(getState()).toMatchObject({ selectedId: 'tooth-11', selectionRequest: null }); + }); + + it('deduplicates concurrent loads but commits only the latest selection', async () => { + const { engine, load, focus } = viewer(); + let resolveFirst!: () => void; + load.mockImplementationOnce(() => new Promise(resolve => { resolveFirst = () => resolve(new Map()); })); + const first = engine.selectFromUI('tooth-11'); + await engine.selectFromUI('tooth-36'); + resolveFirst(); + await first; + expect(getState().selectedId).toBe('tooth-36'); + expect(focus.mock.calls).toEqual([['tooth-36']]); + await engine.ensureTooth(11); + expect(load).toHaveBeenCalledTimes(2); + }); + + it.each(['reset', 'route', 'development'] as const)('does not revive selection after %s while downloading', async choice => { + const { engine, load, focus } = viewer(); + let finish!: () => void; + load.mockImplementationOnce(() => new Promise(resolve => { finish = () => resolve(new Map()); })); + const selecting = engine.selectFromUI('tooth-11'); + if (choice === 'reset') actions.resetAll(); + else if (choice === 'route') engine.cancelSelection(); + else actions.setDevelopmentStage('primary'); + finish(); + await selecting; + expect(getState().selectedId).toBeNull(); + expect(focus).not.toHaveBeenCalled(); + }); + + it('does not enter dissection when loading fails and can retry it', async () => { + const { engine, load, focus } = viewer(); + vi.stubGlobal('requestAnimationFrame', (callback: FrameRequestCallback) => { callback(0); return 1; }); + load.mockRejectedValueOnce(new Error('offline')); + await engine.exploreTooth(11); + expect(getState().dissectFdi).toBeNull(); + await engine.retrySelection(); + expect(getState()).toMatchObject({ dissectFdi: 11, selectionRequest: null }); + expect(focus).toHaveBeenCalledWith('tooth-11', { restPose: true }); + }); +}); diff --git a/src/i18n/interface.ts b/src/i18n/interface.ts new file mode 100644 index 0000000..7b890ff --- /dev/null +++ b/src/i18n/interface.ts @@ -0,0 +1,19 @@ +import { LANGS, type Lang } from './lang'; + +const text = { + retry: ['Retry', 'Försök igen', 'Erneut versuchen', 'Reintentar', 'Iterum conare'], + loadingSelection: ['Loading anatomy…', 'Laddar anatomi…', 'Anatomie wird geladen…', 'Cargando anatomía…', 'Anatomia oneratur…'], + selectionError: ['This anatomy could not be loaded. Please try again.', 'Anatomin kunde inte laddas. Försök igen.', 'Diese Anatomie konnte nicht geladen werden. Bitte erneut versuchen.', 'No se pudo cargar esta anatomía. Inténtelo de nuevo.', 'Haec anatomia onerari non potuit. Iterum conare.'], + expandDetails: ['Expand details', 'Utöka detaljer', 'Details erweitern', 'Ampliar detalles', 'Singula amplifica'], + collapseDetails: ['Collapse details', 'Minska detaljer', 'Details verkleinern', 'Reducir detalles', 'Singula contrahe'], + toothCount: ['teeth', 'tänder', 'Zähne', 'dientes', 'dentes'], + meshCount: ['mesh parts', 'modelldelar', 'Modellteile', 'partes del modelo', 'partes formae'], + primaryDentition: ['Open primary dentition', 'Visa mjölktandsbett', 'Milchgebiss öffnen', 'Abrir dentición temporal', 'Dentitionem deciduam aperi'], + showAll: ['Show all', 'Visa alla', 'Alle anzeigen', 'Mostrar todo', 'Omnia ostende'], + showLess: ['Show fewer', 'Visa färre', 'Weniger anzeigen', 'Mostrar menos', 'Pauciora ostende'], +} satisfies Record; + +export function interfaceText(lang: Lang) { + const index = LANGS.indexOf(lang); + return Object.fromEntries(Object.entries(text).map(([key, values]) => [key, values[index]])) as Record; +} diff --git a/src/main.tsx b/src/main.tsx index f0a6a5f..43a6a00 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -29,6 +29,7 @@ async function boot() { root.render(

{t().fatalWebgl}

); return; } + root.render(
{t().preparing}
); const manifest = await loadManifest(); const registry = new Registry(manifest); const engine = new Engine(registry); diff --git a/src/state/sceneTransitions.ts b/src/state/sceneTransitions.ts new file mode 100644 index 0000000..70bab00 --- /dev/null +++ b/src/state/sceneTransitions.ts @@ -0,0 +1,23 @@ +import type { AppState } from './store'; + +/** Scene settings temporarily saved while the developmental scene is active. */ +export function adultSceneSnapshot(s: AppState) { + return { + categories: s.categories, hidden: s.hidden, ghosted: s.ghosted, + isolateId: s.isolateId, isolateContext: s.isolateContext, + explode: s.explode, explodePhase: s.explodePhase, clip: s.clip, + jawControls: s.jawControls, jawOpening: s.jawOpening, labels: s.labels, + studyView: s.studyView, vesselSide: s.vesselSide, vesselMode: s.vesselMode, + }; +} + +/** Shared reset when entering an adult study preset or a developmental stage. */ +export function clearSceneTools(s: AppState): Partial { + return { + selectedId: null, hoveredId: null, hidden: {}, ghosted: {}, + isolateId: null, isolateContext: false, passageIds: [], + jawControls: false, jawOpening: 0, jawPlaying: false, + explode: 0, explodePhase: 1, toothExplode: 0, + clip: { ...s.clip, enabled: false }, selectionRequest: null, + }; +} diff --git a/src/state/store.test.ts b/src/state/store.test.ts index dff3b52..65fd51f 100644 --- a/src/state/store.test.ts +++ b/src/state/store.test.ts @@ -25,3 +25,24 @@ describe('orbit mode inside a tooth', () => { expect(getState().orbitMode).toBe('free'); }); }); + +describe('scene transitions', () => { + beforeEach(() => actions.resetAll()); + + it('restores the adult study scene after development without reviving playback', () => { + actions.applyStudyPreset('vessels'); + actions.setVesselSide('left'); + const categories = getState().categories; + actions.setDevelopmentStage('primary'); + expect(getState()).toMatchObject({ studyView: null, jawPlaying: false, selectedId: null }); + actions.setDevelopmentStage('early-mixed'); + actions.setDevelopmentStage(null); + expect(getState()).toMatchObject({ studyView: 'vessels', vesselSide: 'left', categories, developmentPlaying: false }); + }); + + it('clears pending selection and incompatible tools on a study transition', () => { + setState({ selectionRequest: { id: 'tooth-11', kind: 'select', status: 'loading' }, jawPlaying: true, explode: 1, hidden: { maxilla: true }, clip: { enabled: true, axis: 'sagittal', offset: 0, flip: false } }); + actions.applyStudyPreset('dentition'); + expect(getState()).toMatchObject({ selectionRequest: null, jawPlaying: false, explode: 0, hidden: {}, clip: { enabled: false } }); + }); +}); diff --git a/src/state/store.ts b/src/state/store.ts index 84af538..84a764f 100644 --- a/src/state/store.ts +++ b/src/state/store.ts @@ -10,6 +10,7 @@ import type { CategoryId, NumberingSystem } from '../anatomy/types'; import { DEFAULT_LANG, isLang, type Lang } from '../i18n/lang'; import type { NerveSide, NerveView } from '../anatomy/nerveViews'; import { DEVELOPMENT_STAGES, type DevelopmentStageId } from '../anatomy/development'; +import { adultSceneSnapshot, clearSceneTools } from './sceneTransitions'; export type ClipAxis = 'sagittal' | 'coronal' | 'axial' | 'view'; export type ModeId = 'explore' | 'learn' | 'quiz' | 'compare'; @@ -57,6 +58,7 @@ export interface AppState { ready: boolean; loading: Record; // stage → 0…1 error?: string; + selectionRequest: { id: string; kind: 'select' | 'explore'; status: 'loading' | 'error' } | null; selectedId: string | null; hoveredId: string | null; @@ -109,6 +111,7 @@ export const initialState: AppState = { nerveView: 'dental', nerveSide: 'both', passageIds: [], jawControls: false, jawSide: 'right', jawOpening: 0, jawPlaying: false, ready: false, + selectionRequest: null, loading: {}, selectedId: null, hoveredId: null, @@ -179,10 +182,8 @@ export const actions = { if (getState().developmentStage) actions.setDevelopmentStage(null); const preset = PRESETS.find(p => p.id === id); if (!preset) return; - setState({ categories: { ...getState().categories, ...preset.state }, studyView: id === 'vessels' || id === 'sinuses' ? id : null, - vesselSide: 'both', vesselMode: 'both', selectedId: null, hoveredId: null, isolateId: null, isolateContext: false, - hidden: {}, ghosted: {}, passageIds: [], labels: id === 'vessels' || id === 'sinuses' ? true : getState().labels, - jawControls: false, jawPlaying: false, jawOpening: 0, explode: 0, explodePhase: 1, toothExplode: 0, clip: { ...getState().clip, enabled: false } }); + setState(s => ({ ...clearSceneTools(s), categories: { ...s.categories, ...preset.state }, studyView: id === 'vessels' || id === 'sinuses' ? id : null, + vesselSide: 'both', vesselMode: 'both', labels: id === 'vessels' || id === 'sinuses' ? true : s.labels })); }, setVesselSide(vesselSide: AppState['vesselSide']) { setState({ vesselSide, selectedId: null, hoveredId: null, isolateId: null, isolateContext: false }); }, setVesselMode(vesselMode: AppState['vesselMode']) { setState({ vesselMode, selectedId: null, hoveredId: null, isolateId: null, isolateContext: false }); }, @@ -196,11 +197,11 @@ export const actions = { if (getState().dissectFdi !== null) actions.exitDissect(); if (developmentStage && !previous.developmentStage) { const s = getState(); - adultSceneBeforeDevelopment = { categories: s.categories, hidden: s.hidden, ghosted: s.ghosted, isolateId: s.isolateId, isolateContext: s.isolateContext, explode: s.explode, explodePhase: s.explodePhase, clip: s.clip, jawControls: s.jawControls, jawOpening: s.jawOpening, labels: s.labels }; + adultSceneBeforeDevelopment = adultSceneSnapshot(s); } const restore = developmentStage ? {} : adultSceneBeforeDevelopment ?? {}; if (!developmentStage) adultSceneBeforeDevelopment = null; - setState((s) => ({ developmentStage, developmentPlaying: playing && developmentStage !== null, selectedId: null, hoveredId: null, hidden: {}, ghosted: {}, isolateId: null, isolateContext: false, passageIds: [], jawControls: false, jawOpening: 0, jawPlaying: false, explode: 0, explodePhase: 1, clip: { ...s.clip, enabled: false }, categories: { ...s.categories, 'primary-teeth': 'on', 'permanent-teeth': 'on', 'alveolar-bone': 'on' }, ...restore })); + setState((s) => ({ ...clearSceneTools(s), studyView: null, developmentStage, developmentPlaying: playing && developmentStage !== null, categories: { ...s.categories, 'primary-teeth': 'on', 'permanent-teeth': 'on', 'alveolar-bone': 'on' }, ...restore })); }, playDevelopment() { actions.setDevelopmentStage(getState().developmentStage ?? DEVELOPMENT_STAGES[0].id, true); @@ -244,7 +245,7 @@ export const actions = { persist(PREF.orbit, initialState.orbitMode); }, select(id: string | null) { - setState((s) => ({ selectedId: id, mobileSheet: id ? 'detail' : 'none', passageIds: id && s.passageIds.includes(id) ? s.passageIds : [] })); + setState((s) => ({ selectedId: id, selectionRequest: null, mobileSheet: id ? 'detail' : 'none', passageIds: id && s.passageIds.includes(id) ? s.passageIds : [] })); }, hover(id: string | null) { if (getState().hoveredId !== id) setState({ hoveredId: id }); @@ -334,6 +335,7 @@ export const actions = { persist(PREF.orbit, m); }, enterDissect(fdi: number) { + setState({ selectionRequest: null }); if (getState().developmentStage) actions.setDevelopmentStage(null); setState(s => ({ developmentStage: null, studyView: null, jawOpening: 0, jawPlaying: false, jawControls: false, passageIds: [], categories: { ...s.categories, 'permanent-teeth': 'on', enamel: 'on', dentin: 'on', cementum: 'on', 'dental-pulp': 'on', 'root-canals': 'on', 'periodontal-ligament': 'on' } })); // Inside a tooth the free orbit is the useful one (pan and focus on a canal or a root); @@ -342,6 +344,7 @@ export const actions = { setState({ dissectFdi: fdi, dissectLevel: 0, toothExplode: 0, isolateId: `tooth-${fdi}`, isolateContext: true, explode: 0, explodePhase: 1, orbitMode: 'free' }); }, exitDissect() { + setState({ selectionRequest: null }); const restore = orbitBeforeTooth; orbitBeforeTooth = null; if (restore) setState({ orbitMode: restore }); diff --git a/src/styles/app.css b/src/styles/app.css index 75524ca..57fa64f 100644 --- a/src/styles/app.css +++ b/src/styles/app.css @@ -1483,6 +1483,9 @@ button.ds-layer-name:hover { padding: 16px 18px; pointer-events: none; } +.ds-loading[role='alert'] { + pointer-events: auto; +} .ds-loading.is-compact { top: auto; bottom: 232px; @@ -1548,13 +1551,21 @@ button.ds-layer-name:hover { position: fixed; inset: 0; z-index: 20; - display: flex; + display: none; + margin: 0; + width: 100vw; + height: 100dvh; + max-width: none; + max-height: none; + border: 0; justify-content: center; align-items: flex-start; padding: 11vh 16px 16px; - background: var(--scrim); + background: transparent; animation: ds-fade 160ms var(--ease); } +.ds-search-layer[open] { display: flex; } +.ds-search-layer::backdrop { background: var(--scrim); } @keyframes ds-fade { from { opacity: 0; @@ -2313,7 +2324,7 @@ button.ds-layer-name:hover { } .ds-evidence a { color: var(--accent); } .ds-segmented--fill { flex-wrap: wrap; } -.ds-layers > .ds-segmented--fill button { flex: 1 0 auto; white-space: nowrap; } +.ds-layer-scroll > .ds-segmented--fill button { flex: 1 0 auto; white-space: nowrap; } .ds-jaw-controls { padding: 12px 16px; width: 560px; @@ -2487,8 +2498,8 @@ button.ds-layer-name:hover { .ds-view-picker-btn { padding-inline: 8px; } .ds-development-heading { flex-wrap: wrap; } .ds-development-heading strong { text-align: left; } - .ds-layers > .ds-segmented--fill { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); } - .ds-layers > .ds-segmented--fill button { white-space: normal; } + .ds-layer-scroll > .ds-segmented--fill { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); } + .ds-layer-scroll > .ds-segmented--fill button { white-space: normal; } } /* Phone proportions: reserve most of the screen for anatomy. Panels scroll @@ -2661,3 +2672,31 @@ button.ds-layer-name:hover { .ds-tour-circle path { animation: none !important; stroke-dashoffset: 0; } .ds-tour-cursor.is-clicking svg, .is-clicking .ds-tour-click { animation: none !important; } } + +/* One scroll owner keeps layers reachable even with expanded study controls. */ +.ds-layer-scroll { flex: 1; min-height: 0; overflow-y: auto; overflow-x: hidden; overscroll-behavior: contain; scrollbar-width: thin; } +.ds-layer-scroll .ds-layer-list { flex: none; overflow: visible; margin: 0; padding: 0; } +.ds-layers > .ds-tabs, .ds-layers > .ds-panel-footer { flex-shrink: 0; } +.ds-nerve-controls summary { cursor: pointer; padding-block: 8px; } +.ds-nerve-controls[open] summary { margin-bottom: 6px; } +.ds-primary-dentition { text-align: left; color: var(--accent); } +.ds-detail-expand { display: none; } +.ds-frequency summary { cursor: pointer; padding-block: 8px; } + +@media (max-width: 1023px), (pointer: coarse) and (max-width: 1366px) { + .ds-layers .ds-layer-scroll { flex: none; overflow: visible; } + .ds-detail.is-mobile-open { display: flex; flex-direction: column; overflow: hidden; height: min(42dvh, 340px); max-height: min(42dvh, 340px); } + .ds-detail.is-mobile-open.is-expanded { height: min(72dvh, calc(var(--visual-height, 100dvh) - 160px)); max-height: min(72dvh, calc(var(--visual-height, 100dvh) - 160px)); } + .ds-detail-expand { display: block; flex-shrink: 0; min-height: 32px; font-size: 11px; color: var(--muted); border-bottom: 1px solid var(--line); } + .ds-detail.is-mobile-open .ds-detail-body { flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain; font-size: 13px; } + .ds-detail.is-mobile-open .ds-detail-actions { flex-shrink: 0; background: var(--panel-solid); border-top: 1px solid var(--line); } + .ds-detail.is-mobile-open .ds-detail-summary { font-size: 13px; } +} +@media (pointer: coarse) { + .ds-icon-btn, .ds-dot-toggle, .ds-ghost-btn, .ds-tb-btn, .ds-play, .ds-layer-name, .ds-chip--button, .ds-secondary, .ds-primary, .ds-development-stops button, .ds-development-play, .ds-mobile-bar button, .ds-detail-expand { min-height: 44px; } + .ds-icon-btn, .ds-dot-toggle, .ds-ghost-btn { min-width: 44px; } + .ds-layer-row { height: auto; min-height: 44px; } +} +@media (orientation: landscape) and (max-height: 600px) { + .ds-detail.is-mobile-open, .ds-detail.is-mobile-open.is-expanded { height: auto; max-height: none; } +} diff --git a/src/ui/App.tsx b/src/ui/App.tsx index 9175ca6..fbe90a5 100644 --- a/src/ui/App.tsx +++ b/src/ui/App.tsx @@ -1,5 +1,5 @@ import { useEffect, useRef } from 'react'; -import { pushCurrentPath, startRouter } from '../app/router'; +import { navigate, startRouter } from '../app/router'; import { useT } from '../i18n'; import { actions, useApp } from '../state/store'; import { useServices } from './context'; @@ -11,7 +11,7 @@ import { AboutDialog, Footer, LoadingCard } from './Overlays'; import { SearchPanel } from './SearchPanel'; import { Identity, TopActions } from './TopBar'; import { useKeyboard } from './useKeyboard'; -import { COMPACT_LAYOUT } from '../app/viewport'; +import { useViewportInsets } from './useViewportInsets'; import { GuidedTour } from './GuidedTour'; import { CreditsDialog } from './CreditsDialog'; @@ -22,14 +22,7 @@ export function App() { const selected = useApp((s) => !!s.selectedId); const dissect = useApp((s) => s.dissectFdi !== null); const sheet = useApp((s) => s.mobileSheet); - const laidOut = useApp((s) => s.explodePhase === 2); - const detailHidden = useApp((s) => s.collapsed.detail); - const dockHidden = useApp((s) => s.collapsed.dock); - const layersHidden = useApp((s) => s.collapsed.layers); - const jawControls = useApp((s) => s.jawControls); - const developmentStage = useApp((s) => s.developmentStage); const lang = useApp((s) => s.lang); - const guideOpen = useApp((s) => s.guideOpen); const m = useT(); useEffect(() => { @@ -52,71 +45,7 @@ export function App() { useKeyboard(engine); - // keep the focused anatomy clear of the panels that cover the canvas - useEffect(() => { - const ui = document.querySelector('.ds-ui'); - const compact = window.matchMedia(COMPACT_LAYOUT); - let frame = 0; - const visibleRect = (selector: string) => { - const element = ui?.querySelector(selector); - if (!element || (!compact.matches && element.classList.contains('is-collapsed'))) return null; - const rect = element.getBoundingClientRect(); - return rect.width && rect.height ? rect : null; - }; - const update = () => { - frame = 0; - if (!ui) return; - const bounds = ui.getBoundingClientRect(); - document.documentElement.style.setProperty('--visual-height', `${window.visualViewport?.height ?? bounds.height}px`); - document.documentElement.style.setProperty('--visual-top', `${window.visualViewport?.offsetTop ?? 0}px`); - const toolbar = visibleRect('.ds-dock'); - const bar = visibleRect('.ds-mobile-bar'); - const panel = compact.matches ? visibleRect('.ds-layers.is-mobile-open, .ds-detail.is-mobile-open') : visibleRect('.ds-detail'); - const sideSheet = compact.matches && window.matchMedia('(orientation: landscape) and (max-height: 600px)').matches; - const bottoms = [toolbar, bar, ...(!sideSheet && compact.matches ? [panel] : [])].filter((r): r is DOMRect => !!r); - const bottom = Math.max(0, ...bottoms.map((r) => bounds.bottom - r.top + 12)); - const side = sideSheet ? panel ?? (sheet === 'tools' ? toolbar : null) : !compact.matches ? panel : null; - let right = side ? bounds.right - side.left + 12 : 0; - const layers = !compact.matches && dissect ? visibleRect('.ds-layers') : null; - let left = layers ? layers.right - bounds.left + 12 : 0; - // Landscape tool sheets occupy the side, not the lower half of the model. - const clearance = sideSheet && sheet === 'tools' ? (bar ? bounds.bottom - bar.top + 12 : 0) : bottom; - ui.style.setProperty('--dock-clearance', `${Math.max(64, bottom + 12)}px`); - const tour = document.querySelector('.ds-tour-card'); - const tourBounds = tour?.getBoundingClientRect(); - let top = 0; - let tourBottom = clearance; - if (tour && tourBounds) { - if (!compact.matches) { - if (tour.dataset.position === 'left') left = Math.max(left, tourBounds.right + 12); - else right = Math.max(right, bounds.right - tourBounds.left + 12); - } else if (sideSheet) left = Math.max(left, tourBounds.right + 12); - else if (tour.dataset.position === 'bottom') tourBottom = Math.max(tourBottom, bounds.bottom - tourBounds.top + 12); - else top = tourBounds.bottom + 12; - } - engine.setInsets(Math.min(right, bounds.width - 100), Math.min(tourBottom, bounds.height - 100), Math.min(left, bounds.width - 100), Math.max(0, Math.min(top, bounds.height - tourBottom - 80))); - }; - const schedule = () => { if (!frame) frame = requestAnimationFrame(update); }; - update(); - const observer = new ResizeObserver(schedule); - if (ui) observer.observe(ui); - for (const element of ui?.querySelectorAll('.ds-dock, .ds-layers, .ds-detail, .ds-mobile-bar') ?? []) observer.observe(element); - const tour = document.querySelector('.ds-tour-card'); - if (tour) observer.observe(tour); - const tourPosition = new MutationObserver(schedule); - if (tour) tourPosition.observe(tour, { attributes: true, attributeFilter: ['data-position'] }); - compact.addEventListener('change', schedule); - window.addEventListener('resize', schedule); - window.visualViewport?.addEventListener('resize', schedule); - return () => { - cancelAnimationFrame(frame); - observer.disconnect(); - tourPosition.disconnect(); - compact.removeEventListener('change', schedule); - window.removeEventListener('resize', schedule); - window.visualViewport?.removeEventListener('resize', schedule); - }; - }, [engine, selected, dissect, laidOut, sheet, detailHidden, dockHidden, layersHidden, jawControls, developmentStage, lang, guideOpen]); + useViewportInsets(engine); return (
@@ -156,12 +85,10 @@ export function App() { /** Bottom-left: back to the start view with every setting at its default. */ function ResetButton() { - const { engine, registry } = useServices(); + const { engine } = useServices(); const m = useT(); const reset = () => { - actions.resetAll(); - engine.resetToStart(); - pushCurrentPath(registry); + void navigate(() => { actions.resetAll(); engine.resetToStart(); }); }; return (