Commit Graph

3385 Commits (main)

Author SHA1 Message Date
Jason Rasmussen 29000461c2
fix: ignore errors deleting untitled album (#27020) 2026-03-19 12:55:43 -04:00
github-actions f413f5c692 chore: version v2.6.0 2026-03-18 20:37:39 +00:00
Jason Rasmussen cda4a2a5fc
fix: filter after searching by asset id (#26994)
* fix: filter after searching by asset id

* Update web/src/lib/modals/SearchFilterModal.svelte

Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>

---------

Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
2026-03-18 13:32:54 +00:00
Min Idzelis 88002cf7fe
fix(web): allow images to be downloaded again(long-press or right click) (#26992) 2026-03-18 12:40:36 +01:00
Andreas Heinz 694ea151f5
fix(web): escape handling for tagging and adding a face in asset viewer (#26870) 2026-03-18 12:39:25 +01:00
Jason Rasmussen 48e6e17829
feat: primary notifications (#26988) 2026-03-17 17:54:11 -04:00
Jason Rasmussen 0519833d75
refactor: prefer tv (#26993) 2026-03-17 17:53:48 -04:00
Michel Heusschen 9b0b2bfcf2
fix(web): jump to primary stacked asset from memory (#26978) 2026-03-17 06:39:39 -05:00
Preslav Penchev ac6938a629
fix(web): allow pasting PIN code from clipboard or password manager (#26944)
* fix(web): allow pasting PIN code from clipboard or password manager

The keydown handler was blocking Ctrl+V/Cmd+V since it called
preventDefault() on all non-numeric keys. Also adds an onpaste
handler to distribute pasted digits across the individual inputs.

* refactor: handle paste in handleInput, remove maxlength

* cleanup + fix digit focus

---------

Co-authored-by: Preslav Penchev <preslav.penchev@acronis.com>
Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
2026-03-17 06:38:06 -05:00
Mees Frensel 9dafc8e8e9
fix(web): make link fit album card (#26958) 2026-03-16 19:17:55 +01:00
Michel Heusschen 4e44fb9cf7
fix(web): prevent search page error on missing album filter (#26948) 2026-03-16 19:15:20 +01:00
Min Idzelis 48fe111daa
feat(web): improve OCR overlay text fitting, reactivity, and accessibility (#26678)
- 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
2026-03-13 22:04:55 -05:00
rthrth-svg 2c6d4f3fe1
fix(web): copy yearMonth in MonthGroup to avoid shared object reference with asset (#26890)
Co-authored-by: Min Idzelis <min123@gmail.com>
2026-03-13 22:27:08 +01:00
Michel Heusschen c2a279e49e
fix(web): keep header fixed on individual shared links (#26892) 2026-03-13 09:40:04 -05:00
Michel Heusschen 754f072ef9
fix(web): disable drag and drop for internal items (#26897) 2026-03-13 09:37:51 -05:00
luis15pt c91d8745b4
fix: use correct original URL for 360 video panorama playback (#26831)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 21:27:44 +01:00
Jason Rasmussen 990aff441b
fix: add to shared link (#26886) 2026-03-12 16:10:55 -04:00
Michel Heusschen 3fd24e2083
fix(server): restrict individual shared link asset removal to owners (#26868)
* fix(server): restrict individual shared link asset removal to owners

* make open-api
2026-03-12 14:48:00 -04:00
Jason Rasmussen 6bb8f4fcc4
refactor: clean class (#26885) 2026-03-12 14:47:35 -04:00
Jason Rasmussen d4605b21d9
refactor: external links (#26880) 2026-03-12 14:55:33 +00:00
Jason Rasmussen 3bd37ebbfb
refactor: clean class (#26879) 2026-03-12 09:53:46 -05:00
Min Idzelis 5c3777ab46
fix(web): fix zoom touch event handling (#26866)
fix(web): fix zoom touch event handling and add clarifying comments

- Suppress Safari's synthetic dblclick on double-tap which conflicts with zoom-image's touchstart-based zoom
- Add comment explaining pointer-events-none on zoom transform wrapper
- Add comments for touchAction and overflow style overrides
2026-03-12 09:37:29 -05:00
Snowknight26 0ac3d6a83a
fix(web): face selection box position resetting on browser resize (#26766) 2026-03-11 19:38:08 +01:00
Mees Frensel 9996ee12d0
refactor(web): crop area tool (#26843) 2026-03-11 18:58:26 +01:00
Mees Frensel e45308b949
fix(web): exclude emoji from translation string (#26852) 2026-03-11 13:22:59 -04:00
renovate[bot] 0f2fe656db
fix(deps): update typescript-projects (#26812)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-11 16:40:41 +01:00
Min Idzelis 8764a1894b
feat: adaptive progressive image loading for photo viewer (#26636)
* 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>
2026-03-11 09:48:46 -05:00
Michel Heusschen 9fc6fbc373
fix(web): restore asset update events in asset viewer (#26845) 2026-03-11 08:46:29 -04:00
Andreas Heinz 1a4c5d73ac
feat(web): add shortcut "p" to open/close the face tag box (#26826) 2026-03-10 23:53:38 +01:00
Michel Heusschen 45eff1c663
fix(web): prevent unrelated assets from appearing in tag view (#26816) 2026-03-10 17:43:30 +01:00
Min Idzelis 8e50d25f45
feat(web): animate zoom toggle with cubicOut easing (#26731) 2026-03-10 10:42:02 -05:00
Michel Heusschen 8222781d1f
fix(web): correct tag rounding in search options (#26814) 2026-03-10 15:25:13 +00:00
Daniil Suvorov f2726606e0
fix(web): context menu overflow (#26760) 2026-03-09 19:47:54 +01:00
Andreas Heinz 0edbca24e4
fix(web): recalculate face bounding boxes (#26737)
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-03-09 18:44:47 +00:00
Snowknight26 4791d9c0c3
fix(web): show the correct cursor at crop bounds when editing an asset (#26748) 2026-03-09 19:39:01 +01:00
Michel Heusschen a47b232235
fix(web): refresh recent albums sidebar after album changes (#26757) 2026-03-09 17:11:32 +01:00
Min Idzelis 7a83baaf27
feat: responsive video duration in thumbnail (#26770) 2026-03-08 01:37:41 -06:00
Sergey Katsubo 4a384bca86
fix(server): opus handling as accepted audio codec in transcode policy (#26736)
* Fix opus handling as accepted audio codec in transcode policy

Fix the issue when opus is among accepted audio codecs in transcode policy
(which is default) but it still triggers transcoding because the codec name
from ffprobe (opus) does not match `libopus` literal in Immich.

Make a distinction between a codec name and encoder:
- codec name: switch to `opus` as the audio codec name. This matches what ffprobe
returns for a media file with opus audio.
- encoder: continue using the `libopus` encoder in ffmpeg.

* Add unit tests for accepted audio codecs and for libopus encoder

* Add db migration for ffmpeg.targetAudioCodec opus

* backward compatibility

* tweak

* noisy logs

* full mapping

* make check happy

* mark deprecated

* update api

* indexOf

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2026-03-07 13:08:42 -05:00
Snowknight26 6e9a425592
fix(web): asset viewer showing wrong viewer type when hovering on stack thumbnails (#26741) 2026-03-06 21:17:11 +01:00
Min Idzelis abfcffb423
feat(web): toggle zoom on double-click in photo viewer (#26732) 2026-03-05 21:58:09 -06:00
Min Idzelis ec7246b86f
refactor(web): add --font-sans CSS variable for primary font (#26730) 2026-03-06 03:00:37 +00:00
Snowknight26 09fabb36b6
fix(web): video stealing focus when it plays again when looping (#26704) 2026-03-05 15:41:27 +00:00
Michel Heusschen 33d75462c9
fix(web): combobox dropdown positioning in modals (#26707) 2026-03-05 10:58:26 +01:00
Mees Frensel e9451f10d6
chore(web): small cleanup of timeline month (#26708) 2026-03-05 09:53:20 +00:00
Andreas Heinz 5caa7e1902
feat(web): bounding box for faces when hovering over the face in photo view (#26667)
* feat(web): when hovering over a face already deteced, display the bounding box also shown when hovering over the person in the details-pane.

* prevent lint error

* fix unused var
2026-03-04 15:27:26 +00:00
Snowknight26 8279e1078a
fix(web): download toast showing wrong filename for motion assets (#26689) 2026-03-04 16:22:48 +01:00
Timon 011ecbb43d
refactor(web): remove replaceAsset action (#26444) 2026-03-04 09:05:44 -06:00
Daniel Dietzler 3c476b1987
chore: vitest 4 for web, cli, and e2e (#26668) 2026-03-04 14:19:13 +00:00
Snowknight26 5989c9b4aa
fix(web): inconsistent asset nav bar state after visiting shared link (#26674) 2026-03-04 08:25:29 -05:00
Min Idzelis 54bc9ddd69
chore: add vitest project names and fix server config root paths (#26684)
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.
2026-03-04 08:20:43 -05:00
Paul Makles f94e0fbc39
fix(maintenance mode): wait for valid server config on restart (#26456)
Signed-off-by: izzy <me@insrt.uk>
2026-03-04 11:16:21 +00:00
Nicolò Maria Semprini 5532f669eb
feat: improve HEIC, HEIF and JPEG XL browser support detection (#26122)
feat: improve heic, heif and jxl browser support detection
2026-03-03 22:41:51 -05:00
Min Idzelis e4c24bdec8
chore: enable prettier caching and quiet output (#26681) 2026-03-04 03:34:48 +00:00
Mees Frensel 0560f98c2d
chore(web): clarify locale settings description (#25562) 2026-03-03 12:52:17 +01:00
Min Idzelis a868ae3ad0
perf: move album fetching into detail panel (#26632) 2026-03-03 12:25:03 +01:00
Mees Frensel a284e38890
fix(web): timeline and asset viewer RTL support (#26513) 2026-03-03 09:01:54 +01:00
Min Idzelis 4da3d68a67
refactor: use keyed each for face bounding boxes (#26648) 2026-03-02 22:16:13 -06:00
Min Idzelis 20c639e52a
refactor: extract shared ContentMetrics for overlay position calculations (#26310) 2026-03-02 21:49:56 -06:00
Snowknight26 b282d83e95
fix(web): show shared link download button when logged in (#26629) 2026-03-02 22:00:23 +01:00
Jason Rasmussen 5bc08f8654
refactor: queue names (#26650) 2026-03-02 15:46:26 -05:00
Michel Heusschen dffe4d1d5c
refactor(web): remove resize observer action (#26647) 2026-03-02 14:45:34 +00:00
Min Idzelis 7f47cdd645
feat: enhance face-editor positioning (#26303)
feat: enhance face-editor positioning - less overlap

test: timeline with actual video
2026-03-02 09:44:59 -05:00
Min Idzelis 8619d14eca
feat: add responsive layout to broken asset (#26384) 2026-03-02 09:27:40 -05:00
Min Idzelis 062546c168
refactor: rename image cancel method (#26381) 2026-03-02 09:23:20 -05:00
Michel Heusschen ea668d6b22
refactor(web): convert memory observer to an attachment (#26646) 2026-03-02 09:20:13 -05:00
Michel Heusschen f06af2c600
refactor(web): dedupe isAllUserOwned logic (#26645) 2026-03-02 09:18:32 -05:00
Snowknight26 9dd2633e0c
chore(web): deduplicate storage template examples (#26462) 2026-03-02 12:52:02 +01:00
Mees Frensel 13a514c189
fix(web): small thumbnail issues (#26643) 2026-03-02 12:50:33 +01:00
Mees Frensel b0c9120bb6
chore: update PWA support (#26491) 2026-03-02 11:35:53 +00:00
Yaros bc4265416d
fix(web): top bar z index on search page (#26582) 2026-03-02 11:33:00 +01:00
renovate[bot] 3da4acfe67
chore(deps): update dependency svelte to v5.53.5 [security] (#26611)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-01 11:22:54 +01:00
Mees Frensel a100a4025e
fix(web): handle delete shortcut on shared link page as remove (#26552) 2026-02-27 12:50:06 +01:00
Michel Heusschen 28ca5f59fe
fix(web): map timeline asset count (#26564) 2026-02-27 12:28:53 +01:00
Michel Heusschen 771816f601
feat(web): map timeline sidepanel (#26532)
* feat(web): map timeline panel

* update openapi

* remove #key

* add index on lat/lng
2026-02-26 12:03:23 -05:00
Mees Frensel e454c3566b
refactor: star rating (#26357)
* refactor: star rating

* transform rating 0 to null in controller dto

* migrate rating 0 to null

* deprecate rating -1

* rating type annotation

* update Rating type
2026-02-26 14:54:20 +01:00
Brandon Wees 3c9fb651d0
feat(server): SyncAssetEditV1 (#26446)
* feat: SyncAssetEditV1

* fix: audit table import

* fix: sql tools table fetch

* fix: medium tests (wip)

* fix: circ dependency

* chore: finalize tests

* chore: codegen/lint

* fix: code review
2026-02-25 18:12:41 +00:00
Mees Frensel 55e625a2ac
fix(web): error page i18n (#26517) 2026-02-25 18:35:25 +01:00
Mees Frensel 11e5c42bc9
fix(web): toast warning when trying to upload unsupported file type (#26492) 2026-02-24 15:58:40 -05:00
Daniel Dietzler 55ee9f76da
chore: eslint 10 (#26490) 2026-02-24 08:24:18 -05:00
Michel Heusschen 30f6d4439e
fix(web): prevent null folder tree on concurrent load (#26489) 2026-02-24 08:23:07 -05:00
renovate[bot] f62d98a0d1
chore(deps): update dependency eslint-plugin-unicorn to v63 (#26484)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-24 12:34:12 +01:00
renovate[bot] db3d580761
chore(deps): update dependency globals to v17 (#26485)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-24 12:18:01 +01:00
renovate[bot] 0bc38fefe6
fix(deps): update typescript-projects (#26483)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-02-24 11:15:26 +00:00
Jonathan Jogenfors 96dc4a77a0
fix: always show library scan button (#26428)
* fix: always show library scan button

* chore: clean up

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-02-23 21:18:23 +00:00
Brandon Wees e5722c525b
feat: getAssetEdits respond with edit IDs (#26445)
* feat: getAssetEdits respond with edit IDs

* chore: cleanup typings for edit API

* chore: cleanup types with jason

* fix: openapi sync

* fix: factory
2026-02-23 20:57:57 +00:00
Min Idzelis 60dafecdc9
refactor: thumbnail components (#26379) 2026-02-23 11:56:20 -05:00
Michel Heusschen 1bd28c3e78
fix(web): prevent `state_unsafe_mutation` error on people page (#26438) 2026-02-23 13:24:51 +01:00
Matthew Momjian 31a55aaa73
fix(web): storage template example (#26424) 2026-02-23 10:34:56 +00:00
Michel Heusschen a4d95b7aba
fix(web): prevent side panel overlap during transition (#26398) 2026-02-21 09:14:53 -06:00
Michel Heusschen 905b9bd560
fix(web): album description auto height (#26420) 2026-02-21 08:43:23 -05:00
Michel Heusschen 672743f543
fix(web): escape handling on album page (#26419) 2026-02-21 08:42:31 -05:00
Michel Heusschen 27c45b5ddb
fix(web): restore close action for asset viewer (#26418) 2026-02-21 10:31:30 +00:00
Min Idzelis aae64b5e2f
test: thumbnail selector (#26383)
* test: face ordering issue/flakiness

* test: thumbnail selector
2026-02-20 15:04:17 +00:00
Jason Rasmussen 01050a3d54
fix: pin code reset modal (#26370) 2026-02-19 21:50:39 +00:00
Timon 7b4cabc2c6
chore: update task commands in web/mise.toml to use pnpm (#26345)
* chore: update task commands in mise.toml to use pnpm

* Replaced direct commands with pnpm run equivalents for consistency.
* Added new tasks for type checking and Svelte checks.
* Removed deprecated svelte-kit-sync task and adjusted dependencies accordingly.

* mroe

* chore: update mise.toml to add demo server task

* Removed the direct IMMICH_SERVER_URL setting from the environment section.
* Added a new task for starting the demo server with the IMMICH_SERVER_URL environment variable.
* Ensured consistency in task definitions.
2026-02-19 16:10:55 -05:00
Jason Rasmussen e6ac48f4b5
refactor: app download modal (#26368) 2026-02-19 16:03:46 -05:00
Jason Rasmussen 3d4dec0cca
refactor: asset actions (#26367) 2026-02-19 20:42:37 +00:00
Jason Rasmussen 1d11106dd0
refactor: add to album (#26366) 2026-02-19 15:27:30 -05:00
Timon 8eec3c810e
fix(web): single select scroll behavior (#26358)
refactor(timeline): remove single select scroll behavior
2026-02-19 15:21:03 -05:00
Jason Rasmussen b2a510efee
refactor: remove unused actions (#26363) 2026-02-19 12:52:21 -06:00
renovate[bot] 7394fa1491
chore(deps): update dependency svelte to v5.51.5 [security] (#26352)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-19 17:11:56 +00:00
Timon ffd54d0431
fix(i18n): add translation key for partner's photos (#26348)
* fix(i18n): add translation key for partner's photos

* reuse existing key
2026-02-19 10:53:19 -06:00
Michel Heusschen 7005e9fc50
fix(web): update @immich/ui to v0.64.0 (#26351) 2026-02-19 16:33:06 +00:00
Michel Heusschen 4f2e6e3f15
fix(web): favoriting assets opened via GalleryViewer (#26350)
fix(web): favoriting assets through GalleryViewer
2026-02-19 10:32:25 -06:00
Michel Heusschen 8b5fc3d8bc
fix(web): prevent panorama image reload during asset updates (#26349) 2026-02-19 10:31:30 -06:00
Jason Rasmussen f04efbb714
fix: safari address bar color (#26346) 2026-02-19 09:40:13 -06:00
Timon 208c07af1f
chore(web): merge "Add to album" and "Add to shared album" actions into a single action (#24669)
* refactor: simplify album selection actions by removing shared option

* Removed the shared option from AddToAlbumAction and related components.
* Updated AlbumPickerModal and other components to reflect this change.
* Cleaned up related tests and documentation for consistency.

* fix lint
2026-02-19 16:15:26 +01:00
renovate[bot] e0bb5f70ec
fix(deps): update dependency fabric to v7 [security] (#26342)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-19 12:28:12 +00:00
Jonathan Jogenfors b3b9834c00
feat(web): loop chromecast video (#24410) 2026-02-18 20:29:13 -05:00
Mees Frensel 84f7fb63ee
feat(web): show ocr text boxes in panoramas (#25727) 2026-02-18 20:04:18 -05:00
Jorge Montejo 1f8359ead4
fix: Download the edited version when downloading multiple photos (#26259)
* fix: download the edited version when downloading multiple photos

* test: update tests

* chore: clean up

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-02-18 21:47:45 +00:00
Michel Heusschen dd632f38de
fix(web): unblock escape after opening context menu (#26325) 2026-02-18 14:10:15 -05:00
renovate[bot] 5adb75c272
fix(deps): update dependency @mapbox/mapbox-gl-rtl-text to v0.3.0 (#23353)
* fix(deps): update dependency @mapbox/mapbox-gl-rtl-text to v0.3.0

* fix: maplibre rtl import

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-02-18 12:05:41 +01:00
renovate[bot] a16a00ebd4
fix(deps): update typescript-projects (#26276)
* fix(deps): update typescript-projects

* chore: downgrade kysely

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-02-17 11:50:02 +00:00
renovate[bot] 18bbb5b4db
chore(deps): update node.js to v24.13.1 (#26275)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-17 11:45:57 +01:00
Michel Heusschen ceef65154d
fix(web): clear cache when asset changes (#26257)
* fix(web): clear cache when asset changes

* formatting
2026-02-17 11:43:08 +01:00
Michel Heusschen 0da74569f2
fix(web): clear unsaved asset description when changing asset (#26255)
* fix(web): clear unsaved asset description when changing asset

* remove unneeded $derived
2026-02-16 18:25:13 +01:00
Michel Heusschen cc9c261fd0
fix(web): clear face boxes when switching assets (#26249) 2026-02-16 15:52:34 +01:00
Michel Heusschen 4dccc2082b
fix(web): focus tag input when modal opens (#26256) 2026-02-16 14:30:41 +00:00
Min Idzelis 19ef196150
chore: quiet down dotenv (#26245) 2026-02-15 22:25:18 -06:00
Michel Heusschen ff7dca35f5
perf(web): speed up asset selection (#26216) 2026-02-14 15:31:04 -05:00
Alex 49ba833e4c
fix(web): Revert "add checkerboard background for transparent images (#26091)" (#26220)
Revert "fix(web): add checkerboard background for transparent images (#26091)"

This reverts commit bc7a1c838c.
2026-02-14 20:25:14 +00:00
Michel Heusschen 9ab887d5d2
perf(web): speed up multi asset operations (#26217) 2026-02-14 15:24:47 -05:00
Min Idzelis d264e78d3f
chore: pnpm workspace protocol for sibling packagages (#26218) 2026-02-14 15:03:08 -05:00
Xantin 2fb9f84b56
refactor(i18n): Follow IETF standard (#26171)
* refactor(18n):  Follow IETF standard

Rename zh_SIMPLIFIED to zh_Hans

Makes it easier to merge #21337

* fix(web): zh_SIMPLIFIED -> zh_Hans
2026-02-13 18:47:41 +01:00
agent-steven bc7a1c838c
fix(web): add checkerboard background for transparent images (#26091)
Co-authored-by: steven94kr <rlgns98kr@gmail.com>
Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2026-02-13 17:18:44 +00:00
Michel Heusschen 34eb2e1410
fix(web): timeline multi select group state (#26180) 2026-02-13 08:34:15 -05:00
Jason Rasmussen 5bf4e9595c
refactor: purchase store (#25734) 2026-02-12 13:32:17 -05:00
Yaros 206a208410
feat(web): change link expiration logic & presets (#26064)
* feat(web): link expiration presets

* refactor: implement suggestions

* chore: remove createdAt prop

* fix: tests

* fix: button keys
2026-02-12 18:27:49 +01:00
Jason Rasmussen 72cef8b94b
feat: shared link login (#25678) 2026-02-12 12:08:38 -05:00
Michel Heusschen b85f6f3fce
fix(web): add missing @immich/ui translations (#26143) 2026-02-12 16:42:35 +00:00
Min Idzelis 81f592ca52
feat: remove Cache API, rework preload(), cancel() and fetch() (#25289)
* feat: remove Cache API, rework preload(), cancel() and fetch()

perf - replace broadcast channel with direct postMessage

* remove sw response handling

* review comments
2026-02-12 11:25:20 -05:00
renovate[bot] a62e8ed179
fix(deps): update typescript-projects (#25549)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-02-12 16:24:04 +00:00
Michel Heusschen 1cf3a80840
fix(web): show correct assets in memory gallery (#26157) 2026-02-12 11:17:09 -05:00
Klenner Martins Barros 9f6dbf710c
fix(web): improve api key modal responsiveness (#26151) 2026-02-12 17:13:09 +01:00
Michel Heusschen f207f99e86
fix(web): prevent event manager from throwing error (#26156) 2026-02-12 11:09:15 -05:00
Michel Heusschen 913904f418
fix(web): escape shortcut handling (#26096) 2026-02-11 18:55:28 +01:00
Michel Heusschen 1c1a000c78
fix(web): use locale for date picker (#26125) 2026-02-11 11:39:30 +01:00
github-actions 3be8e265cd chore: version v2.5.6 2026-02-10 18:24:40 +00:00
Nicolò Maria Semprini 1ddb8f0667
feat: jxl browser support detection (#25599) 2026-02-10 12:49:09 -05:00
Michel Heusschen a9e0fa43fa
fix: correctly cancel select all assets (#26067) 2026-02-10 11:47:23 -05:00
Jason Rasmussen e6e56d75e2
fix(web): refresh text (#26071) 2026-02-10 16:42:03 +00:00
Mert 7fa6f617f5
fix(server): thumbnail queueing (#26077)
* fix thumbnail queueing

* add bmp

* other isEdited column
2026-02-10 09:04:03 -06:00
dolfje 5f18110e97
fix(web): removing a person in an asset, doesn't remove the asset in … (#26068)
* fix(web): removing a person in an asset, doesn't remove the asset in the persons view (without refresh)

* prettier

---------

Co-authored-by: Nikos Verschore <nikos@uwsoftware.be>
2026-02-09 11:51:02 -06:00
Michel Heusschen 8a9b541dd0
fix: slideshow setting dropdown overflow (#26066) 2026-02-09 09:28:47 -06:00
Justin Xiao 25be5fc22d
fix(web): prevent context menu from overflowing viewport (#26041)
* fix(web): prevent context menu from overflowing viewport

The context menu used `max-h-dvh` (100% viewport height) as its max height,
but did not account for the menu's top position. When the menu opens at
y > 0, its bottom extends beyond the viewport.

Compute `maxHeight` dynamically based on the menu's top position and apply
it as an inline style, so the menu always fits within the viewport and
scrolls when content exceeds the available space.

* fix: linting

* fix: overflow

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-02-09 09:26:25 -06:00
Kolin 7cf8a9936a
fix(web): display storage unit next to value instead of absolute positioning in admin user page (#25985)
* fix(web): display storage unit next to value instead of absolute positioning in admin user page

* chore: styling

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2026-02-08 17:22:42 +00:00
Michel Heusschen 59c4a49ffd
fix: scroll jump when opening show & hide people (#25932) 2026-02-08 11:19:35 -06:00
Yaros 00486cbcc8
fix(web): toast fixed location (#25966)
fix: toast fixed location
2026-02-08 11:15:09 -06:00
Michel Heusschen b524d7b6fd
fix: reduce queue graph jitter and include paused count (#26023)
fix: reduce queue graph jitter and show paused count
2026-02-08 11:03:59 -06:00
Michel Heusschen 5b705cb723
fix: improve albums page load time on firefox (#26025) 2026-02-08 11:03:17 -06:00
Michel Heusschen 16fe828913
fix: revert "fix(web): Ensure profile picture is cropped to 1:1 ratio (#25892)" (#25956)
Revert "fix(web): Ensure profile picture is cropped to 1:1 ratio (#25892)"

This reverts commit 3c77c724c5.
2026-02-06 08:21:56 -05:00
Michel Heusschen 211dc3c056
fix: add missing translations for image editor (#25957) 2026-02-06 13:08:24 +01:00
github-actions ff9052f7f5 chore: version v2.5.5 2026-02-06 03:49:02 +00:00
Aditya Gaurav 999ce34251
fix(web): avoid transparent pixels from rounded-full during profile picture capture (#25950)
The cropContainer has rounded-full class which creates transparent
corners when captured by domtoimage.toBlob(). Override border-radius
and border to 0/none during capture to produce a clean square image.

Co-authored-by: Aditya Gaurav <aditya-ai-architect@users.noreply.github.com>
2026-02-06 03:21:27 +00:00
Jason Rasmussen 94e86c6e76
fix: dedupe version announcement modal (#25946)
fix: version announcement modal
2026-02-05 16:24:10 -05:00
github-actions 8581b4f350 chore: version v2.5.4 2026-02-05 21:16:52 +00:00
Dion de Koning cfc5ed5997
fix: timezone issue in tests (#25937)
* Fixed an issue where time tests fail in some timezones

* Revert previous fix and add TZ env variable to fix the issue

* Revert other changes and align TZ fix between server and web

* Revert package lock file

---------

Co-authored-by: Dion de Koning <dion@DionK01.local>
2026-02-05 19:24:23 +00:00
Aditya Gaurav 3c77c724c5
fix(web): Ensure profile picture is cropped to 1:1 ratio (#25892)
* fix(web): Ensure profile picture is cropped to 1:1 ratio

Fixes #20097

The profile picture was being captured from the PhotoViewer element
which could have non-square dimensions based on the original image.

Changed to capture from the crop container element which has the
aspect-square class, ensuring the output is always 1:1 ratio.

* fix: remove trailing whitespace to pass prettier check

---------

Co-authored-by: Aditya Gaurav <aditya-ai-architect@users.noreply.github.com>
2026-02-05 11:45:06 -06:00
Alex 0a8a65a45e
fix: file name search label (#25916) 2026-02-05 17:24:58 +00:00
Jason Rasmussen 237ea3aedd
chore: update oauth documentation (#25907)
* chore: prefer lowercase for non i18n labels

* chore: update documentation
2026-02-05 09:00:00 -05:00
Michel Heusschen 810e9254f3
fix: preserve hidden people state across pagination (#25886)
* fix: preserve hidden people state across pagination

* track overrides instead

* use event instead of bind:people

* update test
2026-02-05 08:51:30 -05:00
Michel Heusschen 57e0835b46
fix: ensure theme stays in sync with @immich/ui (#25922) 2026-02-05 08:36:20 -05:00
Michel Heusschen e97030a7ae
fix: make switch labels properly clickable (#25898) 2026-02-05 12:09:27 +01:00
Michel Heusschen fdf06a91cc
fix: improve asset editor exit handling (#25917) 2026-02-05 12:01:54 +01:00
Alex e9f8521a50
fix: date time picker text color in dark mode (#25883) 2026-02-04 18:45:56 +00:00
Michel Heusschen 6bd60270b4
fix: correctly sync shared link download with metadata toggle (#25885) 2026-02-04 12:38:42 -05:00
Michel Heusschen 5a6fd7af06
fix: close tag modal after tagging assets (#25884) 2026-02-04 12:35:00 -05:00
github-actions 38c1f0b1fd chore: version v2.5.3 2026-02-03 18:14:21 +00:00
Michel Heusschen 5212bca3d0 fix: reset zoom when navigating between assets (#25863) 2026-02-03 11:07:06 -06:00
Michel Heusschen af1ecaf5cc
fix: prevent backspace from accidentally triggering delete modals (#25858)
* fix: prevent backspace from accidentally triggering delete modals

* ignore input fields instead of removing shortcut
2026-02-03 16:42:46 +00:00
Michel Heusschen 0a9d969b47
fix: prevent stale values in edit user form after save (#25859) 2026-02-03 17:29:01 +01:00
Daniel Dietzler 94965f6d66
chore: rework tags sidebar (#25855) 2026-02-03 16:06:26 +00:00
Min Idzelis 95e8e474b8
fix(web): enable asset viewer navigation across memory boundaries (#25741) 2026-02-02 10:12:08 -06:00
Mees Frensel 0273dcb0cf
fix(web): user settings styling (#25775) 2026-02-02 08:47:28 -05:00
Brandon Wees 1a04caee29
fix: reset and unsaved change states in editor (#25588) 2026-01-29 15:18:30 -06:00
Jason Rasmussen 25c573bc7a
chore: remove random code snippet (#25677) 2026-01-29 16:11:25 +00:00
Jason Rasmussen 10b53b525d
refactor: event manager (#25565) 2026-01-29 08:52:18 -05:00
github-actions eadb2f89af chore: version v2.5.2 2026-01-28 22:05:10 +00:00
Jason Rasmussen e81faa1dbf
fix: memory lane (#25652) 2026-01-28 15:51:13 -06:00
Daniel Dietzler 4e0e1b2c5c
fix: escape handling (#25627) 2026-01-28 15:05:21 -05:00
Daniel Dietzler e50579eefc
fix: album card ranges (#25639) 2026-01-28 14:38:09 -05:00
Daniel Dietzler 9be01e79f7
fix: correctly show owner in album options modal (#25618) 2026-01-28 06:24:02 -06:00
Daniel Dietzler 2d09853c3d
fix: escape handling in search asset viewer (#25621) 2026-01-28 06:23:15 -06:00
Min Idzelis 91831f68e2
fix: deleting asset from asset-viewer on search results (#25596) 2026-01-28 12:31:23 +01:00
github-actions 41e2ed3754 chore: version v2.5.1 2026-01-27 23:10:13 +00:00
github-actions 6fd3c9fffa chore: version v2.5.0 2026-01-27 18:19:23 +00:00
Brandon Wees f467a5e2c8
fix(web): edit order handling (#25496)
* fix(web): edit order handling

* chore: tests

* simplify normalization function

* chore: refactor

---------

Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2026-01-27 10:55:10 -06:00
Mees Frensel 818f7b3e9b
fix(web): queue graph formatting for y-axis labels (#25567)
fix(web): queue graph formatting for y axis labels
2026-01-27 10:41:31 -06:00
Daniel Dietzler 212c03ceff
fix(web): properly encode shared link slug (#25564) 2026-01-27 16:29:51 +01:00
Alex 6b2737bae3
chore: hide workflow path (#25539) 2026-01-26 22:47:24 +00:00
Brandon Wees b5c3d87290
fix: clear ocr and asset cache when edits are applied (#25533)
* fix: clear ocr and asset cache when edits are applied

* use event manager

* fix: undefined check
2026-01-26 18:48:34 +00:00
Min Idzelis 646bb372ab
feat: add onMany to BaseEventManager (#25492)
Use a map of events instead of array of tuples for better ergonomics.
2026-01-26 10:34:26 -05:00
Brandon Wees 3b0be896e6
fix: hide stack slideshow when editor open (#25520) 2026-01-26 12:04:59 +01:00
Alex d6c5a382f8
chore: show loading state when fetching users (#25277)
* chore: show loading state when fetching users

* pr feedback
2026-01-24 17:05:58 +00:00
Avalanche Ridings 497003ec57
feat: loop slideshows (#25462)
* Add Repeat to the slideshow in the web UI.

* Fix typo in SlideshowSettingsModal description prop

Fixed spelling

---------

Co-authored-by: generalzero <generalzero@generalzero.org>
2026-01-24 04:09:29 +00:00
Min Idzelis d0d269677e
refactor: rename mobileDevice to mediaQueryManager (#25464) 2026-01-23 20:55:10 -06:00
Min Idzelis 357ec1394a
feat: generate progressive JPEGs for thumbnails (#25463) 2026-01-24 00:35:07 +00:00
Jason Rasmussen 4fedae4150
refactor: event manager (#25481)
* refactor: event manager

* fix: broken downloadFile endpoint
2026-01-23 18:02:23 -05:00
Jason Rasmussen b52e8cd570
refactor: asset navbar (#25480) 2026-01-23 16:19:46 -05:00
Daniel Dietzler f88f1265b6
chore: update svelte (#25478) 2026-01-23 14:31:56 -06:00
Jason Rasmussen af51a11b1b
refactor: asset navbar (#25476) 2026-01-23 14:06:19 -05:00
Anukul d942e7212a
fix(web): fix badge value in queues page (#25445)
Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2026-01-23 16:09:19 +00:00
Jason Rasmussen 6d9dc46619
chore: include sync dtos (#25470) 2026-01-23 14:24:25 +00:00
Min Idzelis 84679fb2b2
refactor: use assetCacheManager for OCR data (#25437) 2026-01-22 21:12:56 -06:00
Min Idzelis a96a08939e
refactor: rename preloadManager to imageManager (#25436)
rename: preloadManager to imageManager
2026-01-22 21:11:57 -06:00
Mees Frensel 78f400305b
fix(web): don't show ocr button on panoramas (#25450) 2026-01-22 10:07:05 -06:00
Alex 7cbfc12e0d
chore: use context menu for user table (#25428)
* chore: use context menu for user table

* chore: reorder columns

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-01-22 07:44:08 -05:00
Alex 2f1d1edf10
chore: use context menu for library table (#25429)
* chore: use context menu for library table

* chore: add user detail link and menu divider

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-01-21 15:07:11 -06:00
Jason Rasmussen 1b032339aa
refactor(web): asset job actions (#25426) 2026-01-21 13:13:16 -05:00
Jason Rasmussen dc82c13ddc
refactor(web): user setting actions (#25424) 2026-01-21 13:13:07 -05:00
Jason Rasmussen 417af66f30
refactor(web): on person thumbnail (#25422) 2026-01-21 13:13:02 -05:00
Min Idzelis 280f906e4b
feat: handle-error minor improvments (#25288)
* feat: handle-error minor improvments

* review comments

* Update web/src/lib/utils/handle-error.ts

Co-authored-by: Jason Rasmussen <jason@rasm.me>

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-01-21 16:46:08 +00:00
Alex b669714bda
chore: lower case text + facelift (#25263)
* chore: lower case text

* wip

* wip

* pr feedback

* pr feedback
2026-01-21 16:41:09 +00:00
Mees Frensel 083ee0b5fe
fix(web): allow exiting pin setup flow (#25413) 2026-01-21 09:53:15 -06:00
Jason Rasmussen 0bae88bef6
refactor(web): person service actions (#25402)
* refactor(web): person service actions

* fix: timeline e2e tests
2026-01-21 10:40:09 -05:00
Mees Frensel 8970566865
fix(web): handle deletion from asset viewer on map page (#25393) 2026-01-21 14:08:01 +00:00
Paul Makles 61a9d5cbc7
feat: restore database backups (#23978)
* feat: ProcessRepository#createSpawnDuplexStream

* test: write tests for ProcessRepository#createSpawnDuplexStream

* feat: StorageRepository#createGzip,createGunzip,createPlainReadStream

* feat: backups util (args, create, restore, progress)

* feat: wait on maintenance operation lock on boot

* chore: use backup util from backup.service.ts
test: update backup.service.ts tests with new util

* feat: list/delete backups (maintenance services)

* chore: open api
fix: missing action in cli.service.ts

* chore: add missing repositories to MaintenanceModule

* refactor: move logSecret into module init

* feat: initialise StorageCore in maintenance mode

* feat: authenticate websocket requests in maintenance mode

* test: add mock for new storage fns

* feat: add MaintenanceEphemeralStateRepository
refactor: cache the secret in memory

* test: update service worker tests

* feat: add external maintenance mode status

* feat: synchronised status, restore db action

* test: backup restore service tests

* refactor: DRY end maintenance

* feat: list and delete backup routes

* feat: start action on boot

* fix: should set status on restore end

* refactor: add maintenanceStore to hold writables

* feat: sync status to web app

* feat: web impl.

* test: various utils for testings

* test: web e2e tests

* test: e2e maintenance spec

* test: update cli spec

* chore: e2e lint

* chore: lint fixes

* chore: lint fixes

* feat: start restore flow route

* test: update e2e tests

* chore: remove neon lights on maintenance action pages

* fix: use 'startRestoreFlow' on onboarding page

* chore: ignore any library folder in `docker/`

* fix: load status on boot

* feat: upload backups

* refactor: permit any .sql(.gz) to be listed/restored

* feat: download backups from list

* fix: permit uploading just .sql files

* feat: restore just .sql files

* fix: don't show backups list if logged out

* feat: system integrity check in restore flow

* test: not providing failed backups in API anymore

* test: util should also not try to use failedBackups

* fix: actually assign inputStream

* test: correct test backup prep.

* fix: ensure task is defined to show error

* test: fix docker cp command

* test: update e2e web spec to select next button

* test: update e2e api tests

* test: refactor timeouts

* chore: remove `showDelete` from maint. settings

* chore: lint

* chore: lint

* fix: make sure backups are correctly sorted for clean up

* test: update service spec

* test: adjust e2e timeout

* test: increase web timeouts for ci

* chore: move gitignore changes

* chore: additional filename validation

* refactor: better typings for integrity API

* feat: higher accuracy progress tracking

* chore: delay lock retry

* refactor: remove old maintenance settings

* refactor: clean up tailwind classes

* refactor: use while loop rather than recursive calls

* test: update service specs

* chore: check canParse too

* chore: lint

* fix: logic error causing infinite loop

* refactor: use <ProgressBar /> from ui library

* fix: create or overwrite file

* chore: i18n pass, update progress bar

* fix: wrong translation string

* chore: update colour variables

* test: update web test for new maint. page

* chore: format, fix key

* test: update tests to be more linter complaint & use new routines

* chore: update onClick -> onAction, title -> breadcrumbs

* fix: use wrench icon in admin settings sidebar

* chore: add translation strings to accordion

* chore: lint

* refactor: move maintenance worker init into service

* refactor: `maintenanceStatus` -> `getMaintenanceStatus`
refactor: `integrityCheck` -> `detectPriorInstall`
chore: add `v2.4.0` version
refactor: `/backups/list` -> `/backups`
refactor: use sendFile in download route
refactor: use separate backups permissions
chore: correct descriptions
refactor: permit handler that doesn't return promise for sendfile

* refactor: move status impl into service
refactor: add active flag to maintenance status

* refactor: split into database backup controller

* test: split api e2e tests and passing

* fix: move end button into authed default maint page

* fix: also show in restore flow

* fix: import getMaintenanceStatus

* test: split web e2e tests

* refactor: ensure detect install is consistently named

* chore: ensure admin for detect install while out of maint.

* refactor: remove state repository

* test: update maint. worker service spec

* test: split backup service spec

* refactor: rename db backup routes

* refactor: instead of param, allow bulk backup deletion

* test: update sdk use in e2e test

* test: correct deleteBackup call

* fix: correct type for serverinstall response dto

* chore: validate filename for deletion

* test: wip

* test: backups no longer take path param

* refactor: scope util to database-backups instead of backups

* fix: update worker controller with new route

* chore: use new admin page actions

* chore: remove stray comment

* test: rename outdated test

* refactor: getter pattern for maintenance secret

* refactor: `createSpawnDuplexStream` -> `spawnDuplexStream`

* refactor: prefer `Object.assign`

* refactor: remove useless try {} block

* refactor: prefer `type Props`
refactor: prefer arrow function

* refactor: use luxon API for minutesAgo

* chore: remove change to gitignore

* refactor: prefer `type Props`

* refactor: remove async from onMount

* refactor: use luxon toRelative for relative time

* refactor: duplicate logic check

* chore: open api

* refactor: begin moving code into web//services

* refactor: don't use template string with $t

* test: use dialog role to match prompt

* refactor: split actions into flow/restore

* test: fix action value

* refactor: move more service calls into web//services

* chore: should void fn return

* chore: bump 2.4.0 to 2.5.0 in controller

* chore: bump 2.4.0 to 2.5.0 in controller

* refactor: use events for web//services

* chore: open api

* chore: open api

* refactor: don't await returned promise

* refactor: remove redundant check

* refactor: add `type: command` to actions

* refactor: split backup entries into own component

* refactor: split restore flow into separate components

* refactor(web): split BackupDelete event

* chore: stylings

* chore: stylings

* fix: don't log query failure on first boot

* feat: support pg_dumpall backups

* feat: display information about each backup

* chore: i18n

* feat: rollback to restore point on migrations failure

* feat: health check after restore

* chore: format

* refactor: split health check into separate function

* refactor: split health into repository
test: write tests covering rollbacks

* fix: omit 'health' requirement from createDbBackup

* test(e2e): rollback test

* fix: wrap text in backup entry

* fix: don't shrink context menu button

* fix: correct CREATE DB syntax for postgres

* test: rename backups generated by test

* feat: add filesize to backup response dto

* feat: restore list

* feat: ui work

* fix: e2e test

* fix: e2e test

* pr feedback

* pr feedback

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-01-20 09:22:28 -06:00
Min Idzelis ca0d4b283a
feat: zoom image improvements for reactive prop handlings (#25286) 2026-01-20 13:18:54 +01:00
renovate[bot] 2b4e4051f0
fix(deps): update typescript-projects (#25377)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-01-20 11:20:27 +00:00
Alex 99bd7d5f27
chore: sharing action button position (#25381) 2026-01-20 01:43:57 +00:00
Brandon Wees 3e21174dd8
chore: web editor improvements (#25169) 2026-01-19 18:57:15 +00:00
Brandon Wees 1b56bb84f9
fix: mobile edit handling (#25315)
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2026-01-19 12:22:53 -06:00
Jason Rasmussen 2b77dc8e1f
refactor(web): workflow create action (#25369) 2026-01-19 12:41:28 -05:00
Jason Rasmussen 97a594556b
refactor: sharing page actions (#25368) 2026-01-19 12:16:16 -05:00
Jason Rasmussen 4a7c4b6d15
refactor(web): routes (#25365) 2026-01-19 12:07:31 -05:00
Jason Rasmussen a8198f9934
refactor: lock session (#25366)
refafctor: lock session
2026-01-19 11:47:58 -05:00
Kolin e6eca895ba
fix(web): add min-width to setting input field (#25317)
Prevents input fields from collapsing in flex layouts, such as the extension field in storage template settings. Fixes #25298.
2026-01-16 16:31:06 -06:00
Jason Rasmussen 8196bd9bbd
refactor(web): routes (#25313) 2026-01-16 16:11:09 -05:00
Daniel Dietzler 07675a2de4
feat: download original asset (#25302)
Co-authored-by: bwees <brandonwees@gmail.com>
2026-01-16 19:05:13 +00:00
Jason Rasmussen a2b03f7650
refactor(web): user sidebar (#25292) 2026-01-16 11:17:35 -05:00
Jason Rasmussen 843d563178
refactor(web): admin page layout (#25281)
* refactor(web): admin page layout

* chore: remove unused props
2026-01-15 18:58:43 -05:00
Min Idzelis 256d62e22d
feat: thumbhash improvments for reactive prop updates (#25287) 2026-01-15 18:57:43 -05:00
renovate[bot] 0052979853
chore(deps): update dependency svelte to v5.46.4 [security] (#25284)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-15 22:10:17 +01:00
Alex 95eb3e26c3
chore: sidebar spacing (#25278) 2026-01-15 10:35:01 -06:00
Alex 613dc858cb
chore: tweak table text size (#25276) 2026-01-15 11:06:34 -05:00
Min Idzelis 80a5444bf4
feat: redesign asset-viewer previous/next and hide when nav not possible (#24903) 2026-01-15 12:55:01 +01:00
Jason Rasmussen d59ee7d2ae
feat(web): immich/ui select component (#25268)
Co-authored-by: Alex <alex.tran1502@gmail.com>
2026-01-14 19:38:13 -06:00
Alex 0a62ec7e29
chore: album option modal styling (#25269)
* chore: album option modal styling

* header action button color
2026-01-14 16:52:33 -06:00
Daniel Dietzler 56dfdfd033
refactor: album share and options modals (#25212)
* refactor: album share modals

* chore: clean up

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2026-01-14 15:18:02 -05:00
Jason Rasmussen 2190921c85
chore: await api key nested modal (#25265) 2026-01-14 14:02:44 -05:00
Alex 6e00fd92ef
chore: use fontWeight for Text component (#25262) 2026-01-14 16:25:30 +00:00
Alex 6fdd1ce41a
chore: use font-mono (#25250)
* chore: use font-mono

* chore: override variable
2026-01-14 11:21:48 -05:00
Jason Rasmussen 91d4cd6824
refactor: tables (#25226) 2026-01-14 07:56:09 -05:00
Jason Rasmussen 38f01a6b7d
fix(web): redirect to login (#25254) 2026-01-13 23:11:14 -05:00
Alex edc513a3df
feat(web): 2026 font (#25174)
* feat(web): 2026 font

* chore: docs font

* spacing tweak

* tweak minimum font weight and update ui lib

* small tweaks

* docs: small tweaks

* more tweaks
2026-01-13 18:19:09 +00:00
Yaros 39212a049c
feat(web): search albums by description (#25244)
feat: search albums by description
2026-01-13 11:56:59 -06:00
renovate[bot] 9b4f370834
chore(deps): update node.js to v24.13.0 (#25243)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-13 16:19:10 +00:00
juliancarrivick 6e86697996
fix(web): Handle upload failures from public users (#24826) 2026-01-13 15:15:54 +00:00
renovate[bot] 0c0aa1f3c3
fix(deps): update typescript-projects (#25070)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2026-01-13 12:32:38 +01:00