When a concurrent caller awaits `this.complete` inside `execute()` and
`cancel()` is called, the promise rejects with `undefined` outside of any
try/catch, causing "Uncaught (in promise) undefined" console spam during
rapid timeline scrolling.
- Wrap the `await this.complete` path in try/catch, returning 'CANCELED'
- Guard the `finally` block to only null `cancelToken` if it still belongs
to this call, preventing a race condition with `cancel()` to `init()`
Change-Id: I65764dd664eb408433fc6e5fc2be4df56a6a6964
* Fix#26502: Fix timestamp handling for database backup in Web UI
Frontend parsed backup timestamps as UTC, but they were in the
server's local timezone, causing wrong relative times.
Add `timezone` field to DatabaseBackupDto to expose server timezone.
Update frontend to parse timestamps using this timezone.
Convert timestamps to user's local timezone before rendering.
Fallback to browser timezone if server timezone is missing.
Ensures correct relative time display in Web UI.
* fix: regenerate open-api types and remove custom backup type
- Ran `make open-api` to update types based on backend changes
- Removed custom BackupWithTimezone type in MaintenanceBackupsList
- Updated timezone props to use the newly generated native type
* fix: simplify timezone handling for database backups
- Updated DatabaseBackupDto to make timezone a required property
- Removed manual DateTime.local().zoneName fallbacks
- Cleaned up type casts after regenerating OpenAPI types
* fix: Add missing newline at end of spec file
Rename MonthGroup class to TimelineMonth to better convey that it represents a single month within the timeline. Updates the file, class, and all references across 16 files.
Change-Id: Id50fd6d4b7d0e431571b67c0f81c0e316a6a6964
Rename DayGroup class to TimelineDay to better convey that it represents
a single day within the timeline. Updates the file, class, and all
references across 13 files.
Change-Id: I9faef9bad73cd5b11f40daaf5eb140dd6a6a6964
- Dim non-hovered person thumbnails to 40% opacity when any face is active
- Add ring highlight on the active person's thumbnail
- Add focus-visible outline styling for keyboard navigation
- Apply same treatment to both detail panel people section and edit faces side panel
Change-Id: I4ac10fe4568b95f3e0e8d9104133180f6a6a6964
Co-authored-by: Alex <alex.tran1502@gmail.com>
- Add subtle drop shadow to the asset viewer nav bar for better visual
separation from the image behind it
- Add drop shadow to the OCR text recognition button in the lower right
- Prevent nav bar action buttons from shrinking to nothing by adding
*:shrink-0 to the flex container, with p-1/-m-1 to avoid clipping
focus outlines
Change-Id: I61cdc0ec66a65cde1c95b40c2c5428006a6a6964
When hovering over a detected face in the photo viewer, an SVG mask overlay
dims the rest of the image (40% black) while leaving the hovered face fully
visible. The overlay fades in/out smoothly via CSS opacity transition by
freezing the last highlighted box positions in state, preventing the overlay
from popping off instantly when the mouse leaves.
Change-Id: I07e2eb2b297820ec89812785fe7943846a6a6964