From e5b4dd1041092b33609ed4bb2815f29f92ce4d39 Mon Sep 17 00:00:00 2001 From: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com> Date: Mon, 26 Oct 2026 19:04:43 +0100 Subject: [PATCH] feat: sveltekit 3 (#32737) (cherry picked from commit 2576ee28cfb790e99ddf401a129e1d9a18713121) --- e2e/src/specs/web/shared-link.e2e-spec.ts | 2 +- web/.prettierrc | 2 +- web/eslint.config.js | 3 +- web/package.json | 18 +++- web/src/app.d.ts | 4 +- web/src/env.ts | 6 ++ web/src/hooks.client.ts | 16 +-- web/src/hooks.server.ts | 6 +- .../lib/actions/__test__/FocusTrap.spec.ts | 4 +- .../lib/actions/__test__/FocusTrapTest.svelte | 2 +- web/src/lib/actions/click-outside.ts | 2 +- .../lib/actions/context-menu-navigation.ts | 2 +- web/src/lib/actions/focus-trap.ts | 2 +- web/src/lib/actions/image-loader.svelte.ts | 2 +- web/src/lib/actions/list-navigation.ts | 2 +- web/src/lib/actions/scroll-memory.ts | 54 ++++------ web/src/lib/actions/zoom-image.ts | 2 +- web/src/lib/commands.ts | 10 +- web/src/lib/components/ActionMenuItem.svelte | 4 +- web/src/lib/components/AdaptiveImage.svelte | 26 ++--- web/src/lib/components/AdminCard.svelte | 2 +- web/src/lib/components/AlphaBackground.svelte | 2 +- .../components/ApiKeyPermissionsPicker.svelte | 2 +- .../lib/components/AssetViewerEvents.svelte | 4 +- .../components/BreadcrumbActionPage.svelte | 2 +- web/src/lib/components/CalendarHeatmap.svelte | 2 +- .../lib/components/HeaderActionButton.svelte | 2 +- web/src/lib/components/Image.spec.ts | 6 +- web/src/lib/components/Image.svelte | 4 +- web/src/lib/components/ImageLayer.svelte | 4 +- web/src/lib/components/LoadingDots.svelte | 2 +- web/src/lib/components/OnEvents.svelte | 4 +- .../lib/components/SchemaAlbumPicker.svelte | 4 +- .../lib/components/SchemaConfiguration.svelte | 8 +- web/src/lib/components/SchemaTagPicker.svelte | 4 +- .../components/SharedLinkExpiration.svelte | 2 +- .../components/SharedLinkFormFields.spec.ts | 2 +- .../components/SharedLinkFormFields.svelte | 2 +- web/src/lib/components/Thumbhash.svelte | 4 +- .../StorageTemplateSettings.svelte | 22 ++-- .../SupportedDatetimePanel.svelte | 2 +- .../components/album-page/AlbumCard.svelte | 6 +- .../album-page/AlbumCardGroup.svelte | 12 +-- .../components/album-page/AlbumCover.svelte | 6 +- .../lib/components/album-page/AlbumMap.svelte | 8 +- .../album-page/AlbumSharedLink.svelte | 4 +- .../components/album-page/AlbumSummary.svelte | 2 +- .../album-page/AlbumThumbnail.svelte | 6 +- .../components/album-page/AlbumViewer.svelte | 36 +++---- .../components/album-page/AlbumsList.svelte | 19 ++-- .../components/album-page/AlbumsTable.svelte | 8 +- .../album-page/AlbumsTableHeader.svelte | 4 +- .../album-page/AlbumsTableRow.svelte | 12 +-- .../album-page/__tests__/AlbumCard.spec.ts | 6 +- .../album-page/__tests__/AlbumCover.spec.ts | 8 +- .../album-page/__tests__/AlbumSummary.spec.ts | 6 +- .../asset-viewer/ActivityStatus.svelte | 4 +- .../asset-viewer/ActivityViewer.svelte | 22 ++-- .../asset-viewer/AlbumListItem.svelte | 8 +- .../asset-viewer/AssetViewer.spec.ts | 20 ++-- .../asset-viewer/AssetViewer.svelte | 63 ++++++----- .../asset-viewer/AssetViewerNavBar.spec.ts | 18 ++-- .../asset-viewer/AssetViewerNavBar.svelte | 38 +++---- .../asset-viewer/DetailPanel.svelte | 40 +++---- .../asset-viewer/DetailPanelDate.svelte | 8 +- .../DetailPanelDescription.spec.ts | 2 +- .../DetailPanelDescription.svelte | 4 +- .../asset-viewer/DetailPanelLocation.svelte | 4 +- .../asset-viewer/DetailPanelPeople.svelte | 14 +-- .../asset-viewer/DetailPanelStarRating.svelte | 8 +- .../asset-viewer/DetailPanelTags.svelte | 12 +-- .../asset-viewer/ImagePanoramaViewer.svelte | 4 +- .../asset-viewer/OcrBoundingBox.svelte | 6 +- .../components/asset-viewer/OcrButton.svelte | 2 +- .../PhotoSphereViewerAdapter.svelte | 12 +-- .../asset-viewer/PhotoViewer.svelte | 36 +++---- .../asset-viewer/PreloadManager.svelte.ts | 6 +- .../asset-viewer/SlideshowBar.svelte | 12 +-- .../SlideshowMetadataOverlay.svelte | 4 +- .../asset-viewer/VideoNativeViewer.svelte | 22 ++-- .../asset-viewer/VideoPanoramaViewer.svelte | 2 +- .../asset-viewer/VideoRemoteViewer.svelte | 4 +- .../asset-viewer/VideoWrapperViewer.svelte | 6 +- .../asset-viewer/actions/ArchiveAction.svelte | 12 +-- .../asset-viewer/actions/DeleteAction.spec.ts | 6 +- .../asset-viewer/actions/DeleteAction.svelte | 16 +-- .../actions/NextAssetAction.svelte | 4 +- .../actions/PreviousAssetAction.svelte | 4 +- .../asset-viewer/actions/RestoreAction.svelte | 8 +- .../actions/SetVisibilityAction.svelte | 8 +- .../components/asset-viewer/actions/action.ts | 4 +- .../asset-viewer/editor/EditorPanel.svelte | 6 +- .../editor/transform-tool/CropArea.svelte | 8 +- .../transform-tool/TransformTool.svelte | 4 +- .../face-editor/FaceEditor.svelte | 18 ++-- .../lib/components/assets/BrokenAsset.svelte | 2 +- .../assets/thumbnail/ImageThumbnail.spec.ts | 4 +- .../assets/thumbnail/ImageThumbnail.svelte | 4 +- .../assets/thumbnail/Thumbnail.svelte | 20 ++-- .../assets/thumbnail/VideoThumbnail.svelte | 2 +- .../thumbnail/__test__/Thumbnail.spec.ts | 10 +- .../faces-page/AssignFaceSidePanel.svelte | 14 +-- .../components/faces-page/PeopleSearch.svelte | 10 +- .../faces-page/PersonSidePanel.svelte | 20 ++-- .../components/layouts/AdminPageLayout.svelte | 12 +-- .../components/layouts/UserPageLayout.svelte | 10 +- .../MaintenanceBackupEntry.spec.ts | 6 +- .../maintenance/MaintenanceBackupEntry.svelte | 10 +- .../maintenance/MaintenanceBackupsList.svelte | 8 +- .../integrity/IntegrityReportTableItem.svelte | 4 +- .../components/pages/SharedLinkPage.svelte | 20 ++-- .../ServerStatisticsCard.svelte | 2 +- .../share-page/IndividualSharedViewer.svelte | 34 +++--- .../shared-components/Combobox.svelte | 6 +- .../shared-components/CoordinatesInput.svelte | 4 +- .../shared-components/EmptyPlaceholder.svelte | 2 +- .../shared-components/UserAvatar.svelte | 2 +- .../__test__/NumberRangeInput.spec.ts | 2 +- .../album-selection/NewAlbumListItem.svelte | 2 +- .../album-selection-utils.spec.ts | 8 +- .../album-selection/album-selection-utils.ts | 4 +- .../context-menu/ButtonContextMenu.svelte | 14 +-- .../context-menu/ContextMenu.svelte | 4 +- .../context-menu/MenuOption.svelte | 8 +- .../gallery-viewer/GalleryViewer.svelte | 50 ++++----- .../shared-components/map/Map.svelte | 18 ++-- .../navigation-bar/AccountInfoPanel.svelte | 12 +-- .../navigation-bar/NavigationBar.svelte | 20 ++-- .../navigation-bar/NotificationPanel.svelte | 12 +-- .../progress-bar/ProgressBar.svelte | 4 +- .../IndividualPurchaseOptionCard.svelte | 4 +- .../PurchaseActivationSuccess.svelte | 6 +- .../purchasing/PurchaseContent.svelte | 6 +- .../ServerPurchaseOptionCard.svelte | 4 +- .../search-bar/SearchBar.svelte | 14 +-- .../search-bar/SearchCameraSection.svelte | 6 +- .../search-bar/SearchDateSection.svelte | 2 +- .../search-bar/SearchDisplaySection.svelte | 2 +- .../search-bar/SearchFilters.svelte | 4 +- .../search-bar/SearchHistorySection.svelte | 4 +- .../search-bar/SearchLocationSection.svelte | 6 +- .../search-bar/SearchMediaSection.svelte | 4 +- .../search-bar/SearchPeopleSection.svelte | 10 +- .../search-bar/SearchRatingsSection.svelte | 2 +- .../search-bar/SearchTagsSection.spec.ts | 14 +-- .../search-bar/SearchTagsSection.svelte | 6 +- .../search-bar/SearchTextSection.svelte | 6 +- .../search-bar/search-bar-utils.spec.ts | 2 +- .../search-bar/search-bar-utils.ts | 4 +- .../settings/SettingAccordion.svelte | 2 +- .../settings/SettingInputField.spec.ts | 2 +- .../settings/SettingInputField.svelte | 2 +- .../settings/SettingSwitch.svelte | 2 +- .../settings/SettingsLanguageSelector.svelte | 12 +-- .../settings/SystemConfigButtonRow.svelte | 4 +- .../side-bar/PurchaseInfo.svelte | 16 +-- .../side-bar/RecentAlbums.spec.ts | 6 +- .../side-bar/RecentAlbums.svelte | 8 +- .../side-bar/ServerStatus.svelte | 12 +-- .../side-bar/StorageSpace.svelte | 8 +- .../side-bar/UserSidebar.svelte | 16 +-- .../shared-components/tree/Tree.svelte | 6 +- .../tree/TreeBreadcrumbs.svelte | 2 +- .../tree/TreeItemThumbnails.svelte | 2 +- .../shared-components/tree/TreeItems.svelte | 4 +- .../sharedlinks-page/covers/AssetCover.svelte | 4 +- .../sharedlinks-page/covers/NoCover.svelte | 4 +- .../covers/__tests__/AssetCover.spec.ts | 2 +- .../covers/__tests__/NoCover.spec.ts | 2 +- .../lib/components/sidebar/Sidebar.spec.ts | 8 +- web/src/lib/components/sidebar/Sidebar.svelte | 10 +- .../components/timeline/AssetLayout.svelte | 10 +- .../timeline/AssetSelectControlBar.svelte | 4 +- web/src/lib/components/timeline/Month.svelte | 20 ++-- .../lib/components/timeline/Scrubber.svelte | 10 +- .../lib/components/timeline/Timeline.svelte | 58 +++++----- .../timeline/TimelineAssetViewer.svelte | 32 +++--- .../timeline/actions/ArchiveAction.svelte | 8 +- .../timeline/actions/ChangeDateAction.svelte | 8 +- .../actions/ChangeDescriptionAction.svelte | 10 +- .../actions/ChangeLocationAction.svelte | 12 +-- .../actions/DeleteAssetsAction.svelte | 12 +-- .../timeline/actions/DownloadAction.svelte | 12 +-- .../timeline/actions/FavoriteAction.svelte | 8 +- .../actions/LinkLivePhotoAction.svelte | 14 +-- .../actions/RemoveFromSharedLinkAction.svelte | 8 +- .../timeline/actions/SelectAllAction.svelte | 6 +- .../actions/SetVisibilityAction.svelte | 8 +- .../actions/TimelineKeyboardActions.svelte | 38 +++---- .../timeline/actions/focus-actions.ts | 8 +- .../user-settings-page/DeviceCard.svelte | 2 +- .../PinCodeCreateForm.svelte | 2 +- web/src/lib/constants.ts | 2 +- web/src/lib/elements/Dropdown.svelte | 2 +- web/src/lib/elements/FormatMessage.svelte | 2 +- web/src/lib/elements/GroupTab.svelte | 2 +- web/src/lib/elements/Portal.svelte | 2 +- web/src/lib/elements/Skeleton.svelte | 2 +- web/src/lib/elements/SkipLink.svelte | 2 +- web/src/lib/elements/StarRating.svelte | 6 +- .../elements/__test__/FormatMessage.spec.ts | 4 +- .../lib/elements/__test__/FormatTagB.svelte | 2 +- .../lib/elements/__test__/StarRating.spec.ts | 2 +- web/src/lib/i18n.spec.ts | 2 +- web/src/lib/index.spec.ts | 2 +- .../lib/managers/AssetCacheManager.svelte.ts | 4 +- .../lib/managers/accordion-manager.svelte.ts | 10 +- .../managers/activity-manager.svelte.spec.ts | 2 +- .../lib/managers/activity-manager.svelte.ts | 6 +- .../asset-multi-select-manager.svelte.spec.ts | 10 +- .../asset-multi-select-manager.svelte.ts | 6 +- .../managers/asset-viewer-manager.svelte.ts | 12 +-- web/src/lib/managers/auth-manager.svelte.ts | 16 +-- web/src/lib/managers/cast-manager.svelte.ts | 4 +- .../lib/managers/edit/edit-manager.svelte.ts | 10 +- .../managers/edit/transform-manager.svelte.ts | 10 +- web/src/lib/managers/event-manager.svelte.ts | 6 +- .../managers/feature-flags-manager.svelte.ts | 2 +- .../managers/geolocation.manager.svelte.ts | 2 +- .../lib/managers/language-manager.svelte.ts | 6 +- web/src/lib/managers/memory-manager.svelte.ts | 18 ++-- web/src/lib/managers/plugin-manager.svelte.ts | 10 +- web/src/lib/managers/queue-manager.svelte.ts | 4 +- .../lib/managers/release-manager.svelte.ts | 2 +- .../managers/search-manager.svelte.spec.ts | 2 +- web/src/lib/managers/search-manager.svelte.ts | 8 +- .../group-insertion-cache.svelte.ts | 2 +- .../internal/intersection-support.svelte.ts | 2 +- .../internal/load-support.svelte.ts | 4 +- .../internal/search-support.svelte.ts | 2 +- .../internal/websocket-support.svelte.ts | 8 +- .../timeline-manager/timeline-day.svelte.ts | 8 +- .../timeline-manager.svelte.spec.ts | 12 +-- .../timeline-manager.svelte.ts | 32 +++--- .../timeline-manager/timeline-month.svelte.ts | 16 +-- .../lib/managers/timeline-manager/types.ts | 2 +- .../timeline-manager/viewer-asset.svelte.ts | 2 +- web/src/lib/managers/upload-manager.svelte.ts | 6 +- .../user-preferences-manager.svelte.ts | 2 +- web/src/lib/modals/AddUsersModal.svelte | 6 +- web/src/lib/modals/AlbumEditModal.svelte | 6 +- web/src/lib/modals/AlbumOptionsModal.svelte | 18 ++-- web/src/lib/modals/AlbumPickerModal.spec.ts | 10 +- web/src/lib/modals/AlbumPickerModal.svelte | 10 +- web/src/lib/modals/ApiKeyCreateModal.svelte | 8 +- web/src/lib/modals/ApiKeySecretModal.svelte | 2 +- web/src/lib/modals/ApiKeyUpdateModal.svelte | 6 +- .../lib/modals/AssetAddToAlbumModal.svelte | 6 +- .../lib/modals/AssetChangeDateModal.spec.ts | 6 +- .../lib/modals/AssetChangeDateModal.svelte | 10 +- .../lib/modals/AssetDeleteConfirmModal.svelte | 4 +- .../AssetSelectionChangeDateModal.spec.ts | 14 +-- .../AssetSelectionChangeDateModal.svelte | 16 +-- web/src/lib/modals/AssetTagModal.svelte | 2 +- .../AuthDisableLoginConfirmModal.svelte | 2 +- web/src/lib/modals/AvatarEditModal.svelte | 6 +- .../ClusterGroupUserSelectionModal.svelte | 2 +- .../lib/modals/ClusterGroupUsersModal.svelte | 2 +- web/src/lib/modals/CreateFaceModal.svelte | 6 +- .../modals/GeolocationPointPickerModal.svelte | 24 ++--- .../GeolocationUpdateConfirmModal.svelte | 4 +- web/src/lib/modals/JobCreateModal.svelte | 4 +- .../LibraryExclusionPatternAddModal.svelte | 4 +- .../LibraryExclusionPatternEditModal.svelte | 4 +- .../lib/modals/LibraryFolderAddModal.svelte | 4 +- .../lib/modals/LibraryFolderEditModal.svelte | 4 +- web/src/lib/modals/MapModal.svelte | 6 +- web/src/lib/modals/MapSettingsModal.svelte | 2 +- .../lib/modals/MemoriesSettingsModal.svelte | 2 +- web/src/lib/modals/NavigateToDateModal.svelte | 8 +- .../lib/modals/ObtainiumConfigModal.svelte | 4 +- .../lib/modals/PartnerSelectionModal.svelte | 4 +- web/src/lib/modals/PasskeyUpdateModal.svelte | 4 +- .../modals/PasswordResetSuccessModal.svelte | 2 +- web/src/lib/modals/PeopleFilterModal.svelte | 8 +- .../lib/modals/PeopleFilterUserPicker.svelte | 4 +- web/src/lib/modals/PeoplePickerModal.svelte | 10 +- .../lib/modals/PeopleSelectionModal.svelte | 8 +- .../lib/modals/PersonBulkShareModal.svelte | 14 +-- .../lib/modals/PersonEditAccessModal.svelte | 12 +-- web/src/lib/modals/PersonEditModal.svelte | 4 +- .../modals/PersonMergeSuggestionModal.svelte | 4 +- web/src/lib/modals/PinCodeResetModal.svelte | 6 +- web/src/lib/modals/PluginMethodPicker.svelte | 4 +- .../modals/ProfileImageCropperModal.svelte | 4 +- web/src/lib/modals/PurchaseModal.svelte | 4 +- web/src/lib/modals/QrCodeModal.svelte | 4 +- web/src/lib/modals/ServerAboutModal.svelte | 4 +- .../lib/modals/SharedLinkCreateModal.svelte | 8 +- web/src/lib/modals/ShortcutsModal.svelte | 2 +- .../StorageTemplateVariablesModal.svelte | 4 +- web/src/lib/modals/TagCreateModal.svelte | 8 +- web/src/lib/modals/TagEditModal.svelte | 8 +- .../lib/modals/UserDeleteConfirmModal.svelte | 8 +- .../lib/modals/UserRestoreConfirmModal.svelte | 6 +- .../modals/VersionAnnouncementModal.svelte | 2 +- .../lib/modals/WorkflowAddStepModal.svelte | 8 +- .../lib/modals/WorkflowDuplicateModal.svelte | 6 +- .../lib/modals/WorkflowEditStepModal.svelte | 10 +- web/src/lib/modals/WorkflowLogsModal.svelte | 8 +- .../modals/WorkflowTemplatePickerModal.svelte | 8 +- .../lib/modals/WorkflowTriggerPicker.svelte | 4 +- web/src/lib/queries/album.query.ts | 10 +- web/src/lib/queries/api-key.query.ts | 2 +- web/src/lib/queries/client.ts | 10 +- web/src/lib/queries/config-admin.query.ts | 10 +- web/src/lib/queries/library.query.ts | 2 +- web/src/lib/queries/notification.query.ts | 2 +- web/src/lib/queries/passkey.query.ts | 2 +- .../{server.query.ts => server-info.query.ts} | 0 web/src/lib/queries/session.query.ts | 2 +- web/src/lib/queries/shared-link.query.ts | 4 +- web/src/lib/queries/user-admin.query.ts | 4 +- web/src/lib/queries/view.query.ts | 2 +- web/src/lib/queries/workflow.query.ts | 2 +- web/src/lib/route.spec.ts | 4 +- web/src/lib/route.ts | 2 +- web/src/lib/services/album.service.ts | 40 +++---- web/src/lib/services/api-key.service.ts | 12 +-- web/src/lib/services/app.service.ts | 4 +- web/src/lib/services/asset.service.spec.ts | 26 ++--- web/src/lib/services/asset.service.ts | 36 +++---- .../lib/services/database-backups.service.ts | 10 +- web/src/lib/services/integrity.service.ts | 8 +- web/src/lib/services/job.service.ts | 6 +- web/src/lib/services/keyboard.service.ts | 2 +- web/src/lib/services/library.service.ts | 18 ++-- web/src/lib/services/maintenance.service.ts | 4 +- web/src/lib/services/passkey.service.ts | 8 +- web/src/lib/services/person-user.service.ts | 12 +-- web/src/lib/services/person.service.ts | 12 +-- web/src/lib/services/queue.service.ts | 16 +-- .../lib/services/shared-link.service.spec.ts | 6 +- web/src/lib/services/shared-link.service.ts | 14 +-- web/src/lib/services/stack.service.ts | 14 +-- web/src/lib/services/system-config.service.ts | 6 +- web/src/lib/services/tag.service.ts | 12 +-- web/src/lib/services/trash.service.ts | 4 +- web/src/lib/services/user-admin.service.ts | 20 ++-- web/src/lib/services/user.service.ts | 6 +- web/src/lib/services/workflow.service.ts | 16 +-- web/src/lib/stores/face.svelte.ts | 6 +- web/src/lib/stores/ocr.svelte.spec.ts | 4 +- web/src/lib/stores/ocr.svelte.ts | 4 +- web/src/lib/stores/preferences.store.ts | 6 +- web/src/lib/stores/search.svelte.ts | 2 +- web/src/lib/stores/sidebar.svelte.ts | 2 +- web/src/lib/stores/upload.ts | 2 +- web/src/lib/stores/websocket.ts | 18 ++-- web/src/lib/types.ts | 2 +- web/src/lib/utils.spec.ts | 8 +- web/src/lib/utils.ts | 12 +-- web/src/lib/utils/actions.ts | 4 +- .../lib/utils/adaptive-image-loader.spec.ts | 6 +- .../lib/utils/adaptive-image-loader.svelte.ts | 4 +- web/src/lib/utils/album-utils.ts | 16 +-- web/src/lib/utils/asset-utils.ts | 26 ++--- web/src/lib/utils/auth.ts | 4 +- web/src/lib/utils/byte-units.spec.ts | 2 +- web/src/lib/utils/cancellable-task.spec.ts | 2 +- .../utils/cast/gcast-destination.svelte.ts | 4 +- web/src/lib/utils/{server.ts => client.ts} | 12 +-- web/src/lib/utils/container-utils.spec.ts | 2 +- web/src/lib/utils/date-time.spec.ts | 7 +- web/src/lib/utils/date-time.ts | 4 +- web/src/lib/utils/duplicate-utils.ts | 4 +- web/src/lib/utils/editor.spec.ts | 4 +- web/src/lib/utils/editor.ts | 2 +- web/src/lib/utils/executor-queue.spec.ts | 2 +- web/src/lib/utils/executor-queue.ts | 2 +- web/src/lib/utils/file-uploader.spec.ts | 12 +-- web/src/lib/utils/file-uploader.ts | 20 ++-- web/src/lib/utils/i18n.ts | 6 +- web/src/lib/utils/invocationTracker.ts | 2 +- web/src/lib/utils/layout-utils.spec.ts | 2 +- web/src/lib/utils/layout-utils.ts | 8 +- web/src/lib/utils/license-utils.ts | 12 +-- web/src/lib/utils/maintenance.spec.ts | 2 +- web/src/lib/utils/maintenance.ts | 6 +- web/src/lib/utils/navigation.ts | 17 ++- web/src/lib/utils/ocr-utils.spec.ts | 6 +- web/src/lib/utils/ocr-utils.ts | 6 +- web/src/lib/utils/people-utils.spec.ts | 6 +- web/src/lib/utils/people-utils.ts | 6 +- web/src/lib/utils/persisted.ts | 2 +- web/src/lib/utils/places-utils.ts | 2 +- web/src/lib/utils/purchase-utils.ts | 2 +- web/src/lib/utils/shared-links.ts | 8 +- web/src/lib/utils/thumbnail-util.spec.ts | 6 +- web/src/lib/utils/thumbnail-util.ts | 6 +- web/src/lib/utils/timeline-util.spec.ts | 6 +- web/src/lib/utils/timeline-util.ts | 6 +- web/src/lib/utils/tunables.ts | 2 +- web/src/lib/utils/wakelock.svelte.ts | 2 +- web/src/lib/utils/workflow.spec.ts | 2 +- web/src/lib/utils/workflow.ts | 2 +- web/src/params.ts | 17 +++ web/src/params/id.ts | 7 -- web/src/params/photos.ts | 5 - web/src/routes/(user)/+layout.svelte | 2 +- web/src/routes/(user)/+layout.ts | 4 +- .../(user)/DragAndDropUploadOverlay.svelte | 10 +- web/src/routes/(user)/albums/+page.svelte | 22 ++-- web/src/routes/(user)/albums/+page.ts | 8 +- .../(user)/albums/AlbumsControls.svelte | 10 +- .../[[assetId=id]]/+page.svelte | 100 ++++++++++-------- .../[[photos=photos]]/[[assetId=id]]/+page.ts | 6 +- .../[[assetId=id]]/AlbumDescription.svelte | 6 +- .../[[assetId=id]]/AlbumTitle.svelte | 6 +- .../[[assetId=id]]/+page.svelte | 30 +++--- .../[[photos=photos]]/[[assetId=id]]/+page.ts | 4 +- web/src/routes/(user)/buy/+page.svelte | 10 +- web/src/routes/(user)/buy/+page.ts | 8 +- web/src/routes/(user)/explore/+page.svelte | 30 +++--- web/src/routes/(user)/explore/+page.ts | 6 +- .../[[assetId=id]]/+page.svelte | 36 +++---- .../[[photos=photos]]/[[assetId=id]]/+page.ts | 4 +- .../[[assetId=id]]/+page.svelte | 72 +++++++------ .../[[photos=photos]]/[[assetId=id]]/+page.ts | 10 +- .../[[assetId=id]]/+page.svelte | 34 +++--- .../[[photos=photos]]/[[assetId=id]]/+page.ts | 6 +- .../[[assetId=id]]/+page.svelte | 28 ++--- .../[[photos=photos]]/[[assetId=id]]/+page.ts | 4 +- .../[[assetId=id]]/MapTimelinePanel.svelte | 44 ++++---- web/src/routes/(user)/memories/+page.svelte | 22 ++-- web/src/routes/(user)/memories/+page.ts | 6 +- .../[[photos=photos]]/[[assetId=id]]/+page.ts | 10 +- .../[[assetId=id]]/MemoryPhotoViewer.svelte | 10 +- .../[[assetId=id]]/MemoryVideoViewer.svelte | 8 +- .../[[assetId=id]]/MemoryViewer.svelte | 56 +++++----- .../[[photos=photos]]/[[assetId=id]]/+page.ts | 2 +- .../[[assetId=id]]/+page.svelte | 14 +-- .../[[photos=photos]]/[[assetId=id]]/+page.ts | 4 +- web/src/routes/(user)/people/+page.svelte | 47 ++++---- web/src/routes/(user)/people/+page.ts | 8 +- .../routes/(user)/people/PeopleCard.svelte | 10 +- .../[[assetId=id]]/+page.svelte | 95 +++++++++-------- .../[[photos=photos]]/[[assetId=id]]/+page.ts | 4 +- .../[[assetId=id]]/EditNameInput.svelte | 4 +- .../[[assetId=id]]/FaceThumbnail.svelte | 4 +- .../[[assetId=id]]/MergeFaceSelector.svelte | 6 +- .../[[assetId=id]]/PeopleList.svelte | 2 +- .../[[assetId=id]]/UnmergeFaceSelector.svelte | 6 +- .../routes/(user)/people/manage/+page.svelte | 12 +-- web/src/routes/(user)/people/manage/+page.ts | 2 +- .../manage/ManagePeopleVisibility.spec.ts | 10 +- .../(user)/photos/[[assetId=id]]/+page.ts | 4 +- web/src/routes/(user)/places/+page.svelte | 6 +- web/src/routes/(user)/places/+page.ts | 4 +- .../(user)/places/PlacesCardGroup.svelte | 8 +- .../(user)/places/PlacesControls.svelte | 6 +- .../routes/(user)/places/PlacesList.svelte | 6 +- .../[[assetId=id]]/+page.svelte | 48 ++++----- .../[[photos=photos]]/[[assetId=id]]/+page.ts | 4 +- web/src/routes/(user)/s/[slug]/+error.svelte | 2 +- .../[[assetId=id]]/+page.svelte | 2 +- .../[[photos=photos]]/[[assetId=id]]/+page.ts | 2 +- .../[[assetId=id]]/+page.svelte | 65 ++++++------ .../[[photos=photos]]/[[assetId=id]]/+page.ts | 4 +- .../routes/(user)/share/[key]/+error.svelte | 2 +- .../[[assetId=id]]/+page.svelte | 2 +- .../[[photos=photos]]/[[assetId=id]]/+page.ts | 2 +- .../(user)/shared-links/(list)/+layout.svelte | 16 +-- .../(user)/shared-links/(list)/+layout.ts | 8 +- .../(user)/shared-links/(list)/+page.ts | 4 +- .../shared-links/(list)/ShareCover.spec.ts | 10 +- .../shared-links/(list)/ShareCover.svelte | 8 +- .../shared-links/(list)/SharedLinkCard.svelte | 6 +- .../shared-links/(list)/[id]/+layout.ts | 12 +-- .../(list)/[id]/edit/+page.svelte | 8 +- .../shared-links/(list)/[id]/edit/+page.ts | 4 +- web/src/routes/(user)/sharing/+page.svelte | 22 ++-- web/src/routes/(user)/sharing/+page.ts | 8 +- .../(user)/sharing/sharedlinks/+page.ts | 2 +- .../[[assetId=id]]/+page.svelte | 54 +++++----- .../[[photos=photos]]/[[assetId=id]]/+page.ts | 6 +- .../[[assetId=id]]/+page.svelte | 28 ++--- .../[[photos=photos]]/[[assetId=id]]/+page.ts | 4 +- .../[[assetId=id]]/RestoreAction.svelte | 6 +- .../routes/(user)/user-settings/+page.svelte | 4 +- web/src/routes/(user)/user-settings/+page.ts | 12 +-- .../(user)/user-settings/AppSettings.svelte | 10 +- .../ChangePasswordSettings.svelte | 2 +- .../(user)/user-settings/DeviceList.svelte | 6 +- .../user-settings/DownloadSettings.svelte | 12 +-- .../user-settings/FeatureSettings.svelte | 10 +- .../NotificationsSettings.svelte | 4 +- .../(user)/user-settings/OAuthSettings.svelte | 10 +- .../user-settings/PinCodeChangeForm.svelte | 4 +- .../user-settings/PinCodeSettings.svelte | 4 +- .../user-settings/SettingCombobox.svelte | 2 +- .../user-settings/SharingSettings.svelte | 18 ++-- .../user-settings/UserApiKeyList.svelte | 12 +-- .../user-settings/UserPasskeyList.svelte | 12 +-- .../user-settings/UserProfileSettings.svelte | 4 +- .../user-settings/UserPurchaseSettings.svelte | 18 ++-- .../user-settings/UserSettingsList.svelte | 15 ++- .../user-settings/UserUsageStatistic.svelte | 10 +- web/src/routes/(user)/utilities/+page.svelte | 2 +- web/src/routes/(user)/utilities/+page.ts | 4 +- .../(user)/utilities/UtilitiesMenu.svelte | 6 +- .../[[assetId=id]]/+page.svelte | 22 ++-- .../[[photos=photos]]/[[assetId=id]]/+page.ts | 4 +- .../[[assetId=id]]/DuplicateAsset.svelte | 12 +-- .../DuplicatesCompareControl.svelte | 18 ++-- .../[[assetId=id]]/LinkToDocs.svelte | 2 +- .../(user)/utilities/geolocation/+page.svelte | 32 +++--- .../(user)/utilities/geolocation/+page.ts | 4 +- .../geolocation/photos/[photoId]/+page.ts | 2 +- .../[[assetId=id]]/+page.svelte | 18 ++-- .../[[photos=photos]]/[[assetId=id]]/+page.ts | 4 +- .../[[assetId=id]]/LargeAssetData.svelte | 6 +- web/src/routes/(user)/workflows/+page.svelte | 18 ++-- web/src/routes/(user)/workflows/+page.ts | 10 +- .../workflows/[workflowId]/+page.svelte | 22 ++-- .../(user)/workflows/[workflowId]/+page.ts | 12 +-- .../[workflowId]/WorkflowStepCard.svelte | 8 +- .../[workflowId]/WorkflowSummary.svelte | 4 +- web/src/routes/+layout.svelte | 32 +++--- web/src/routes/+layout.ts | 10 +- web/src/routes/+page.svelte | 8 +- web/src/routes/+page.ts | 12 +-- web/src/routes/DownloadPanel.svelte | 8 +- web/src/routes/ErrorLayout.svelte | 2 +- web/src/routes/UploadAssetPreview.svelte | 14 +-- web/src/routes/UploadPanel.svelte | 8 +- web/src/routes/VersionAnnouncement.svelte | 8 +- web/src/routes/admin/+layout.ts | 2 +- web/src/routes/admin/+page.ts | 2 +- web/src/routes/admin/jobs-status/+page.ts | 2 +- .../library-management/(list)/+layout.svelte | 14 +-- .../library-management/(list)/+layout.ts | 10 +- .../(list)/LibraryTableRow.svelte | 16 +-- .../(list)/new/+page.svelte | 10 +- .../library-management/(list)/new/+page.ts | 4 +- .../library-management/[id]/+layout.svelte | 24 ++--- .../admin/library-management/[id]/+layout.ts | 10 +- .../admin/library-management/[id]/+page.ts | 4 +- .../library-management/[id]/edit/+page.svelte | 6 +- .../library-management/[id]/edit/+page.ts | 4 +- web/src/routes/admin/maintenance/+page.svelte | 16 +-- web/src/routes/admin/maintenance/+page.ts | 4 +- .../integrity-report/[type]/+page.svelte | 12 +-- .../integrity-report/[type]/+page.ts | 4 +- web/src/routes/admin/queues/+page.svelte | 8 +- web/src/routes/admin/queues/+page.ts | 4 +- web/src/routes/admin/queues/QueueCard.svelte | 10 +- web/src/routes/admin/queues/QueuePanel.svelte | 10 +- .../QueueStorageMigrationDescription.svelte | 6 +- .../routes/admin/queues/[name]/+page.svelte | 8 +- web/src/routes/admin/queues/[name]/+page.ts | 6 +- .../admin/queues/[name]/QueueGraph.svelte | 6 +- .../routes/admin/server-status/+page.svelte | 2 +- web/src/routes/admin/server-status/+page.ts | 10 +- .../ServerStatisticsPanel.svelte | 12 +-- .../routes/admin/system-settings/+page.svelte | 16 +-- web/src/routes/admin/system-settings/+page.ts | 8 +- .../admin/system-settings/AuthSettings.svelte | 22 ++-- .../system-settings/BackupSettings.svelte | 16 +-- .../system-settings/FFmpegSettings.svelte | 18 ++-- .../system-settings/ImageSettings.svelte | 16 +-- .../IntegrityChecksSettings.svelte | 18 ++-- .../admin/system-settings/JobSettings.svelte | 12 +-- .../system-settings/LibrarySettings.svelte | 18 ++-- .../system-settings/LoggingSettings.svelte | 10 +- .../MachineLearningSettings.svelte | 18 ++-- .../admin/system-settings/MapSettings.svelte | 18 ++-- .../system-settings/MetadataSettings.svelte | 10 +- .../NewVersionCheckSettings.svelte | 10 +- .../NightlyTasksSettings.svelte | 14 +-- .../NotificationSettings.svelte | 20 ++-- .../system-settings/ServerSettings.svelte | 14 +-- .../system-settings/TemplateSettings.svelte | 12 +-- .../system-settings/ThemeSettings.svelte | 8 +- .../system-settings/TrashSettings.svelte | 14 +-- .../admin/system-settings/UserSettings.svelte | 12 +-- web/src/routes/admin/user-management/+page.ts | 2 +- .../routes/admin/users/(list)/+layout.svelte | 14 +-- web/src/routes/admin/users/(list)/+layout.ts | 8 +- .../admin/users/(list)/new/+page.svelte | 12 +-- .../routes/admin/users/(list)/new/+page.ts | 4 +- .../routes/admin/users/[id]/+layout.svelte | 30 +++--- web/src/routes/admin/users/[id]/+layout.ts | 12 +-- web/src/routes/admin/users/[id]/+page.ts | 4 +- .../routes/admin/users/[id]/edit/+page.svelte | 12 +-- web/src/routes/admin/users/[id]/edit/+page.ts | 4 +- .../routes/auth/change-password/+page.svelte | 8 +- web/src/routes/auth/change-password/+page.ts | 8 +- web/src/routes/auth/login/+page.svelte | 20 ++-- web/src/routes/auth/login/+page.ts | 10 +- web/src/routes/auth/logout/+page.svelte | 2 +- web/src/routes/auth/onboarding/+page.svelte | 10 +- web/src/routes/auth/onboarding/+page.ts | 4 +- .../auth/onboarding/OnboardingBackup.svelte | 2 +- .../auth/onboarding/OnboardingCard.svelte | 2 +- .../auth/onboarding/OnboardingHello.svelte | 8 +- .../auth/onboarding/OnboardingLanguage.svelte | 2 +- .../onboarding/OnboardingMobileApp.svelte | 4 +- .../onboarding/OnboardingServerPrivacy.svelte | 6 +- .../OnboardingStorageTemplate.svelte | 6 +- .../auth/onboarding/OnboardingTheme.svelte | 2 +- .../onboarding/OnboardingUserPrivacy.svelte | 6 +- web/src/routes/auth/pin-prompt/+page.svelte | 8 +- web/src/routes/auth/pin-prompt/+page.ts | 6 +- web/src/routes/auth/register/+page.svelte | 10 +- web/src/routes/auth/register/+page.ts | 8 +- web/src/routes/link/+page.ts | 4 +- web/src/routes/maintenance/+page.svelte | 8 +- web/src/routes/maintenance/+page.ts | 2 +- .../RestoreFlowSelectBackup.svelte | 2 +- web/src/service-worker/index.ts | 5 - web/src/service-worker/messaging.ts | 4 - web/src/service-worker/request.ts | 5 - web/src/service-worker/tsconfig.json | 1 + web/src/test-data/factories/asset-factory.ts | 4 +- web/svelte.config.js | 46 -------- web/tests/helpers.ts | 2 +- web/tsconfig.json | 19 ++-- web/vite.config.ts | 37 ++++++- 619 files changed, 2898 insertions(+), 2883 deletions(-) create mode 100644 web/src/env.ts rename web/src/lib/queries/{server.query.ts => server-info.query.ts} (100%) rename web/src/lib/utils/{server.ts => client.ts} (62%) create mode 100644 web/src/params.ts delete mode 100644 web/src/params/id.ts delete mode 100644 web/src/params/photos.ts create mode 100644 web/src/service-worker/tsconfig.json delete mode 100644 web/svelte.config.js diff --git a/e2e/src/specs/web/shared-link.e2e-spec.ts b/e2e/src/specs/web/shared-link.e2e-spec.ts index acd793039..67f6de1f3 100644 --- a/e2e/src/specs/web/shared-link.e2e-spec.ts +++ b/e2e/src/specs/web/shared-link.e2e-spec.ts @@ -103,7 +103,7 @@ test.describe('Shared Links', () => { test('show error for invalid shared link', async ({ page }) => { await page.goto('/share/invalid'); - await page.getByRole('heading', { name: 'Invalid share key' }).waitFor(); + await page.getByRole('heading', { name: 'Page not found' }).waitFor(); }); test('auth on navigation from shared link to timeline', async ({ context, page }) => { diff --git a/web/.prettierrc b/web/.prettierrc index e809bd509..c19bf13b1 100644 --- a/web/.prettierrc +++ b/web/.prettierrc @@ -1,5 +1,5 @@ { - "importOrder": ["", "", "^\\$(.*)$", "^@test-data(.*)$", "^[./]"], + "importOrder": ["", "", "^\\$(.*)$", "^#test-data(.*)$", "^[./]"], "importOrderSeparation": false, "jsonRecursiveSort": true, "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }], diff --git a/web/eslint.config.js b/web/eslint.config.js index 048f42d3a..d9097cd46 100644 --- a/web/eslint.config.js +++ b/web/eslint.config.js @@ -53,7 +53,7 @@ export default defineConfig( tsconfigRootDir: import.meta.dirname, }, }, - // ignores: ['**/service-worker/**'], + ignores: ['**/service-worker/**'], }, { ignores: [ @@ -74,6 +74,7 @@ export default defineConfig( 'tailwind.config.js', 'coverage', 'vite.config.ts', + '**/service-worker/**', ], }, typescriptEslint.configs.recommended, diff --git a/web/package.json b/web/package.json index 9855cca44..c151ebe5b 100644 --- a/web/package.json +++ b/web/package.json @@ -3,6 +3,14 @@ "version": "3.3.5", "license": "GNU Affero General Public License version 3", "type": "module", + "imports": { + "#lib": "./src/lib/index.js", + "#lib/*": "./src/lib/*", + "#tests": "./src/../tests", + "#tests/*": "./src/../tests/*", + "#i18n/*": "../i18n/*", + "#test-data/*": "./src/test-data/*" + }, "scripts": { "dev": "vite dev --host 0.0.0.0 --port 3000", "build": "vite build", @@ -78,9 +86,9 @@ "@faker-js/faker": "^10.0.0", "@koddsson/eslint-plugin-tscompat": "^0.2.0", "@socket.io/component-emitter": "^3.1.0", - "@sveltejs/adapter-static": "^3.0.8", + "@sveltejs/adapter-static": "^4.0.0", "@sveltejs/enhanced-img": "^0.11.0", - "@sveltejs/kit": "^2.56.1", + "@sveltejs/kit": "^3.0.0", "@sveltejs/vite-plugin-svelte": "7.3.1", "@tailwindcss/vite": "^4.2.4", "@testing-library/jest-dom": "^7.0.0", @@ -110,13 +118,13 @@ "prettier-plugin-sort-json": "^4.1.1", "prettier-plugin-svelte": "^4.0.0", "rollup-plugin-visualizer": "^7.0.0", - "svelte": "5.57.1", - "svelte-check": "^4.4.6", + "svelte": "5.57.2", + "svelte-check": "^4.7.5", "svelte-eslint-parser": "^1.8.1", "tailwindcss": "^4.2.4", "typescript": "npm:@typescript/typescript6@^6.0.2", "typescript-eslint": "8.71.2", - "vite": "^8.0.0", + "vite": "^8.0.12", "vitest": "^5.0.0" } } diff --git a/web/src/app.d.ts b/web/src/app.d.ts index 1a0c85be0..e2bdac7a8 100644 --- a/web/src/app.d.ts +++ b/web/src/app.d.ts @@ -1,5 +1,5 @@ +import type en from '#i18n/en.json'; import 'svelte-i18n'; -import type en from '$i18n/en.json'; /// @@ -34,7 +34,7 @@ type NestedKeys = K extends keyof T & string : never; declare module 'svelte-i18n' { - import type { InterpolationValues } from '$lib/elements/format-message'; + import type { InterpolationValues } from '#lib/elements/format-message.js'; import type { Readable } from 'svelte/store'; type Translations = NestedKeys; diff --git a/web/src/env.ts b/web/src/env.ts new file mode 100644 index 000000000..a772b33e3 --- /dev/null +++ b/web/src/env.ts @@ -0,0 +1,6 @@ +import { defineEnvVars } from '@sveltejs/kit/env'; + +export const variables = defineEnvVars({ + PUBLIC_IMMICH_BUY_HOST: { public: true, static: true }, + PUBLIC_IMMICH_PAY_HOST: { public: true, static: true }, +}); diff --git a/web/src/hooks.client.ts b/web/src/hooks.client.ts index 3593ffadc..8755278b5 100644 --- a/web/src/hooks.client.ts +++ b/web/src/hooks.client.ts @@ -1,5 +1,5 @@ import { isHttpError, type ApiHttpError } from '@immich/sdk'; -import type { HandleClientError } from '@sveltejs/kit'; +import type { HandleClientError } from '@sveltejs/kit/hooks'; const DEFAULT_MESSAGE = 'Hmm, not sure about that. Check the logs or open a ticket?'; @@ -19,19 +19,23 @@ const parseHTTPError = (httpError: ApiHttpError) => { }; }; -const parseError = (error: unknown, status: number, message: string) => { +const parseError = (error: App.Error | { status: number; message: string }) => { if (isHttpError(error)) { return parseHTTPError(error); } return { - message: (error as Error)?.message || message || DEFAULT_MESSAGE, - code: status, + message: error.message || DEFAULT_MESSAGE, + code: error.status, }; }; -export const handleError: HandleClientError = ({ error, status, message }) => { - const result = parseError(error, status, message); +export const handleError: HandleClientError = ({ kind, error }) => { + if (kind === 'unknown') { + console.error(error); + return; + } + const result = parseError(error); console.error(`[hooks.client.ts]:handleError ${result.message}`, error); return result; }; diff --git a/web/src/hooks.server.ts b/web/src/hooks.server.ts index 17b94eda1..ef35dd349 100644 --- a/web/src/hooks.server.ts +++ b/web/src/hooks.server.ts @@ -1,6 +1,6 @@ -import type { Handle } from '@sveltejs/kit'; -import GoogleSans from '$lib/assets/fonts/GoogleSans/GoogleSans.ttf?url'; -import GoogleSansCode from '$lib/assets/fonts/GoogleSansCode/GoogleSansCode.ttf?url'; +import GoogleSans from '#lib/assets/fonts/GoogleSans/GoogleSans.ttf?url'; +import GoogleSansCode from '#lib/assets/fonts/GoogleSansCode/GoogleSansCode.ttf?url'; +import type { Handle } from '@sveltejs/kit/hooks'; // only used during the build to replace the variables from app.html export const handle = (async ({ event, resolve }) => { diff --git a/web/src/lib/actions/__test__/FocusTrap.spec.ts b/web/src/lib/actions/__test__/FocusTrap.spec.ts index 6e9957d8b..b8a0da845 100644 --- a/web/src/lib/actions/__test__/FocusTrap.spec.ts +++ b/web/src/lib/actions/__test__/FocusTrap.spec.ts @@ -1,8 +1,8 @@ +import FocusTrapTest from '#lib/actions/__test__/FocusTrapTest.svelte'; +import { setDefaultTabbleOptions } from '#lib/utils/focus-util.js'; import { render, screen } from '@testing-library/svelte'; import userEvent from '@testing-library/user-event'; import { tick } from 'svelte'; -import FocusTrapTest from '$lib/actions/__test__/FocusTrapTest.svelte'; -import { setDefaultTabbleOptions } from '$lib/utils/focus-util'; setDefaultTabbleOptions({ displayCheck: 'none' }); diff --git a/web/src/lib/actions/__test__/FocusTrapTest.svelte b/web/src/lib/actions/__test__/FocusTrapTest.svelte index a19d2b75d..f24adb465 100644 --- a/web/src/lib/actions/__test__/FocusTrapTest.svelte +++ b/web/src/lib/actions/__test__/FocusTrapTest.svelte @@ -1,5 +1,5 @@ refreshAlbum()} /> +
@@ -351,6 +356,7 @@
{/if} + {/if} @@ -393,13 +399,15 @@ {const Actions = $derived(getAssetBulkActions($t, album))} + + {#if assetMultiSelectManager.isAllUserOwned} timelineManager.update(ids, (asset) => (asset.isFavorite = isFavorite))} - > + /> {/if} @@ -447,7 +455,7 @@ oldAt = { at: assetViewerManager.gridScrollTarget?.at }; await navigate( { targetRoute: 'current', assetId: null, assetGridRouteSearchParams: { at: null } }, - { replaceState: true }, + { replace: true }, ); }} icon={mdiImagePlusOutline} diff --git a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.ts b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.ts index 1f4bea58a..469054612 100644 --- a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.ts +++ b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.ts @@ -1,6 +1,6 @@ -import { getAlbumInfoQuery } from '$lib/queries/album.query'; -import { queryClient } from '$lib/queries/client'; -import { authenticate } from '$lib/utils/auth'; +import { getAlbumInfoQuery } from '#lib/queries/album.query.js'; +import { queryClient } from '#lib/queries/client.js'; +import { authenticate } from '#lib/utils/auth.js'; import type { PageLoad } from './$types'; export const load = (async ({ params, url }) => { diff --git a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/AlbumDescription.svelte b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/AlbumDescription.svelte index d8556a0c3..6b90f3702 100644 --- a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/AlbumDescription.svelte +++ b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/AlbumDescription.svelte @@ -1,7 +1,7 @@ diff --git a/web/src/routes/(user)/s/[slug]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/s/[slug]/[[photos=photos]]/[[assetId=id]]/+page.svelte index 25c24ab02..7bfa85b21 100644 --- a/web/src/routes/(user)/s/[slug]/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/s/[slug]/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -1,5 +1,5 @@ - {#if searchTermKeys.length > 0} @@ -379,7 +380,9 @@ + +
diff --git a/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.ts b/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.ts index 56a8a33c1..ce42516cc 100644 --- a/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.ts +++ b/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.ts @@ -1,5 +1,5 @@ -import { authenticate } from '$lib/utils/auth'; -import { getFormatter } from '$lib/utils/i18n'; +import { authenticate } from '#lib/utils/auth.js'; +import { getFormatter } from '#lib/utils/i18n.js'; import type { PageLoad } from './$types'; export const load = (async ({ url }) => { diff --git a/web/src/routes/(user)/share/[key]/+error.svelte b/web/src/routes/(user)/share/[key]/+error.svelte index 2c4d2a4d0..e6b9d5320 100644 --- a/web/src/routes/(user)/share/[key]/+error.svelte +++ b/web/src/routes/(user)/share/[key]/+error.svelte @@ -1,5 +1,5 @@ diff --git a/web/src/routes/(user)/share/[key]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/share/[key]/[[photos=photos]]/[[assetId=id]]/+page.svelte index 25c24ab02..7bfa85b21 100644 --- a/web/src/routes/(user)/share/[key]/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/share/[key]/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -1,5 +1,5 @@ - import { getHeatmapRange } from '$lib'; - import CalendarHeatmap from '$lib/components/CalendarHeatmap.svelte'; - import Skeleton from '$lib/elements/Skeleton.svelte'; - import { getAlbumStatisticsQuery } from '$lib/queries/album.query'; - import { locale } from '$lib/stores/preferences.store'; + import { getHeatmapRange } from '#lib'; + import CalendarHeatmap from '#lib/components/CalendarHeatmap.svelte'; + import Skeleton from '#lib/elements/Skeleton.svelte'; + import { getAlbumStatisticsQuery } from '#lib/queries/album.query.js'; + import { locale } from '#lib/stores/preferences.store.js'; import { AssetVisibility, CalendarHeatmapType, diff --git a/web/src/routes/(user)/utilities/+page.svelte b/web/src/routes/(user)/utilities/+page.svelte index a1cc50cb4..09950c2ae 100644 --- a/web/src/routes/(user)/utilities/+page.svelte +++ b/web/src/routes/(user)/utilities/+page.svelte @@ -1,5 +1,5 @@ diff --git a/web/src/routes/admin/queues/[name]/+page.svelte b/web/src/routes/admin/queues/[name]/+page.svelte index ed579445a..a2c5a50d6 100644 --- a/web/src/routes/admin/queues/[name]/+page.svelte +++ b/web/src/routes/admin/queues/[name]/+page.svelte @@ -1,9 +1,9 @@ diff --git a/web/src/routes/auth/onboarding/OnboardingMobileApp.svelte b/web/src/routes/auth/onboarding/OnboardingMobileApp.svelte index 27e24d17e..736a57332 100644 --- a/web/src/routes/auth/onboarding/OnboardingMobileApp.svelte +++ b/web/src/routes/auth/onboarding/OnboardingMobileApp.svelte @@ -1,6 +1,6 @@ diff --git a/web/src/routes/auth/onboarding/OnboardingTheme.svelte b/web/src/routes/auth/onboarding/OnboardingTheme.svelte index fba2a6d4d..50b4e3a91 100644 --- a/web/src/routes/auth/onboarding/OnboardingTheme.svelte +++ b/web/src/routes/auth/onboarding/OnboardingTheme.svelte @@ -1,5 +1,5 @@ diff --git a/web/src/routes/auth/onboarding/OnboardingUserPrivacy.svelte b/web/src/routes/auth/onboarding/OnboardingUserPrivacy.svelte index 600e6abea..eb3a4acee 100644 --- a/web/src/routes/auth/onboarding/OnboardingUserPrivacy.svelte +++ b/web/src/routes/auth/onboarding/OnboardingUserPrivacy.svelte @@ -1,7 +1,7 @@