* 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>
* fix: regression: sort day by fileCreatedAt again
* lint
* e2e test
* inline function
* e2e
* Address comments. Drop dayGroup and timezone in favor of localOffsetMinutes
* lint and some api-doc
* lint, more api-doc
* format
* Move minutes to fractional hours
* make sql
* merge/conflict
* merge fallout, review comments
* spelling
* drop offset from returned date
* move description into decorator where possible, regen api
* 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>
* 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>
* Add a new setting to toggle autoplay when showing the slideshow.
* Fix an issue where the slideshow would restart automatically when
navigating after it was paused.
* Add a keyboard shortcut 's' to start the slideshow from the asset
viewer.
* Add a keyboard shortcut ' ' to toggle the slideshow play/paused.
* Change the timeout for hiding the slideshow controls from 10 to 2.5
seconds.
* Add English translation for the 'autoplay_slideshow' setting.
Co-authored-by: Alex <alex.tran1502@gmail.com>
* Fix an issue where clicking the zoom-button after having zoomed in
would not zoom completely out, but leave the image in the zoomed-in
state. The new behavior properly zoomes the image completely out after
clicking the zoom-button.
* Revert to the default setting for `wheelZoomRatio` as the previous
setting of 0.2 was borderline unusable on a trackpad. This could
probably be moved to a user setting if needed.
* Add a keyboard shortcut 'z' to toggle image zoom.
* feat: private view
* pr feedback
* sql generation
* feat: visibility column
* fix: set visibility value as the same as the still part after unlinked live photos
* fix: test
* pr feedback
* feat: responsive date group header height
* update tests
* feat(web): improve perf when changing mobile orientation (#17945)
fix: improve perf when changing mobile orientation
* fix(web): search bar deactivates when focus exits
* fix: disable search bar on destroy
For example, on the search page. If the escape key is pressed while the advanced filters button is focused, the search page will close but the search bar will remain activated.
* feat: expand/collapse sidebar
* fix: general PR cleanup
- add skip link unit test
- remove unused tailwind styles
- adjust asset grid spacing
- fix event propogation
* fix: cleaning up event listeners
* fix: purchase modal and button on small screens
* fix: explicit tailwind classes
* fix: no animation on initial page load
* fix: sidebar spacing and reactivity
* chore: reverting changes to icons in nav and account info panel
* fix: remove left margin from the asset grid after merging in new timeline
* chore: extract search-bar changes for a separate PR
* fix: add margin to memories
* feat(web): max grid row height responsive
* also gallery-viewer
* lint
* feat(web): support long-press selection on mobile web
* use svelte-gestures
* fix test
* Bug fix
* globalThis
* format
* revert generator
* Testing
* bad merge
* Fix typo/tap on thumbnail
* feat: shrink header on small screens (#16909)
* feat(web): shrink header on small screens
* fix test
* test
* Fix test
* Revert user-page-layout chagne
* Restore icons sizes, make consistent, improve logo responsiveness
* remove 4 more pix, lint
* lint
* chore
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* Revert "Testing"
This reverts commit 442f11c9e1538809f9208abcdff71a58b510ca98.
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* fix(web): timeline renders nothing after archiving in asset viewer
* fix(web): timeline renders nothing after archiving in asset viewer
* fix: ensure geometry updated when performing bulk action on all
* fix: album assets selection
* 16712: Proper intialisation of the memory store to avoid loading up duplicate object refs of the same asset.
* 16712: Add auth to memory mapping so isFavorite is actually return correctly from the server.
* 16712: Move logic that belongs in the store into the store.
* 16712: Cleanup.
* 16712: Fix init behaviour.
* 16712: Add comment.
* 16712: Make method private.
* 16712: Fix import.
* 16712: Fix format.
* 16712: Cleaner if/else and fix typo.
* fix: icon size mismatch
* 16712: Fixed up state machine managing memory playback:
* Updated to `Tween` (`tweened` was deprecated)
* Removed `resetPromise`. Setting progressController to 0 had the same effect, so not really sure why it was there?
* Removed the many duplicate places the `handleAction` method was called. Now we just called it on `afterNavigate` as well as when `galleryInView` or `$isViewing` state changes.
* 16712: Add aria tag.
* 16712: Fix memory player duplicate invocation bugs. Now we should only call 'reset' and 'play' once, after navigate/page load. This should hopefully fix all the various bugs around playback.
* 16712: Cleanup
* 16712: Cleanup
* 16712: Cleanup
* 16712: Cleanup
---------
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
* 15712: Added keyboard shortcuts for opening add to album modal and highlighting/selecting an album to add to.
* 15712: Re-factored logic from template code into script. Extracted new album button into separate cmponent.
* 15712: Document new keyboard shortucts now that they work everywhere.
* 15712: Extract some constants/helper functions.
* 15712: Missing comma.
* 15712: Pulled logic out into separate unit testable class.
* 15712: Added a unit test.
* 15712: Move the modal back up to keep the github PR happy.
* 15712: PR feedback - renamed typescript files and switch to class bind directive.
* 15712:Move selection modal into correct package.
* 15712: Better naming of module and files.
* 15712: Add asset highlight using arrow keys.
* 15172: Add escape behaviour everywhere.
* 15712: Don't allow highlighting past start or end.
* 15712: Clear the highlight on changes to the component state.
* 15712: Use focus to track highlighted element.
* 15712: Rename highlight -> focussed.
* 15712: Better naming.
* 15712: Cleanup.
* 15712: Cleanup & simplify.
* 15712: bugfix for clicking on button.
* 15712: Cleanup.
* 15712: Rollback unnecessary changes.
* 15712: Add unit test.
* 15712: Add thumbnail unit test.
* 15712: Prettier.
* 15712: Fix merge issue.
* 15712: Add shortcut info.
* 15712: Fix linter.