* feat(mobile): open in browser
* chore: open in browser instead of webview
* chore: allow archived asset
* fix: moved openinbrowser above unstack
* feat: deeplink into favorites, trash & archived
* fix: use remoteId (for tests to succeed)
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
- Precise font sizing using canvas measureText instead of character-count heuristic
- Fix overlay repositioning on viewport resize by computing metrics from reactive state instead of DOM reads
- Fix animation delay on resize by using transition-colors instead of transition-all
- Add keyboard accessibility: OCR boxes are focusable via Tab with reading-order sort
- Show text on focus (same styling as hover) with proper ARIA attributes
Final step on #22833
PReq #22833 is about adding support for SMTP-over-TLS rather than just STARTTLS when sending emails. That PReq adds almost everything; it just forgot to actually pass the flag to Nodemailer at the end.
This adds that last line of code and makes it work correctly (for me, anyways!).
Co-authored-by: Nathaniel <I@nathaniel.land>
* use cookiejar
* cookie duping hook
* remove old pref
* handle network switching on logout
* remove bootstrapCookies
* dead code
* fix cast
* use constants
* use new event name
* update api
* Add support for showing animated images in AssetViewer with AnimatedImageStreamCompleter
* Add GIF overlay to thumbnail tile for animated assets
* formatting
* require isAnimated parameter in image providers for better asset handling
* feat: refactor AnimatedImageStreamCompleter to use streams for codec loading and initial image handling
* formatting
* add isAnimatedImage property to BaseAsset
* remove ApiService.getRequestHeaders() usage
* 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>
* feat(mobile): use material design 3 slider
The new slider is easier to use, and looks more modern.
* chore: add shadow to button and text for better visibility
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
The numbers in the backup page are not monospace, and so changes cause
the layout to shift. Using tabular figures (monospace) will prevent
that.
Refs: #25021
Videos have recently been changed to support zooming, but this can make
the controls in the centre of the screen unergonomic as they will either
stay in the centre when dismissing, or stick to the video when zooming.
Neither is great. We should align the behaviour with other apps which
has the play/pause toggle at the bottom of the screen with the seeker
bar instead.
Co-authored-by: Alex <alex.tran1502@gmail.com>