vinterliste/frontend
Ole-Morten Duesund 834abfdfb0 fix(spa): route internal links client-side so the DEK survives
Plain <a href="/..."> links to in-app routes were causing full page
reloads. The DEK lives only in memory (session.svelte.ts), so every
reload drops it and private rows can't decrypt until the user signs
in again. Earlier fix (03ac99e) made the post-reload state usable;
this one removes the reload in the first place.

New helper lib/navigate.ts:
  - navigate(path): pushState + dispatch synthetic popstate so the
    existing window popstate listener in App.svelte re-parses and
    applies the route. SPA state (DEK, decrypted activities, scroll
    position) is preserved.
  - onSpaLink(event, path): swallow plain left-click only. Modified
    clicks (Cmd/Ctrl/Shift/Alt, middle-click, right-click) fall
    through to the browser so "open in new tab", copy-link-address,
    and screen-reader behaviour all still work.

Applied to the five internal anchors in ActivityRow.svelte:
permalink title (private + non-private), tag chips (private +
non-private), and the owner attribution link to /<user>/liste.

Verified in the browser: clicking a permalink now preserves a
window.__spaProbe marker; back-button likewise stays in-app.
2026-05-25 18:37:39 +02:00
..
public Design refresh: warmer palette, softer cards, badge icons, hero treatment 2026-05-25 15:47:39 +02:00
src fix(spa): route internal links client-side so the DEK survives 2026-05-25 18:37:39 +02:00
index.html Design refresh: warmer palette, softer cards, badge icons, hero treatment 2026-05-25 15:47:39 +02:00
svelte.config.js Scaffold Vinterliste — end-to-end encrypted winter activity list 2026-05-25 12:27:14 +02:00
tsconfig.json Public landing, owner-list links, owner-conditional semi, PWA + mobile 2026-05-25 12:57:59 +02:00
vite.config.ts Scaffold Vinterliste — end-to-end encrypted winter activity list 2026-05-25 12:27:14 +02:00