feat: web - view transitions from timeline to viewer, next/prev
feat: web - swipe feedback - show image while swiping/dragging left/right
feat: web - swipe feedback - show image while swiping/dragging left/right
tweak animation - no crossfade by default
refactor(web): replace ViewTransitionManager event-driven API with phase-based callbacks
Change-Id: Ia52f300a08a725062acc19574b10593e6a6a6964
fix(web): graceful degradation for ViewTransitionManager, rename AssetViewerFree to AssetViewerReady, extract onClick handler
Change-Id: I4ad85d43e9922742910748a6487cd41f6a6a6964
Change-Id: Ie9c55914b0e87635e0d9e5889ca0ec3d6a6a6964
Change-Id: I0a37b417ee4c247dcc93d442c976eede6a6a6964
* feat(web): adaptive progressive image loading for photo viewer
Replace ImageManager with a new AdaptiveImageLoader that progressively
loads images through quality tiers (thumbnail → preview → original).
New components and utilities:
- AdaptiveImage: layered image renderer with thumbhash, thumbnail,
preview, and original layers with visibility managed by load state
- AdaptiveImageLoader: state machine driving the quality progression
with per-quality callbacks and error handling
- ImageLayer/Image: low-level image elements with load/error lifecycle
- PreloadManager: preloads adjacent assets for instant navigation
- AlphaBackground/DelayedLoadingSpinner: loading state UI
Zoom is handled via a derived CSS transform applied to the content
wrapper in AdaptiveImage, with the zoom library (zoomTarget: null)
only tracking state without manipulating the DOM directly.
Also adds scaleToCover to container-utils and getAssetUrls to utils.
* fix: don't partially render images in firefox
* add passive loading indicator to asset-viewer
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
Add `name` to all vitest configs matching CI job buckets (server:unit,
server:medium, cli:unit, web:unit, e2e:server, e2e:maintenance) so they
appear as filterable @tags in the Vitest VSCode extension.
Fix `root` in server vitest configs to use an absolute path derived from
`import.meta.url` instead of `'./'`, which resolved relative to the config
file directory (`server/test/`) rather than `server/`, causing test
discovery to fail in the Vitest VSCode extension.
* feat: run maintance tests in isolation, share containers between all serial test suites
* refactor: organize files
---------
Co-authored-by: Jason Rasmussen <jason@rasm.me>