Commit Graph

781 Commits

Author SHA1 Message Date
Lukas
5f10a4cae7 fix(web): allow renaming person without merging (#19923)
* fix(web): allow renaming person without merging

* improve return type
2025-07-14 14:24:32 -05:00
Jason Rasmussen
47c0dc0d7e feat: nightly tasks (#19879) 2025-07-11 17:32:10 -04:00
Léopold Koprivnik
f778adea92 feat: adds option to search only for untagged assets (#19730)
Co-authored-by: SkwalExe <skwal@skwal.net>
2025-07-10 16:28:20 +02:00
Daimolean
53020852ec fix(web): modal race condition (#19625)
* fix(web): modal race condition

* fix: translation

* fix: translation
2025-06-30 14:33:47 -05:00
Daimolean
7f89999abe fix(web): toggle favorite (#19453) 2025-06-23 08:36:30 -05:00
Daimolean
813186e618 fix(web): undefined release (#19455)
Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2025-06-23 12:13:08 +00:00
Daniel Dietzler
ecc58a8971 chore: migrate version announcement modal (#19381) 2025-06-22 21:56:41 -05:00
Daniel Dietzler
698d3004b4 refactor: tag create/update modal (#19389)
refactor: tag modals
2025-06-21 12:28:21 +00:00
Daniel Dietzler
a5d84ba552 chore: consistent modal footer spacing (#19377) 2025-06-20 18:05:39 +00:00
Brandon Wees
1c50e19894 fix: use icons instead of toggles for admin user features view (#19369)
* fix: use icons instead of toggles for admin user features view

* fix: use red for X icon
2025-06-20 14:48:18 +00:00
Jason Rasmussen
dd8969cb7d fix: container padding (#19316) 2025-06-19 21:33:12 -05:00
Zack Pollard
f9435a538b revert: fix(web): wrap long names with textarea (#19305)
Revert "fix(web): wrap long names with textarea (#19301)"

This reverts commit 747a72120e.
2025-06-19 16:28:10 +00:00
Jin Xuan
747a72120e fix(web): wrap long names with textarea (#19301) 2025-06-19 15:57:54 +00:00
Daniel Dietzler
523fe5bef7 refactor: album options modal (#19177) 2025-06-14 18:10:33 -04:00
Jason Rasmussen
8923d5b0a3 refactor: css variables (#19146) 2025-06-12 23:06:38 +00:00
Jason Rasmussen
c9bcae813b feat: duplicate delete groups api (#19142) 2025-06-12 17:48:43 -04:00
Robin Brisa
0322a8b1d9 fix(web): properly update activityManager when browsing assets (#18909) 2025-06-12 12:13:35 +01:00
Daniel Dietzler
22eef5f3c5 chore: more flexible modal manager types (#19123)
* fix: required argument in onClose modal function

* chore: more flexible modal manager types
2025-06-11 22:32:49 +00:00
Min Idzelis
4b4ee5abf3 refactor: timeline manager renames (#19007)
* refactor: timeline manager renames

* refactor(web): improve timeline manager naming consistency

- Rename AddContext → GroupInsertionCache for clearer purpose
- Rename TimelineDay → DayGroup for better clarity
- Rename TimelineMonth → MonthGroup for better clarity
- Replace all "bucket" references with "monthGroup" terminology
- Update all component props, method names, and variable references
- Maintain consistent naming patterns across TypeScript and Svelte files

* refactor(web): rename buckets to months in timeline manager

- Rename TimelineManager.buckets property to months
- Update all store.buckets references to store.months
- Use 'month' shorthand for monthGroup arguments (not method names)
- Update component templates and test files for consistency
- Maintain API-related 'bucket' terminology (bucketHeight, getTimeBucket)

* refactor(web): rename assetStore to timelineManager and update types

- Rename assetStore variables to timelineManager in all .svelte files
- Update parameter names in actions.ts and asset-utils.ts functions
- Rename AssetStoreLayoutOptions to TimelineManagerLayoutOptions
- Rename AssetStoreOptions to TimelineManagerOptions
- Move assets-store.spec.ts to timeline-manager.spec.ts

* refactor(web): rename intersectingAssets to viewerAssets and fix property references

- Rename intersectingAssets to viewerAssets in DayGroup and MonthGroup classes
- Update arrow function parameters to use viewerAsset/viewAsset shorthand
- Rename topIntersectingBucket to topIntersectingMonthGroup
- Fix dateGroups references to dayGroups in asset-utils.ts and album page
- Update template loops and variable names in Svelte components

* refactor(web): rename #initializeTimeBuckets to #initializeMonthGroups and bucketDateFormatted to monthGroupTitle

* refactor(web): rename monthGroupHeight to height

* refactor(web): rename bucketCount to assetsCount, bucketsIterator to monthGroupIterator, and related properties

* refactor(web): rename count to assetCount in TimelineManager

* refactor(web): rename LiteBucket to ScrubberMonth and update scrubber variables

- Rename LiteBucket type to ScrubberMonth
- Rename bucketDateFormattted to title in ScrubberMonth type
- Rename bucketPercentY to monthGroupPercentY in scrubber component
- Rename scrubBucket to scrubberMonth and scrubBucketPercent to scrubberMonthPercent

* fix remaining refs to bucket

* reset submodule to correct commit

* reset submodule to correct commit

* refactor(web): extract TimelineManager internals into separate modules

- Move search-related functions to internal/search-support.svelte.ts
- Extract websocket event handling into WebsocketSupport class
- Move utility functions (updateObject, isMismatched) to internal/utils.svelte.ts
- Update imports in tests to use new module structure

* refactor(web): extract intersection logic from TimelineManager

- Create intersection-support.svelte.ts with updateIntersection and calculateIntersecting functions
- Remove private intersection methods from TimelineManager
- Export findMonthGroupForAsset from search-support for reuse
- Update TimelineManager to use the extracted intersection functions

* refactor(web): rename a few methods in intersecting

* refactor(web): rename a few methods in intersecting

* refactor(web): extract layout logic from TimelineManager

- Create layout-support.svelte.ts with updateGeometry and layoutMonthGroup functions
- Remove private layout methods from TimelineManager
- Update TimelineManager to use the extracted layout functions
- Remove unused UpdateGeometryOptions import

* refactor(web): extract asset operations from TimelineManager

- Create operations-support.svelte.ts with addAssetsToMonthGroups and runAssetOperation functions
- Remove private asset operation methods from TimelineManager
- Update TimelineManager to use extracted operation functions with proper AssetOrder handling
- Rename getMonthGroupIndexByAssetId to getMonthGroupByAssetId for consistency
- Move utility functions from utils.svelte.ts to internal/utils.svelte.ts
- Fix method name references in asset-grid.svelte and tests

* refactor(web): extract loading logic from TimelineManager

- Create load-support.svelte.ts with loadFromTimeBuckets function
- Extract time bucket loading, album asset handling, and error logging
- Simplify TimelineManager's loadMonthGroup method to use extracted function

* refresh timeline after archive keyboard shortcut

* remove debugger

* rename

* Review comments - remove shadowed var

* reduce indents - early return

* review comment

* refactor: simplify asset filtering in addAssets method

Replace for loop with filter operation for better readability

* fix: bad merge

* refactor(web): simplify timeline layout algorithm

- Replace rowSpaceRemaining array with direct cumulative width tracking
- Invert logic from tracking remaining space to tracking used space
- Fix spelling: cummulative to cumulative
- Rename lastRowHeight to currentRowHeight for clarity
- Remove confusing lastRow variable and simplify final height calculation
- Add explanatory comments for clarity
- Rename loop variable assetGroup to dayGroup for consistency

* simplify assetsIterator usage

* merge/lint

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-06-10 09:30:13 -05:00
Mert
74f79cae69 refactor(web): tree data structure for folder and tag views (#18980)
* refactor folder view

inline link

* improved tree collapsing

* handle tags

* linting

* formatting

* simplify

* .from is faster

* simplify

* add key
2025-06-09 10:02:16 -05:00
Min Idzelis
e2ffc9d5a1 refactor: asset-store (#18938)
* refactor: asset-store

* Potential fix for code scanning alert no. 152: Prototype-polluting function

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

---------

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2025-06-05 02:27:54 +00:00
Robin Brisa
a26d703335 feat(web): display number of likes in asset viewer (#18911)
* feat: display number of likes

* fix: properly decrement like count on unlike

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>

* chore: pr feedback

* chore: updated related test

* chore: formatter run

* chore: force numberOfLikes to null in album context to pass lint

* chore: open-api updated

* fix: use undefined, not null

* styling tweaks

* chore: updated sql

---------

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-06-04 12:41:50 -05:00
xCJPECKOVERx
19ff39c2b9 feat(web): undo delete (#18729)
* feat(web): Undo asset delete

* - lints and checks
- Update English translation

* Update delete-assets.svelte

Make onUndoDelete optional in Props interface

* - Ensure undo button not available on permanent delete, or trash disabled.
- Enforce lint requirement for no-negated-condition

* Fix formatting

* fix: lint

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-06-04 15:46:07 +00:00
Brandon Wees
74438f5bd8 feat(web): improved user onboarding (#18782)
* wip

* added user metadata key

* wip

* restructure onboarding system and add initial locale

* update language card and fix translation updating

* remove prints

* new card formattings

* fix cursed unmount effect

* add OAuth route onboarding

* remove required admin auth for onboarding

* delete the hotwire button

* update open-api files

* delete import

* fix failing oauth onboarding fields

* fix e2e test

* fix web e2e test

* add onboarding to user registration e2e test

* remove todo

this was a holdover during dev and didn't get deleted

* fix server small tests

* use onDestroy to save settings rather than a bind:this

* change to false for isOnboarded

* fix other auth small test

* provide type annotation in user factory metadata field

* remove onboardingCompelted from UserDto

* move translations to onboarding steps array and mark as derived so they update

* break language selector out into its own component as per @danieldietzler suggestion

* remove hello header on card

* fix flixkering on server privacy card

* label/id fixes

* openapi

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2025-06-02 21:09:13 +00:00
Brandon Wees
a02e1f5e7c chore(web): migrate CircleIconButton to @immich/ui IconButton (#18486)
* remove import and referenced file

* first pass at replacing all CircleIconButtons

* fix linting issues

* fix combobox formatting issues

* fix button context menu coloring

* remove circle icon button from search history box

* use theme switcher from UI lib

* dark mode force the asset viewer icons

* fix forced dark mode icons

* dark mode memory viewer icons

* fix: back button in memory viewer

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-06-02 14:47:23 +00:00
Arno
9c18fef9b2 chore: Refactor external library modals (#18655) 2025-05-31 15:30:08 +02:00
Frank de Lange
e2defbc49a feat: start oauth with autoLaunch=1 (#18763)
* Add automatic OpenID Connect login by using parameter `autoLaunch=1`

By launching Immich with `/auth/login?autoLaunch=1` an OpenID Connect login attempt is directly initated on installations where OAuth Auto Launch is not enabled. The intended use for this parameter is to enable Immich to be launched from e.g. Nextcloud using the _External sites_ app and the _oids_ OpenID Connect provider app so as to enable the user to directly interact with Immich without the need to press the `Login with ...` button.

* Add documentation for autolaunch by navigating to `/auth/login?autoLaunch=1`

* Look ma, no braces!

_This could be a single line_

And now it is, as is its predecessor.

* Change formatting to satisfy _prettier_

* if (condition) return true -> return condition

* More _prettier_ reformatting

* Look ma, braces!
2025-05-30 22:12:53 +00:00
Brandon Wees
cbf68b006e chore: add google cast feature switch to user admin pane (#18783)
add gogole cast feature switch to user admin pane
2025-05-30 14:17:32 -04:00
Daimolean
1f18a09061 fix(web): hide map button when disable (#18743) 2025-05-29 09:13:44 -05:00
Min Idzelis
f029910dc7 feat: keyboard navigation to timeline (#17798)
* feat: improve focus

* feat: keyboard nav

* feat: improve focus

* typo

* test

* fix test

* lint

* bad merge

* lint

* inadvertent

* lint

* fix: flappy e2e test

* bad merge and fix tests

* use modulus in loop

* tests

* react to modal dialog refactor

* regression due to deferLayout

* Review comments

* Re-use change-date instead of new component

* bad merge

* Review comments

* rework moveFocus

* lint

* Fix outline

* use Date

* Finish up removing/reducing date parsing

* lint

* title

* strings

* Rework dates, rework earlier/later algorithm

* bad merge

* fix tests

* Fix race in scroll comp

* consolidate scroll methods

* Review comments

* console.log

* Edge cases in scroll compensation

* edge case, optimizations

* review comments

* lint

* lint

* More edge cases

* lint

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-05-28 08:55:14 -05:00
Zack Pollard
0712183a18 fix: replace edit user button with view button for user details screen (#18683) 2025-05-27 15:38:16 +00:00
Alex
8fcf47e5cb chore: more padding (#18507) 2025-05-23 00:52:45 +02:00
Alex
065f7c7d5d fix: more z-index issue (#18493) 2025-05-22 15:17:14 -05:00
Daimolean
91b961642a feat(web): add to locked folder in album and search (#18488)
* feat(web): add to locked folder in album and search

* feat(web): add to locked folder in favorite and archive

* fix: lint

* feat: add to person page

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-05-22 16:26:19 +00:00
Arno
188188a844 fix: Change shortcut listeners from window to document (#18416)
* fix: Change shortcut listeners to document

* fix: split into window and document

* chore: upgrade ui package
2025-05-21 11:12:00 -05:00
Alex
b2ef8ea7dd fix: onboarding styling (#18417) 2025-05-21 15:59:28 +00:00
renovate[bot]
b83b28cd73 fix(deps): update typescript-projects (#18390)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2025-05-20 22:40:30 +00:00
Brandon Wees
86db0aafe5 feat(web): add support for casting (#18231)
* recreate #13966

* gcast button works

* rewrote gcast-player to be GCastDestination and CastManager manages the interface between UI and casting destinations

* remove unneeded imports

* add "Connected to" translation

* Remove css for cast launcher

* fix tests

* fix doc tests

* fix the receiver application ID

* remove casting app ID

* remove cast button from nav bar

It is now present at the following locations:

- shared link album and single asset views
- asset viewer (normal user)
- album view (normal user)

* part 1 of fixes from @danieldietzler code review

* part 2 of code review changes from @danieldietzler and @jsram91

* cleanup documentation

* onVideoStarted missing callback

* add token expiry validation

* cleanup logic and logging

* small cleanup

* rename to ICastDestination

* cast button changes
2025-05-20 16:08:23 -05:00
Alex
bdf19ce331 fix: TimelineAsset visibility (#18395)
* fix: TimelineAsset visibility

* fix enum values
2025-05-20 15:53:34 +00:00
Alex
59f666b115 chore: back button in pin verification form (#18378) 2025-05-19 21:33:42 +00:00
Alex
c8641d24f6 chore: tailwindcss v4 and z-war clean up (#18358)
* chore: styling tweak

* replace full-screen-modal, update docs

* scrubber

* fix: control app bar in memory viewer

* face lift

* pr feedback

* clean up
2025-05-19 14:32:23 +00:00
Daniel Dietzler
56156b97e7 chore: upgrade to tailwind v4 (#18353) 2025-05-18 13:51:33 +00:00
Min Idzelis
0bbe70e6a3 feat(web): lighter timeline buckets (#17719)
* feat(web): lighter timeline buckets

* GalleryViewer

* weird ssr

* Remove generics from AssetInteraction

* ensure keys on getAssetInfo, alt-text

* empty - trigger ci

* re-add alt-text

* test fix

* update tests

* tests

* missing import

* fix: flappy e2e test

* lint

* revert settings

* unneeded cast

* fix after merge

* missing import

* lint

* review

* lint

* avoid abbreviations

* review comment - type safety in test

* merge conflicts

* lint

* lint/abbreviations

* fix: left-over migration

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2025-05-18 02:57:08 +00:00
koostamas
b63d6cdcd6 feat: bulk change description (#18288)
Co-authored-by: Tamas Koos <ext_tamas.koos@btrl.ro>
2025-05-17 12:17:00 +02:00
Daniel Dietzler
21880aec14 fix: z-index issues on search page (#18336) 2025-05-16 17:54:37 +00:00
Jason Rasmussen
28d8357cc5 feat(web): clear person birthdate (#18330) 2025-05-16 11:56:25 -04:00
Daniel Dietzler
a9e7d0388b fix: people edit ui (#18320) 2025-05-15 18:32:01 -04:00
Jason Rasmussen
86d64f3483 refactor: buttons (#18317)
* refactor: buttons

* fix: woopsie

---------

Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
2025-05-15 18:31:33 -04:00
Jason Rasmussen
c1150fe7e3 feat: lock auth session (#18322) 2025-05-15 18:08:31 -04:00
Jason Rasmussen
ecb66fdb2c fix: check i18n are sorted (#18324) 2025-05-15 17:55:16 -04:00