chore: migrate web imports from .js to .ts (#32742)

(cherry picked from commit f97c2243fbe5f64a4e1bf96128b82a37cc481506)
This commit is contained in:
Daniel Dietzler
2026-10-27 23:11:20 +03:00
committed by Codex
parent e5b4dd1041
commit 8125af4859
547 changed files with 1876 additions and 1876 deletions
+1 -1
View File
@@ -34,7 +34,7 @@ type NestedKeys<T, K = keyof T> = K extends keyof T & string
: never;
declare module 'svelte-i18n' {
import type { InterpolationValues } from '#lib/elements/format-message.js';
import type { InterpolationValues } from '#lib/elements/format-message.ts';
import type { Readable } from 'svelte/store';
type Translations = NestedKeys<typeof en>;
@@ -1,5 +1,5 @@
import FocusTrapTest from '#lib/actions/__test__/FocusTrapTest.svelte';
import { setDefaultTabbleOptions } from '#lib/utils/focus-util.js';
import { setDefaultTabbleOptions } from '#lib/utils/focus-util.ts';
import { render, screen } from '@testing-library/svelte';
import userEvent from '@testing-library/user-event';
import { tick } from 'svelte';
@@ -1,5 +1,5 @@
<script lang="ts">
import { focusTrap } from '#lib/actions/focus-trap.js';
import { focusTrap } from '#lib/actions/focus-trap.ts';
interface Props {
show: boolean;
+1 -1
View File
@@ -1,4 +1,4 @@
import { matchesShortcut } from '#lib/actions/shortcut.js';
import { matchesShortcut } from '#lib/actions/shortcut.ts';
import type { ActionReturn } from 'svelte/action';
interface Options {
@@ -1,4 +1,4 @@
import { shortcuts } from '#lib/actions/shortcut.js';
import { shortcuts } from '#lib/actions/shortcut.ts';
import { tick } from 'svelte';
import type { Action } from 'svelte/action';
+1 -1
View File
@@ -1,4 +1,4 @@
import { getTabbable } from '#lib/utils/focus-util.js';
import { getTabbable } from '#lib/utils/focus-util.ts';
import { tick } from 'svelte';
interface Options {
+1 -1
View File
@@ -1,4 +1,4 @@
import { cancelImageUrl } from '#lib/utils/sw-messaging.js';
import { cancelImageUrl } from '#lib/utils/sw-messaging.ts';
export function loadImage(src: string, onLoad: () => void, onError: () => void, onStart?: () => void) {
let destroyed = false;
+1 -1
View File
@@ -1,4 +1,4 @@
import { shortcuts } from '#lib/actions/shortcut.js';
import { shortcuts } from '#lib/actions/shortcut.ts';
import type { Action } from 'svelte/action';
/**
+2 -2
View File
@@ -1,5 +1,5 @@
import { SessionStorageKey } from '#lib/constants.js';
import { handlePromiseError } from '#lib/utils.js';
import { SessionStorageKey } from '#lib/constants.ts';
import { handlePromiseError } from '#lib/utils.ts';
import { navigating } from '$app/state';
interface Options {
+1 -1
View File
@@ -1,4 +1,4 @@
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.js';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.ts';
import { createZoomImageWheel } from '@zoom-image/core';
// Minimal touch shape — avoids importing DOM TouchEvent which isn't available in all TS targets.
+5 -5
View File
@@ -1,8 +1,8 @@
import { authManager } from '#lib/managers/auth-manager.svelte.js';
import { readPreloadedQuery } from '#lib/queries/client.js';
import { getUserConfigQuery } from '#lib/queries/config-user.query.js';
import { Route } from '#lib/route.js';
import { copyToClipboard } from '#lib/utils.js';
import { authManager } from '#lib/managers/auth-manager.svelte.ts';
import { readPreloadedQuery } from '#lib/queries/client.ts';
import { getUserConfigQuery } from '#lib/queries/config-user.query.ts';
import { Route } from '#lib/route.ts';
import { copyToClipboard } from '#lib/utils.ts';
import { defaultProvider, screencastManager, themeManager, ThemePreference, type ActionItem } from '@immich/ui';
import {
mdiAccountMultipleOutline,
+1 -1
View File
@@ -1,6 +1,6 @@
<script lang="ts">
import MenuOption from '#lib/components/shared-components/context-menu/MenuOption.svelte';
import { isEnabled } from '#lib/utils.js';
import { isEnabled } from '#lib/utils.ts';
import { type ActionItem } from '@immich/ui';
type Props = {
+8 -8
View File
@@ -1,5 +1,5 @@
<script module lang="ts">
import { TUNABLES } from '#lib/utils/tunables.js';
import { TUNABLES } from '#lib/utils/tunables.ts';
// Chrome renders HDR images with normally invisible seam lines in a regular
// grid pattern. When the user pinch/scroll zooms, these seams become visible
@@ -55,15 +55,15 @@
import DelayedLoadingSpinner from '#lib/components/DelayedLoadingSpinner.svelte';
import ImageLayer from '#lib/components/ImageLayer.svelte';
import Thumbhash from '#lib/components/Thumbhash.svelte';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.js';
import { getAssetUrls } from '#lib/utils.js';
import { AdaptiveImageLoader, type QualityList } from '#lib/utils/adaptive-image-loader.svelte.js';
import { scaleToCover, scaleToFit, type Size } from '#lib/utils/container-utils.js';
import { getAltText } from '#lib/utils/thumbnail-util.js';
import { toTimelineAsset } from '#lib/utils/timeline-util.js';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.ts';
import { getAssetUrls } from '#lib/utils.ts';
import { AdaptiveImageLoader, type QualityList } from '#lib/utils/adaptive-image-loader.svelte.ts';
import { scaleToCover, scaleToFit, type Size } from '#lib/utils/container-utils.ts';
import { getAltText } from '#lib/utils/thumbnail-util.ts';
import { toTimelineAsset } from '#lib/utils/timeline-util.ts';
import type { AssetResponseDto, SharedLinkResponseDto } from '@immich/sdk';
import { untrack, type Snippet } from 'svelte';
import { languageManager } from '#lib/managers/language-manager.svelte.js';
import { languageManager } from '#lib/managers/language-manager.svelte.ts';
type Props = {
asset: AssetResponseDto;
@@ -1,6 +1,6 @@
<script lang="ts">
import { assetViewerManager, type Events } from '#lib/managers/asset-viewer-manager.svelte.js';
import type { EventCallback, EventMap } from '#lib/utils/base-event-manager.svelte.js';
import { assetViewerManager, type Events } from '#lib/managers/asset-viewer-manager.svelte.ts';
import type { EventCallback, EventMap } from '#lib/utils/base-event-manager.svelte.ts';
import { onMount } from 'svelte';
type Props = {
@@ -1,5 +1,5 @@
<script lang="ts">
import type { HeaderButtonActionItem } from '#lib/types.js';
import type { HeaderButtonActionItem } from '#lib/types.ts';
import {
Breadcrumbs,
Button,
@@ -1,5 +1,5 @@
<script lang="ts">
import { locale } from '#lib/stores/preferences.store.js';
import { locale } from '#lib/stores/preferences.store.ts';
import type { CalendarHeatmapResponseDto } from '@immich/sdk';
import { Text } from '@immich/ui';
import { DateTime, Info } from 'luxon';
@@ -1,5 +1,5 @@
<script lang="ts">
import type { HeaderButtonActionItem } from '#lib/types.js';
import type { HeaderButtonActionItem } from '#lib/types.ts';
import { Button, type Variants } from '@immich/ui';
type Props = {
+1 -1
View File
@@ -1,5 +1,5 @@
import Image from '#lib/components/Image.svelte';
import { cancelImageUrl } from '#lib/utils/sw-messaging.js';
import { cancelImageUrl } from '#lib/utils/sw-messaging.ts';
import { fireEvent, render } from '@testing-library/svelte';
vi.mock('#lib/utils/sw-messaging.js', () => ({
+2 -2
View File
@@ -1,6 +1,6 @@
<script lang="ts">
import { isFirefox } from '#lib/utils/asset-utils.js';
import { cancelImageUrl } from '#lib/utils/sw-messaging.js';
import { isFirefox } from '#lib/utils/asset-utils.ts';
import { cancelImageUrl } from '#lib/utils/sw-messaging.ts';
import { onDestroy, untrack } from 'svelte';
import type { HTMLImgAttributes } from 'svelte/elements';
+1 -1
View File
@@ -1,6 +1,6 @@
<script lang="ts">
import Image from '#lib/components/Image.svelte';
import type { AdaptiveImageLoader, ImageQuality } from '#lib/utils/adaptive-image-loader.svelte.js';
import type { AdaptiveImageLoader, ImageQuality } from '#lib/utils/adaptive-image-loader.svelte.ts';
type Props = {
adaptiveImageLoader: AdaptiveImageLoader;
+2 -2
View File
@@ -1,6 +1,6 @@
<script lang="ts">
import { eventManager, type Events } from '#lib/managers/event-manager.svelte.js';
import type { EventCallback, EventMap } from '#lib/utils/base-event-manager.svelte.js';
import { eventManager, type Events } from '#lib/managers/event-manager.svelte.ts';
import type { EventCallback, EventMap } from '#lib/utils/base-event-manager.svelte.ts';
import { onMount } from 'svelte';
type Props = {
@@ -2,7 +2,7 @@
import SchemaAlbumPicker from '#lib/components/SchemaAlbumPicker.svelte';
import Self from '#lib/components/SchemaConfiguration.svelte';
import SchemaTagPicker from '#lib/components/SchemaTagPicker.svelte';
import type { JSONSchemaProperty, SchemaConfig } from '#lib/types.js';
import type { JSONSchemaProperty, SchemaConfig } from '#lib/types.ts';
import {
CodeBlock,
Field,
@@ -1,6 +1,6 @@
<script lang="ts">
import { Button, DatePicker, Field } from '@immich/ui';
import { locale } from '#lib/stores/preferences.store.js';
import { locale } from '#lib/stores/preferences.store.ts';
import { DateTime, Duration } from 'luxon';
import { t } from 'svelte-i18n';
+2 -2
View File
@@ -1,6 +1,6 @@
<script lang="ts">
import { decodeBase64 } from '#lib/utils.js';
import { TUNABLES } from '#lib/utils/tunables.js';
import { decodeBase64 } from '#lib/utils.ts';
import { TUNABLES } from '#lib/utils/tunables.ts';
import type { HTMLCanvasAttributes } from 'svelte/elements';
import { fade } from 'svelte/transition';
import { thumbHashToRGBA } from 'thumbhash';
@@ -2,14 +2,14 @@
import SettingInputField from '#lib/components/shared-components/settings/SettingInputField.svelte';
import SettingSwitch from '#lib/components/shared-components/settings/SettingSwitch.svelte';
import SettingButtonsRow from '#lib/components/shared-components/settings/SystemConfigButtonRow.svelte';
import { SettingInputFieldType } from '#lib/constants.js';
import { SettingInputFieldType } from '#lib/constants.ts';
import FormatMessage from '#lib/elements/FormatMessage.svelte';
import { authManager } from '#lib/managers/auth-manager.svelte.js';
import { featureFlagsManager } from '#lib/managers/feature-flags-manager.svelte.js';
import { createPreloadedQuery, executeMutation } from '#lib/queries/client.js';
import { getAdminConfigQuery, updateAdminConfigMutation } from '#lib/queries/config-admin.query.js';
import { authManager } from '#lib/managers/auth-manager.svelte.ts';
import { featureFlagsManager } from '#lib/managers/feature-flags-manager.svelte.ts';
import { createPreloadedQuery, executeMutation } from '#lib/queries/client.ts';
import { getAdminConfigQuery, updateAdminConfigMutation } from '#lib/queries/config-admin.query.ts';
import StorageTemplateVariablesModal from '#lib/modals/StorageTemplateVariablesModal.svelte';
import { Route } from '#lib/route.js';
import { Route } from '#lib/route.ts';
import { getStorageTemplateOptions, type SystemConfigTemplateStorageOptionDto } from '@immich/sdk';
import { cloneDeep } from 'lodash-es';
import { Code, Heading, IconButton, Link, modalManager, Text } from '@immich/ui';
@@ -1,5 +1,5 @@
<script lang="ts">
import { locale } from '#lib/stores/preferences.store.js';
import { locale } from '#lib/stores/preferences.store.ts';
import type { SystemConfigTemplateStorageOptionDto } from '@immich/sdk';
import { Card, CardBody, CardHeader, Heading, Text } from '@immich/ui';
import { DateTime } from 'luxon';
@@ -1,7 +1,7 @@
<script lang="ts">
import AlbumCover from '#lib/components/album-page/AlbumCover.svelte';
import { authManager } from '#lib/managers/auth-manager.svelte.js';
import { getShortDateRange } from '#lib/utils/date-time.js';
import { authManager } from '#lib/managers/auth-manager.svelte.ts';
import { getShortDateRange } from '#lib/utils/date-time.ts';
import { type AlbumResponseDto } from '@immich/sdk';
import { ContextMenuButton, type MenuItems } from '@immich/ui';
import { t } from 'svelte-i18n';
@@ -1,10 +1,10 @@
<script lang="ts">
import AlbumCard from '#lib/components/album-page/AlbumCard.svelte';
import Portal from '#lib/elements/Portal.svelte';
import { Route } from '#lib/route.js';
import { getAlbumActions } from '#lib/services/album.service.js';
import { albumViewSettings } from '#lib/stores/preferences.store.js';
import { type AlbumGroup, isAlbumGroupCollapsed, toggleAlbumGroupCollapsing } from '#lib/utils/album-utils.js';
import { Route } from '#lib/route.ts';
import { getAlbumActions } from '#lib/services/album.service.ts';
import { albumViewSettings } from '#lib/stores/preferences.store.ts';
import { type AlbumGroup, isAlbumGroupCollapsed, toggleAlbumGroupCollapsing } from '#lib/utils/album-utils.ts';
import type { AlbumResponseDto } from '@immich/sdk';
import { Icon, menuManager, type ActionItem } from '@immich/ui';
import { mdiChevronRight } from '@mdi/js';
@@ -1,7 +1,7 @@
<script lang="ts">
import AssetCover from '#lib/components/sharedlinks-page/covers/AssetCover.svelte';
import NoCover from '#lib/components/sharedlinks-page/covers/NoCover.svelte';
import { getAssetMediaUrl } from '#lib/utils.js';
import { getAssetMediaUrl } from '#lib/utils.ts';
import { type AlbumResponseDto } from '@immich/sdk';
import { t } from 'svelte-i18n';
@@ -1,8 +1,8 @@
<script lang="ts">
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.js';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.ts';
import MapModal from '#lib/modals/MapModal.svelte';
import { getAlbumMapMarkersQuery } from '#lib/queries/album.query.js';
import { navigate } from '#lib/utils/navigation.js';
import { getAlbumMapMarkersQuery } from '#lib/queries/album.query.ts';
import { navigate } from '#lib/utils/navigation.ts';
import { type AlbumResponseDto } from '@immich/sdk';
import { IconButton, modalManager } from '@immich/ui';
import { mdiMapOutline } from '@mdi/js';
@@ -1,6 +1,6 @@
<script lang="ts">
import { getSharedLinkActions } from '#lib/services/shared-link.service.js';
import { locale } from '#lib/stores/preferences.store.js';
import { getSharedLinkActions } from '#lib/services/shared-link.service.ts';
import { locale } from '#lib/stores/preferences.store.ts';
import type { AlbumResponseDto, SharedLinkResponseDto } from '@immich/sdk';
import { ActionButton, Text } from '@immich/ui';
import { DateTime } from 'luxon';
@@ -1,5 +1,5 @@
<script lang="ts">
import { getAlbumDateRange } from '#lib/utils/date-time.js';
import { getAlbumDateRange } from '#lib/utils/date-time.ts';
import type { AlbumResponseDto } from '@immich/sdk';
import { t } from 'svelte-i18n';
@@ -1,7 +1,7 @@
<script lang="ts">
import AlbumCover from '#lib/components/album-page/AlbumCover.svelte';
import { getAlbumQuery } from '#lib/queries/album.query.js';
import { queryClient } from '#lib/queries/client.js';
import { getAlbumQuery } from '#lib/queries/album.query.ts';
import { queryClient } from '#lib/queries/client.ts';
import { IconButton, Text, LoadingSpinner } from '@immich/ui';
import { mdiTrashCanOutline } from '@mdi/js';
import { createQuery } from '@tanstack/svelte-query';
@@ -1,20 +1,20 @@
<script lang="ts">
import { shortcut } from '#lib/actions/shortcut.js';
import { shortcut } from '#lib/actions/shortcut.ts';
import AlbumMap from '#lib/components/album-page/AlbumMap.svelte';
import DownloadAction from '#lib/components/timeline/actions/DownloadAction.svelte';
import SelectAllAssets from '#lib/components/timeline/actions/SelectAllAction.svelte';
import AssetSelectControlBar from '#lib/components/timeline/AssetSelectControlBar.svelte';
import Timeline from '#lib/components/timeline/Timeline.svelte';
import { assetMultiSelectManager } from '#lib/managers/asset-multi-select-manager.svelte.js';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.js';
import { TimelineManager } from '#lib/managers/timeline-manager/timeline-manager.svelte.js';
import { handleDownloadAlbum } from '#lib/services/album.service.js';
import { getGlobalActions } from '#lib/services/app.service.js';
import { dragAndDropFilesStore } from '#lib/stores/drag-and-drop-files.store.js';
import { mediaQueryManager } from '#lib/stores/media-query-manager.svelte.js';
import { SlideshowNavigation, SlideshowState, slideshowStore } from '#lib/stores/slideshow.store.js';
import { handlePromiseError } from '#lib/utils.js';
import { fileUploadHandler, openFileUploadDialog } from '#lib/utils/file-uploader.js';
import { assetMultiSelectManager } from '#lib/managers/asset-multi-select-manager.svelte.ts';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.ts';
import { TimelineManager } from '#lib/managers/timeline-manager/timeline-manager.svelte.ts';
import { handleDownloadAlbum } from '#lib/services/album.service.ts';
import { getGlobalActions } from '#lib/services/app.service.ts';
import { dragAndDropFilesStore } from '#lib/stores/drag-and-drop-files.store.ts';
import { mediaQueryManager } from '#lib/stores/media-query-manager.svelte.ts';
import { SlideshowNavigation, SlideshowState, slideshowStore } from '#lib/stores/slideshow.store.ts';
import { handlePromiseError } from '#lib/utils.ts';
import { fileUploadHandler, openFileUploadDialog } from '#lib/utils/file-uploader.ts';
import type { AlbumResponseDto, SharedLinkResponseDto } from '@immich/sdk';
import { ActionButton, IconButton, Logo } from '@immich/ui';
import { mdiDownload, mdiFileImagePlusOutline, mdiPresentationPlay } from '@mdi/js';
@@ -22,8 +22,8 @@
import ControlAppBar from '../shared-components/ControlAppBar.svelte';
import ThemeButton from '../shared-components/ThemeButton.svelte';
import AlbumSummary from './AlbumSummary.svelte';
import { createPreloadedQuery } from '#lib/queries/client.js';
import { getPublicConfigQuery } from '#lib/queries/config-public.query.js';
import { createPreloadedQuery } from '#lib/queries/client.ts';
import { getPublicConfigQuery } from '#lib/queries/config-public.query.ts';
const query = createPreloadedQuery(getPublicConfigQuery);
const publicConfig = $derived(query.data);
@@ -1,8 +1,8 @@
<script lang="ts">
import AlbumCardGroup from '#lib/components/album-page/AlbumCardGroup.svelte';
import AlbumsTable from '#lib/components/album-page/AlbumsTable.svelte';
import { authManager } from '#lib/managers/auth-manager.svelte.js';
import { handleDeleteAlbum, isAlbumOwner } from '#lib/services/album.service.js';
import { authManager } from '#lib/managers/auth-manager.svelte.ts';
import { handleDeleteAlbum, isAlbumOwner } from '#lib/services/album.service.ts';
import {
AlbumFilter,
AlbumGroupBy,
@@ -11,14 +11,14 @@
locale,
SortOrder,
type AlbumViewSettings,
} from '#lib/stores/preferences.store.js';
} from '#lib/stores/preferences.store.ts';
import {
getSelectedAlbumGroupOption,
sortAlbums,
stringToSortOrder,
type AlbumGroup,
} from '#lib/utils/album-utils.js';
import { normalizeSearchString } from '#lib/utils/string-utils.js';
} from '#lib/utils/album-utils.ts';
import { normalizeSearchString } from '#lib/utils/string-utils.ts';
import { type AlbumResponseDto } from '@immich/sdk';
import { groupBy } from 'lodash-es';
import { onMount, type Snippet } from 'svelte';
@@ -1,13 +1,13 @@
<script lang="ts">
import AlbumTableHeader from '#lib/components/album-page/AlbumsTableHeader.svelte';
import AlbumTableRow from '#lib/components/album-page/AlbumsTableRow.svelte';
import { AlbumGroupBy, albumViewSettings } from '#lib/stores/preferences.store.js';
import { AlbumGroupBy, albumViewSettings } from '#lib/stores/preferences.store.ts';
import {
isAlbumGroupCollapsed,
sortOptionsMetadata,
toggleAlbumGroupCollapsing,
type AlbumGroup,
} from '#lib/utils/album-utils.js';
} from '#lib/utils/album-utils.ts';
import { Icon } from '@immich/ui';
import { mdiChevronRight } from '@mdi/js';
import { t } from 'svelte-i18n';
@@ -1,6 +1,6 @@
<script lang="ts">
import { albumViewSettings, SortOrder, AlbumSortBy } from '#lib/stores/preferences.store.js';
import type { AlbumSortOptionMetadata } from '#lib/utils/album-utils.js';
import { albumViewSettings, SortOrder, AlbumSortBy } from '#lib/stores/preferences.store.ts';
import type { AlbumSortOptionMetadata } from '#lib/utils/album-utils.ts';
import { t } from 'svelte-i18n';
interface Props {
@@ -1,11 +1,11 @@
<script lang="ts">
import { goto } from '$app/navigation';
import { dateFormats } from '#lib/constants.js';
import { dateFormats } from '#lib/constants.ts';
import Portal from '#lib/elements/Portal.svelte';
import { authManager } from '#lib/managers/auth-manager.svelte.js';
import { Route } from '#lib/route.js';
import { getAlbumActions } from '#lib/services/album.service.js';
import { locale } from '#lib/stores/preferences.store.js';
import { authManager } from '#lib/managers/auth-manager.svelte.ts';
import { Route } from '#lib/route.ts';
import { getAlbumActions } from '#lib/services/album.service.ts';
import { locale } from '#lib/stores/preferences.store.ts';
import { AlbumUserRole, type AlbumResponseDto } from '@immich/sdk';
import { Icon, menuManager } from '@immich/ui';
import { mdiShareVariantOutline } from '@mdi/js';
@@ -1,4 +1,4 @@
import { sdkMock } from '#lib/__mocks__/sdk.mock.js';
import { sdkMock } from '#lib/__mocks__/sdk.mock.ts';
import '@testing-library/jest-dom';
import { render, waitFor, type RenderResult } from '@testing-library/svelte';
import { init, register, waitLocale } from 'svelte-i18n';
@@ -1,5 +1,5 @@
import AlbumCover from '#lib/components/album-page/AlbumCover.svelte';
import { getAssetMediaUrl } from '#lib/utils.js';
import { getAssetMediaUrl } from '#lib/utils.ts';
import { render } from '@testing-library/svelte';
import { albumFactory } from '#test-data/factories/album-factory';
@@ -1,6 +1,6 @@
<script lang="ts">
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.js';
import { locale } from '#lib/stores/preferences.store.js';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.ts';
import { locale } from '#lib/stores/preferences.store.ts';
import type { ActivityResponseDto } from '@immich/sdk';
import { Button } from '@immich/ui';
import { mdiCommentOutline, mdiThumbUp, mdiThumbUpOutline } from '@mdi/js';
@@ -1,15 +1,15 @@
<script lang="ts">
import { shortcut } from '#lib/actions/shortcut.js';
import { timeBeforeShowLoadingSpinner } from '#lib/constants.js';
import { activityManager } from '#lib/managers/activity-manager.svelte.js';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.js';
import { authManager } from '#lib/managers/auth-manager.svelte.js';
import { Route } from '#lib/route.js';
import { locale } from '#lib/stores/preferences.store.js';
import { getAssetMediaUrl } from '#lib/utils.js';
import { getAssetType } from '#lib/utils/asset-utils.js';
import { handleError } from '#lib/utils/handle-error.js';
import { isTenMinutesApart } from '#lib/utils/timesince.js';
import { shortcut } from '#lib/actions/shortcut.ts';
import { timeBeforeShowLoadingSpinner } from '#lib/constants.ts';
import { activityManager } from '#lib/managers/activity-manager.svelte.ts';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.ts';
import { authManager } from '#lib/managers/auth-manager.svelte.ts';
import { Route } from '#lib/route.ts';
import { locale } from '#lib/stores/preferences.store.ts';
import { getAssetMediaUrl } from '#lib/utils.ts';
import { getAssetType } from '#lib/utils/asset-utils.ts';
import { handleError } from '#lib/utils/handle-error.ts';
import { isTenMinutesApart } from '#lib/utils/timesince.ts';
import { ReactionType, type ActivityResponseDto, type AlbumUserResponseDto, type AssetTypeEnum } from '@immich/sdk';
import { ContextMenuButton, Icon, IconButton, LoadingSpinner, Textarea, toastManager } from '@immich/ui';
import { mdiClose, mdiSend, mdiThumbUp, mdiTrashCanOutline } from '@mdi/js';
@@ -1,8 +1,8 @@
<script lang="ts">
import { SCROLL_PROPERTIES } from '#lib/components/shared-components/album-selection/album-selection-utils.js';
import { mediaQueryManager } from '#lib/stores/media-query-manager.svelte.js';
import { getAssetMediaUrl } from '#lib/utils.js';
import { normalizeSearchString } from '#lib/utils/string-utils.js';
import { SCROLL_PROPERTIES } from '#lib/components/shared-components/album-selection/album-selection-utils.ts';
import { mediaQueryManager } from '#lib/stores/media-query-manager.svelte.ts';
import { getAssetMediaUrl } from '#lib/utils.ts';
import { normalizeSearchString } from '#lib/utils/string-utils.ts';
import { type AlbumResponseDto } from '@immich/sdk';
import { Icon } from '@immich/ui';
import { mdiCheckCircle } from '@mdi/js';
@@ -1,7 +1,7 @@
import { getAnimateMock } from '#lib/__mocks__/animate.mock.js';
import { getResizeObserverMock } from '#lib/__mocks__/resize-observer.mock.js';
import { authManager } from '#lib/managers/auth-manager.svelte.js';
import { SlideshowState, slideshowStore } from '#lib/stores/slideshow.store.js';
import { getAnimateMock } from '#lib/__mocks__/animate.mock.ts';
import { getResizeObserverMock } from '#lib/__mocks__/resize-observer.mock.ts';
import { authManager } from '#lib/managers/auth-manager.svelte.ts';
import { SlideshowState, slideshowStore } from '#lib/stores/slideshow.store.ts';
import { renderWithTooltips } from '#tests/helpers';
import { updateAsset } from '@immich/sdk';
import { fireEvent, waitFor } from '@testing-library/svelte';
@@ -1,33 +1,33 @@
<script lang="ts">
import { browser } from '$app/env';
import { focusTrap } from '#lib/actions/focus-trap.js';
import { shortcuts } from '#lib/actions/shortcut.js';
import type { Action, OnAction, PreAction } from '#lib/components/asset-viewer/actions/action.js';
import { focusTrap } from '#lib/actions/focus-trap.ts';
import { shortcuts } from '#lib/actions/shortcut.ts';
import type { Action, OnAction, PreAction } from '#lib/components/asset-viewer/actions/action.ts';
import NextAssetAction from '#lib/components/asset-viewer/actions/NextAssetAction.svelte';
import PreviousAssetAction from '#lib/components/asset-viewer/actions/PreviousAssetAction.svelte';
import AssetViewerNavBar from '#lib/components/asset-viewer/AssetViewerNavBar.svelte';
import { preloadManager } from '#lib/components/asset-viewer/PreloadManager.svelte.js';
import { preloadManager } from '#lib/components/asset-viewer/PreloadManager.svelte.ts';
import OnEvents from '#lib/components/OnEvents.svelte';
import { AssetAction, ProjectionType } from '#lib/constants.js';
import { activityManager } from '#lib/managers/activity-manager.svelte.js';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.js';
import { authManager } from '#lib/managers/auth-manager.svelte.js';
import { editManager, EditToolType } from '#lib/managers/edit/edit-manager.svelte.js';
import { eventManager } from '#lib/managers/event-manager.svelte.js';
import type { TimelineAsset } from '#lib/managers/timeline-manager/types.js';
import { getAssetActions } from '#lib/services/asset.service.js';
import { faceManager } from '#lib/stores/face.svelte.js';
import { ocrManager } from '#lib/stores/ocr.svelte.js';
import { alwaysLoadOriginalVideo } from '#lib/stores/preferences.store.js';
import { SlideshowNavigation, SlideshowState, slideshowStore } from '#lib/stores/slideshow.store.js';
import { getSharedLink, handlePromiseError } from '#lib/utils.js';
import type { OnUndoDelete } from '#lib/utils/actions.js';
import { navigateToAsset } from '#lib/utils/asset-utils.js';
import { handleError } from '#lib/utils/handle-error.js';
import { navigate } from '#lib/utils/navigation.js';
import { InvocationTracker } from '#lib/utils/invocationTracker.js';
import { SlideshowHistory } from '#lib/utils/slideshow-history.js';
import { toTimelineAsset } from '#lib/utils/timeline-util.js';
import { AssetAction, ProjectionType } from '#lib/constants.ts';
import { activityManager } from '#lib/managers/activity-manager.svelte.ts';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.ts';
import { authManager } from '#lib/managers/auth-manager.svelte.ts';
import { editManager, EditToolType } from '#lib/managers/edit/edit-manager.svelte.ts';
import { eventManager } from '#lib/managers/event-manager.svelte.ts';
import type { TimelineAsset } from '#lib/managers/timeline-manager/types.ts';
import { getAssetActions } from '#lib/services/asset.service.ts';
import { faceManager } from '#lib/stores/face.svelte.ts';
import { ocrManager } from '#lib/stores/ocr.svelte.ts';
import { alwaysLoadOriginalVideo } from '#lib/stores/preferences.store.ts';
import { SlideshowNavigation, SlideshowState, slideshowStore } from '#lib/stores/slideshow.store.ts';
import { getSharedLink, handlePromiseError } from '#lib/utils.ts';
import type { OnUndoDelete } from '#lib/utils/actions.ts';
import { navigateToAsset } from '#lib/utils/asset-utils.ts';
import { handleError } from '#lib/utils/handle-error.ts';
import { navigate } from '#lib/utils/navigation.ts';
import { InvocationTracker } from '#lib/utils/invocationTracker.ts';
import { SlideshowHistory } from '#lib/utils/slideshow-history.ts';
import { toTimelineAsset } from '#lib/utils/timeline-util.ts';
import {
AssetTypeEnum,
getAssetInfo,
@@ -1,7 +1,7 @@
import { getResizeObserverMock } from '#lib/__mocks__/resize-observer.mock.js';
import { authManager } from '#lib/managers/auth-manager.svelte.js';
import { queryClient } from '#lib/queries/client.js';
import { getUserConfigQuery } from '#lib/queries/config-user.query.js';
import { getResizeObserverMock } from '#lib/__mocks__/resize-observer.mock.ts';
import { authManager } from '#lib/managers/auth-manager.svelte.ts';
import { queryClient } from '#lib/queries/client.ts';
import { getUserConfigQuery } from '#lib/queries/config-user.query.ts';
import { renderWithTooltips } from '#tests/helpers';
import type { UserConfigDto } from '@immich/sdk';
import '@testing-library/jest-dom';
@@ -1,23 +1,23 @@
<script lang="ts">
import ActionMenuItem from '#lib/components/ActionMenuItem.svelte';
import type { OnAction, PreAction } from '#lib/components/asset-viewer/actions/action.js';
import type { OnAction, PreAction } from '#lib/components/asset-viewer/actions/action.ts';
import ArchiveAction from '#lib/components/asset-viewer/actions/ArchiveAction.svelte';
import DeleteAction from '#lib/components/asset-viewer/actions/DeleteAction.svelte';
import RestoreAction from '#lib/components/asset-viewer/actions/RestoreAction.svelte';
import SetVisibilityAction from '#lib/components/asset-viewer/actions/SetVisibilityAction.svelte';
import LoadingDots from '#lib/components/LoadingDots.svelte';
import ButtonContextMenu from '#lib/components/shared-components/context-menu/ButtonContextMenu.svelte';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.js';
import { authManager } from '#lib/managers/auth-manager.svelte.js';
import { languageManager } from '#lib/managers/language-manager.svelte.js';
import { getAlbumAssetActions } from '#lib/services/album.service.js';
import { getGlobalActions } from '#lib/services/app.service.js';
import { getAssetActions } from '#lib/services/asset.service.js';
import { getPersonAssetActions } from '#lib/services/person.service.js';
import { getStackActions } from '#lib/services/stack.service.js';
import { getSharedLink, withoutIcons } from '#lib/utils.js';
import type { OnUndoDelete } from '#lib/utils/actions.js';
import { toTimelineAsset } from '#lib/utils/timeline-util.js';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.ts';
import { authManager } from '#lib/managers/auth-manager.svelte.ts';
import { languageManager } from '#lib/managers/language-manager.svelte.ts';
import { getAlbumAssetActions } from '#lib/services/album.service.ts';
import { getGlobalActions } from '#lib/services/app.service.ts';
import { getAssetActions } from '#lib/services/asset.service.ts';
import { getPersonAssetActions } from '#lib/services/person.service.ts';
import { getStackActions } from '#lib/services/stack.service.ts';
import { getSharedLink, withoutIcons } from '#lib/utils.ts';
import type { OnUndoDelete } from '#lib/utils/actions.ts';
import { toTimelineAsset } from '#lib/utils/timeline-util.ts';
import {
AssetTypeEnum,
AssetVisibility,
@@ -5,15 +5,15 @@
import DetailPanelLocation from '#lib/components/asset-viewer/DetailPanelLocation.svelte';
import DetailPanelRating from '#lib/components/asset-viewer/DetailPanelStarRating.svelte';
import DetailPanelTags from '#lib/components/asset-viewer/DetailPanelTags.svelte';
import { timeToLoadTheMap } from '#lib/constants.js';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.js';
import { authManager } from '#lib/managers/auth-manager.svelte.js';
import { Route } from '#lib/route.js';
import { locale } from '#lib/stores/preferences.store.js';
import { getAssetMediaUrl } from '#lib/utils.js';
import { delay, getDimensions } from '#lib/utils/asset-utils.js';
import { getByteUnitString } from '#lib/utils/byte-units.js';
import { getParentPath } from '#lib/utils/tree-utils.js';
import { timeToLoadTheMap } from '#lib/constants.ts';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.ts';
import { authManager } from '#lib/managers/auth-manager.svelte.ts';
import { Route } from '#lib/route.ts';
import { locale } from '#lib/stores/preferences.store.ts';
import { getAssetMediaUrl } from '#lib/utils.ts';
import { delay, getDimensions } from '#lib/utils/asset-utils.ts';
import { getByteUnitString } from '#lib/utils/byte-units.ts';
import { getParentPath } from '#lib/utils/tree-utils.ts';
import { AssetMediaSize, getAssetInfo, type AlbumResponseDto, type AssetResponseDto } from '@immich/sdk';
import { createQuery } from '@tanstack/svelte-query';
import { Icon, IconButton, Link, LoadingSpinner, Text } from '@immich/ui';
@@ -25,10 +25,10 @@
import UserAvatar from '../shared-components/UserAvatar.svelte';
import AlbumListItemDetails from './AlbumListItemDetails.svelte';
import DetailPanelPeople from '#lib/components/asset-viewer/DetailPanelPeople.svelte';
import { faceManager } from '#lib/stores/face.svelte.js';
import { getAlbumsByAssetQuery } from '#lib/queries/album.query.js';
import { createPreloadedQuery } from '#lib/queries/client.js';
import { getPublicConfigQuery } from '#lib/queries/config-public.query.js';
import { faceManager } from '#lib/stores/face.svelte.ts';
import { getAlbumsByAssetQuery } from '#lib/queries/album.query.ts';
import { createPreloadedQuery } from '#lib/queries/client.ts';
import { getPublicConfigQuery } from '#lib/queries/config-public.query.ts';
const query = createPreloadedQuery(getPublicConfigQuery);
const publicConfig = $derived(query.data);
@@ -1,8 +1,8 @@
<script lang="ts">
import { authManager } from '#lib/managers/auth-manager.svelte.js';
import { authManager } from '#lib/managers/auth-manager.svelte.ts';
import AssetChangeDateModal from '#lib/modals/AssetChangeDateModal.svelte';
import { locale } from '#lib/stores/preferences.store.js';
import { fromISODateTime, fromISODateTimeUTC, toTimelineAsset } from '#lib/utils/timeline-util.js';
import { locale } from '#lib/stores/preferences.store.ts';
import { fromISODateTime, fromISODateTimeUTC, toTimelineAsset } from '#lib/utils/timeline-util.ts';
import { type AssetResponseDto } from '@immich/sdk';
import { Icon, modalManager } from '@immich/ui';
import { mdiCalendar, mdiPencil } from '@mdi/js';
@@ -1,6 +1,6 @@
<script lang="ts">
import { shortcut } from '#lib/actions/shortcut.js';
import { handleError } from '#lib/utils/handle-error.js';
import { shortcut } from '#lib/actions/shortcut.ts';
import { handleError } from '#lib/utils/handle-error.ts';
import { updateAsset, type AssetResponseDto } from '@immich/sdk';
import { Textarea, toastManager } from '@immich/ui';
import { t } from 'svelte-i18n';
@@ -1,6 +1,6 @@
<script lang="ts">
import GeolocationPointPickerModal from '#lib/modals/GeolocationPointPickerModal.svelte';
import { handleError } from '#lib/utils/handle-error.js';
import { handleError } from '#lib/utils/handle-error.ts';
import { updateAsset, type AssetResponseDto } from '@immich/sdk';
import { Icon, modalManager } from '@immich/ui';
import { mdiMapMarkerOutline, mdiPencil } from '@mdi/js';
@@ -1,11 +1,11 @@
<script lang="ts">
import ImageThumbnail from '#lib/components/assets/thumbnail/ImageThumbnail.svelte';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.js';
import { authManager } from '#lib/managers/auth-manager.svelte.js';
import { Route } from '#lib/route.js';
import { faceManager } from '#lib/stores/face.svelte.js';
import { locale } from '#lib/stores/preferences.store.js';
import { getPeopleThumbnailUrl } from '#lib/utils.js';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.ts';
import { authManager } from '#lib/managers/auth-manager.svelte.ts';
import { Route } from '#lib/route.ts';
import { faceManager } from '#lib/stores/face.svelte.ts';
import { locale } from '#lib/stores/preferences.store.ts';
import { getPeopleThumbnailUrl } from '#lib/utils.ts';
import { type AssetResponseDto } from '@immich/sdk';
import { IconButton, Text } from '@immich/ui';
import { mdiEye, mdiEyeOff, mdiPencil, mdiPlus } from '@mdi/js';
@@ -1,8 +1,8 @@
<script lang="ts">
import StarRating, { type Rating } from '#lib/elements/StarRating.svelte';
import { authManager } from '#lib/managers/auth-manager.svelte.js';
import { handlePromiseError } from '#lib/utils.js';
import { handleError } from '#lib/utils/handle-error.js';
import { authManager } from '#lib/managers/auth-manager.svelte.ts';
import { handlePromiseError } from '#lib/utils.ts';
import { handleError } from '#lib/utils/handle-error.ts';
import { updateAsset, type AssetResponseDto } from '@immich/sdk';
import { t } from 'svelte-i18n';
@@ -1,10 +1,10 @@
<script lang="ts">
import HeaderActionButton from '#lib/components/HeaderActionButton.svelte';
import OnEvents from '#lib/components/OnEvents.svelte';
import { authManager } from '#lib/managers/auth-manager.svelte.js';
import { Route } from '#lib/route.js';
import { getAssetActions } from '#lib/services/asset.service.js';
import { removeTag } from '#lib/utils/asset-utils.js';
import { authManager } from '#lib/managers/auth-manager.svelte.ts';
import { Route } from '#lib/route.ts';
import { getAssetActions } from '#lib/services/asset.service.ts';
import { removeTag } from '#lib/utils/asset-utils.ts';
import { getAssetInfo, type AssetResponseDto } from '@immich/sdk';
import { Badge, Link, Text } from '@immich/ui';
import { t } from 'svelte-i18n';
@@ -1,6 +1,6 @@
<script lang="ts">
import { authManager } from '#lib/managers/auth-manager.svelte.js';
import { getAssetUrl } from '#lib/utils.js';
import { authManager } from '#lib/managers/auth-manager.svelte.ts';
import { getAssetUrl } from '#lib/utils.ts';
import { AssetMediaSize, viewAsset, type AssetResponseDto } from '@immich/sdk';
import { LoadingSpinner } from '@immich/ui';
import { t } from 'svelte-i18n';
@@ -1,7 +1,7 @@
<script lang="ts">
import { mediaQueryManager } from '#lib/stores/media-query-manager.svelte.js';
import type { OcrBox } from '#lib/utils/ocr-utils.js';
import { calculateBoundingBoxMatrix, calculateFittedFontSize } from '#lib/utils/ocr-utils.js';
import { mediaQueryManager } from '#lib/stores/media-query-manager.svelte.ts';
import type { OcrBox } from '#lib/utils/ocr-utils.ts';
import { calculateBoundingBoxMatrix, calculateFittedFontSize } from '#lib/utils/ocr-utils.ts';
type Props = {
ocrBox: OcrBox;
@@ -1,5 +1,5 @@
<script lang="ts">
import { ocrManager } from '#lib/stores/ocr.svelte.js';
import { ocrManager } from '#lib/stores/ocr.svelte.ts';
import { IconButton } from '@immich/ui';
import { mdiTextRecognition } from '@mdi/js';
import { t } from 'svelte-i18n';
@@ -1,10 +1,10 @@
<script lang="ts">
import { shortcuts } from '#lib/actions/shortcut.js';
import { shortcuts } from '#lib/actions/shortcut.ts';
import AssetViewerEvents from '#lib/components/AssetViewerEvents.svelte';
import { assetViewerManager, type Faces } from '#lib/managers/asset-viewer-manager.svelte.js';
import { ocrManager, type OcrBoundingBox } from '#lib/stores/ocr.svelte.js';
import { alwaysLoadOriginalFile } from '#lib/stores/preferences.store.js';
import { calculateBoundingBoxMatrix, getOcrBoundingBoxes, type Point } from '#lib/utils/ocr-utils.js';
import { assetViewerManager, type Faces } from '#lib/managers/asset-viewer-manager.svelte.ts';
import { ocrManager, type OcrBoundingBox } from '#lib/stores/ocr.svelte.ts';
import { alwaysLoadOriginalFile } from '#lib/stores/preferences.store.ts';
import { calculateBoundingBoxMatrix, getOcrBoundingBoxes, type Point } from '#lib/utils/ocr-utils.ts';
import {
EquirectangularAdapter,
Viewer,
@@ -1,22 +1,22 @@
<script lang="ts">
import { shortcuts } from '#lib/actions/shortcut.js';
import { zoomImageAction } from '#lib/actions/zoom-image.js';
import { shortcuts } from '#lib/actions/shortcut.ts';
import { zoomImageAction } from '#lib/actions/zoom-image.ts';
import AdaptiveImage from '#lib/components/AdaptiveImage.svelte';
import FaceEditor from '#lib/components/asset-viewer/face-editor/FaceEditor.svelte';
import OcrBoundingBox from '#lib/components/asset-viewer/OcrBoundingBox.svelte';
import AssetViewerEvents from '#lib/components/AssetViewerEvents.svelte';
import Thumbhash from '#lib/components/Thumbhash.svelte';
import { assetViewerManager, type Faces } from '#lib/managers/asset-viewer-manager.svelte.js';
import { castManager } from '#lib/managers/cast-manager.svelte.js';
import { faceManager } from '#lib/stores/face.svelte.js';
import { ocrManager } from '#lib/stores/ocr.svelte.js';
import { SlideshowLook, SlideshowState, slideshowStore } from '#lib/stores/slideshow.store.js';
import { handlePromiseError } from '#lib/utils.js';
import { canCopyImageToClipboard, copyImageToClipboard } from '#lib/utils/asset-utils.js';
import { getNaturalSize, scaleToFit, type Size } from '#lib/utils/container-utils.js';
import { handleError } from '#lib/utils/handle-error.js';
import { getOcrBoundingBoxes } from '#lib/utils/ocr-utils.js';
import { getBoundingBox, type BoundingBox } from '#lib/utils/people-utils.js';
import { assetViewerManager, type Faces } from '#lib/managers/asset-viewer-manager.svelte.ts';
import { castManager } from '#lib/managers/cast-manager.svelte.ts';
import { faceManager } from '#lib/stores/face.svelte.ts';
import { ocrManager } from '#lib/stores/ocr.svelte.ts';
import { SlideshowLook, SlideshowState, slideshowStore } from '#lib/stores/slideshow.store.ts';
import { handlePromiseError } from '#lib/utils.ts';
import { canCopyImageToClipboard, copyImageToClipboard } from '#lib/utils/asset-utils.ts';
import { getNaturalSize, scaleToFit, type Size } from '#lib/utils/container-utils.ts';
import { handleError } from '#lib/utils/handle-error.ts';
import { getOcrBoundingBoxes } from '#lib/utils/ocr-utils.ts';
import { getBoundingBox, type BoundingBox } from '#lib/utils/people-utils.ts';
import { type SharedLinkResponseDto } from '@immich/sdk';
import { toastManager } from '@immich/ui';
import { onDestroy, untrack } from 'svelte';
@@ -1,6 +1,6 @@
import { loadImage } from '#lib/actions/image-loader.svelte.js';
import { getAssetUrls } from '#lib/utils.js';
import { AdaptiveImageLoader, type QualityList } from '#lib/utils/adaptive-image-loader.svelte.js';
import { loadImage } from '#lib/actions/image-loader.svelte.ts';
import { getAssetUrls } from '#lib/utils.ts';
import { AdaptiveImageLoader, type QualityList } from '#lib/utils/adaptive-image-loader.svelte.ts';
import type { AssetResponseDto, SharedLinkResponseDto } from '@immich/sdk';
type AssetCursor = {
@@ -1,10 +1,10 @@
<script lang="ts">
import { shortcuts, type ShortcutOptions } from '#lib/actions/shortcut.js';
import { shortcuts, type ShortcutOptions } from '#lib/actions/shortcut.ts';
import ProgressBar from '#lib/components/shared-components/progress-bar/ProgressBar.svelte';
import { ProgressBarStatus } from '#lib/constants.js';
import { languageManager } from '#lib/managers/language-manager.svelte.js';
import { ProgressBarStatus } from '#lib/constants.ts';
import { languageManager } from '#lib/managers/language-manager.svelte.ts';
import SlideshowSettingsModal from '#lib/modals/SlideshowSettingsModal.svelte';
import { SlideshowNavigation, SlideshowState, slideshowStore } from '#lib/stores/slideshow.store.js';
import { SlideshowNavigation, SlideshowState, slideshowStore } from '#lib/stores/slideshow.store.ts';
import { AssetTypeEnum } from '@immich/sdk';
import { IconButton, modalManager } from '@immich/ui';
import { mdiChevronLeft, mdiChevronRight, mdiClose, mdiCog, mdiFullscreen, mdiPause, mdiPlay } from '@mdi/js';
@@ -1,6 +1,6 @@
<script lang="ts">
import { SlideshowMetadataOverlayMode, slideshowStore } from '#lib/stores/slideshow.store.js';
import { fromISODateTime, fromISODateTimeUTC } from '#lib/utils/timeline-util.js';
import { SlideshowMetadataOverlayMode, slideshowStore } from '#lib/stores/slideshow.store.ts';
import { fromISODateTime, fromISODateTimeUTC } from '#lib/utils/timeline-util.ts';
import type { AssetResponseDto } from '@immich/sdk';
import { Text } from '@immich/ui';
import { DateTime } from 'luxon';
@@ -1,13 +1,13 @@
<script lang="ts">
import FaceEditor from '#lib/components/asset-viewer/face-editor/FaceEditor.svelte';
import VideoRemoteViewer from '#lib/components/asset-viewer/VideoRemoteViewer.svelte';
import { assetViewerFadeDuration } from '#lib/constants.js';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.js';
import { castManager } from '#lib/managers/cast-manager.svelte.js';
import { authManager } from '#lib/managers/auth-manager.svelte.js';
import { mediaCapabilitiesManager } from '#lib/managers/media-capabilities-manager.svelte.js';
import { autoPlayVideo, lang, loopVideo as loopVideoPreference } from '#lib/stores/preferences.store.js';
import { getAssetHlsSessionUrl, getAssetHlsUrl, getAssetMediaUrl, getAssetPlaybackUrl } from '#lib/utils.js';
import { assetViewerFadeDuration } from '#lib/constants.ts';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.ts';
import { castManager } from '#lib/managers/cast-manager.svelte.ts';
import { authManager } from '#lib/managers/auth-manager.svelte.ts';
import { mediaCapabilitiesManager } from '#lib/managers/media-capabilities-manager.svelte.ts';
import { autoPlayVideo, lang, loopVideo as loopVideoPreference } from '#lib/stores/preferences.store.ts';
import { getAssetHlsSessionUrl, getAssetHlsUrl, getAssetMediaUrl, getAssetPlaybackUrl } from '#lib/utils.ts';
import { AssetMediaSize, type AssetResponseDto } from '@immich/sdk';
import { Icon, LoadingSpinner, shortcuts } from '@immich/ui';
import {
@@ -44,8 +44,8 @@
import { t } from 'svelte-i18n';
import { fade } from 'svelte/transition';
import './immich-time-range';
import { createPreloadedQuery } from '#lib/queries/client.js';
import { getPublicConfigQuery } from '#lib/queries/config-public.query.js';
import { createPreloadedQuery } from '#lib/queries/client.ts';
import { getPublicConfigQuery } from '#lib/queries/config-public.query.ts';
const query = createPreloadedQuery(getPublicConfigQuery);
const publicConfig = $derived(query.data);
@@ -1,5 +1,5 @@
<script lang="ts">
import { getAssetPlaybackUrl, getAssetUrl } from '#lib/utils.js';
import { getAssetPlaybackUrl, getAssetUrl } from '#lib/utils.ts';
import type { AssetResponseDto } from '@immich/sdk';
import { LoadingSpinner } from '@immich/ui';
import { t } from 'svelte-i18n';
@@ -1,6 +1,6 @@
<script lang="ts">
import { castManager, CastState } from '#lib/managers/cast-manager.svelte.js';
import { handleError } from '#lib/utils/handle-error.js';
import { castManager, CastState } from '#lib/managers/cast-manager.svelte.ts';
import { handleError } from '#lib/utils/handle-error.ts';
import { Icon, IconButton, LoadingSpinner } from '@immich/ui';
import { mdiCastConnected, mdiPause, mdiPlay } from '@mdi/js';
import { t } from 'svelte-i18n';
@@ -1,7 +1,7 @@
<script lang="ts">
import VideoNativeViewer from '#lib/components/asset-viewer/VideoNativeViewer.svelte';
import VideoPanoramaViewer from '#lib/components/asset-viewer/VideoPanoramaViewer.svelte';
import { ProjectionType } from '#lib/constants.js';
import { ProjectionType } from '#lib/constants.ts';
import type { AssetResponseDto } from '@immich/sdk';
interface Props {
@@ -1,10 +1,10 @@
<script lang="ts">
import { shortcut } from '#lib/actions/shortcut.js';
import type { OnAction, PreAction } from '#lib/components/asset-viewer/actions/action.js';
import { shortcut } from '#lib/actions/shortcut.ts';
import type { OnAction, PreAction } from '#lib/components/asset-viewer/actions/action.ts';
import MenuOption from '#lib/components/shared-components/context-menu/MenuOption.svelte';
import { AssetAction } from '#lib/constants.js';
import { toggleArchive } from '#lib/utils/asset-utils.js';
import { toTimelineAsset } from '#lib/utils/timeline-util.js';
import { AssetAction } from '#lib/constants.ts';
import { toggleArchive } from '#lib/utils/asset-utils.ts';
import { toTimelineAsset } from '#lib/utils/timeline-util.ts';
import type { AssetResponseDto } from '@immich/sdk';
import { mdiArchiveArrowDownOutline, mdiArchiveArrowUpOutline } from '@mdi/js';
import { t } from 'svelte-i18n';
@@ -1,12 +1,12 @@
<script lang="ts">
import { shortcuts } from '#lib/actions/shortcut.js';
import { AssetAction } from '#lib/constants.js';
import { featureFlagsManager } from '#lib/managers/feature-flags-manager.svelte.js';
import { shortcuts } from '#lib/actions/shortcut.ts';
import { AssetAction } from '#lib/constants.ts';
import { featureFlagsManager } from '#lib/managers/feature-flags-manager.svelte.ts';
import AssetDeleteConfirmModal from '#lib/modals/AssetDeleteConfirmModal.svelte';
import { showDeleteModal } from '#lib/stores/preferences.store.js';
import { deleteAssets as deleteAssetsUtil, type OnUndoDelete } from '#lib/utils/actions.js';
import { handleError } from '#lib/utils/handle-error.js';
import { toTimelineAsset } from '#lib/utils/timeline-util.js';
import { showDeleteModal } from '#lib/stores/preferences.store.ts';
import { deleteAssets as deleteAssetsUtil, type OnUndoDelete } from '#lib/utils/actions.ts';
import { handleError } from '#lib/utils/handle-error.ts';
import { toTimelineAsset } from '#lib/utils/timeline-util.ts';
import { deleteAssets, type AssetResponseDto } from '@immich/sdk';
import { IconButton, modalManager, toastManager } from '@immich/ui';
import { mdiDeleteForeverOutline, mdiDeleteOutline } from '@mdi/js';
@@ -1,10 +1,10 @@
<script lang="ts">
import { shortcuts } from '#lib/actions/shortcut.js';
import { shortcuts } from '#lib/actions/shortcut.ts';
import { Icon } from '@immich/ui';
import { mdiChevronRight, mdiChevronLeft } from '@mdi/js';
import { t } from 'svelte-i18n';
import NavigationArea from '../NavigationArea.svelte';
import { languageManager } from '#lib/managers/language-manager.svelte.js';
import { languageManager } from '#lib/managers/language-manager.svelte.ts';
interface Props {
onNextAsset: () => void;
@@ -1,10 +1,10 @@
<script lang="ts">
import { shortcuts } from '#lib/actions/shortcut.js';
import { shortcuts } from '#lib/actions/shortcut.ts';
import { Icon } from '@immich/ui';
import { mdiChevronLeft, mdiChevronRight } from '@mdi/js';
import { t } from 'svelte-i18n';
import NavigationArea from '../NavigationArea.svelte';
import { languageManager } from '#lib/managers/language-manager.svelte.js';
import { languageManager } from '#lib/managers/language-manager.svelte.ts';
interface Props {
onPreviousAsset: () => void;
@@ -1,8 +1,8 @@
<script lang="ts">
import MenuOption from '#lib/components/shared-components/context-menu/MenuOption.svelte';
import { AssetAction } from '#lib/constants.js';
import { handleError } from '#lib/utils/handle-error.js';
import { toTimelineAsset } from '#lib/utils/timeline-util.js';
import { AssetAction } from '#lib/constants.ts';
import { handleError } from '#lib/utils/handle-error.ts';
import { toTimelineAsset } from '#lib/utils/timeline-util.ts';
import { restoreAssets, type AssetResponseDto } from '@immich/sdk';
import { toastManager } from '@immich/ui';
import { mdiHistory } from '@mdi/js';
@@ -1,8 +1,8 @@
<script lang="ts">
import MenuOption from '#lib/components/shared-components/context-menu/MenuOption.svelte';
import { AssetAction } from '#lib/constants.js';
import type { TimelineAsset } from '#lib/managers/timeline-manager/types.js';
import { handleError } from '#lib/utils/handle-error.js';
import { AssetAction } from '#lib/constants.ts';
import type { TimelineAsset } from '#lib/managers/timeline-manager/types.ts';
import { handleError } from '#lib/utils/handle-error.ts';
import { AssetVisibility, updateAssets } from '@immich/sdk';
import { modalManager } from '@immich/ui';
import { mdiLockOpenVariantOutline, mdiLockOutline } from '@mdi/js';
@@ -1,5 +1,5 @@
import type { AssetAction } from '#lib/constants.js';
import type { TimelineAsset } from '#lib/managers/timeline-manager/types.js';
import type { AssetAction } from '#lib/constants.ts';
import type { TimelineAsset } from '#lib/managers/timeline-manager/types.ts';
type ActionMap = {
[AssetAction.ARCHIVE]: { asset: TimelineAsset };
@@ -1,7 +1,7 @@
<script lang="ts">
import { shortcuts } from '#lib/actions/shortcut.js';
import { editManager, EditToolType } from '#lib/managers/edit/edit-manager.svelte.js';
import { websocketEvents } from '#lib/stores/websocket.js';
import { shortcuts } from '#lib/actions/shortcut.ts';
import { editManager, EditToolType } from '#lib/managers/edit/edit-manager.svelte.ts';
import { websocketEvents } from '#lib/stores/websocket.ts';
import { getAssetEdits, type AssetResponseDto } from '@immich/sdk';
import { Button, HStack, IconButton } from '@immich/ui';
import { mdiClose } from '@mdi/js';
@@ -1,8 +1,8 @@
<script lang="ts">
import { ResizeBoundary, transformManager } from '#lib/managers/edit/transform-manager.svelte.js';
import { getAssetMediaUrl } from '#lib/utils.js';
import { getAltText } from '#lib/utils/thumbnail-util.js';
import { toTimelineAsset } from '#lib/utils/timeline-util.js';
import { ResizeBoundary, transformManager } from '#lib/managers/edit/transform-manager.svelte.ts';
import { getAssetMediaUrl } from '#lib/utils.ts';
import { getAltText } from '#lib/utils/thumbnail-util.ts';
import { toTimelineAsset } from '#lib/utils/timeline-util.ts';
import { AssetMediaSize, type AssetResponseDto } from '@immich/sdk';
import { Icon } from '@immich/ui';
import { onMount } from 'svelte';
@@ -1,6 +1,6 @@
<script lang="ts">
import { shortcuts } from '#lib/actions/shortcut.js';
import { transformManager } from '#lib/managers/edit/transform-manager.svelte.js';
import { shortcuts } from '#lib/actions/shortcut.ts';
import { transformManager } from '#lib/managers/edit/transform-manager.svelte.ts';
import { Button, HStack, IconButton } from '@immich/ui';
import { mdiFlipHorizontal, mdiFlipVertical, mdiRotateLeft, mdiRotateRight } from '@mdi/js';
import { t } from 'svelte-i18n';
@@ -1,13 +1,13 @@
<script lang="ts">
import { shortcut } from '#lib/actions/shortcut.js';
import { shortcut } from '#lib/actions/shortcut.ts';
import ImageThumbnail from '#lib/components/assets/thumbnail/ImageThumbnail.svelte';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.js';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.ts';
import FaceCreateTagModal from '#lib/modals/CreateFaceModal.svelte';
import { faceManager } from '#lib/stores/face.svelte.js';
import { getPeopleThumbnailUrl } from '#lib/utils.js';
import { getNaturalSize, scaleToFit } from '#lib/utils/container-utils.js';
import { handleError } from '#lib/utils/handle-error.js';
import { normalizeSearchString } from '#lib/utils/string-utils.js';
import { faceManager } from '#lib/stores/face.svelte.ts';
import { getPeopleThumbnailUrl } from '#lib/utils.ts';
import { getNaturalSize, scaleToFit } from '#lib/utils/container-utils.ts';
import { handleError } from '#lib/utils/handle-error.ts';
import { normalizeSearchString } from '#lib/utils/string-utils.ts';
import { createFace, getAllPeople, type PersonResponseDto } from '@immich/sdk';
import { Button, Input, modalManager, toastManager } from '@immich/ui';
import { Canvas, InteractiveFabricObject, Rect } from 'fabric';
@@ -1,13 +1,13 @@
<script lang="ts">
import { ProjectionType } from '#lib/constants.js';
import { authManager } from '#lib/managers/auth-manager.svelte.js';
import type { TimelineAsset } from '#lib/managers/timeline-manager/types.js';
import { mediaQueryManager } from '#lib/stores/media-query-manager.svelte.js';
import { locale, playVideoThumbnailOnHover } from '#lib/stores/preferences.store.js';
import { getAssetMediaUrl, getAssetPlaybackUrl } from '#lib/utils.js';
import { moveFocus } from '#lib/utils/focus-util.js';
import { currentUrlReplaceAssetId } from '#lib/utils/navigation.js';
import { getAltText } from '#lib/utils/thumbnail-util.js';
import { ProjectionType } from '#lib/constants.ts';
import { authManager } from '#lib/managers/auth-manager.svelte.ts';
import type { TimelineAsset } from '#lib/managers/timeline-manager/types.ts';
import { mediaQueryManager } from '#lib/stores/media-query-manager.svelte.ts';
import { locale, playVideoThumbnailOnHover } from '#lib/stores/preferences.store.ts';
import { getAssetMediaUrl, getAssetPlaybackUrl } from '#lib/utils.ts';
import { moveFocus } from '#lib/utils/focus-util.ts';
import { currentUrlReplaceAssetId } from '#lib/utils/navigation.ts';
import { getAltText } from '#lib/utils/thumbnail-util.ts';
import { AssetMediaSize, AssetVisibility, type UserResponseDto } from '@immich/sdk';
import { Icon } from '@immich/ui';
import {
@@ -1,6 +1,6 @@
import { getIntersectionObserverMock } from '#lib/__mocks__/intersection-observer.mock.js';
import { getIntersectionObserverMock } from '#lib/__mocks__/intersection-observer.mock.ts';
import Thumbnail from '#lib/components/assets/thumbnail/Thumbnail.svelte';
import { getTabbable } from '#lib/utils/focus-util.js';
import { getTabbable } from '#lib/utils/focus-util.ts';
import { render } from '@testing-library/svelte';
import { assetFactory } from '#test-data/factories/asset-factory';
@@ -1,11 +1,11 @@
<script lang="ts">
import SearchPeople from '#lib/components/faces-page/PeopleSearch.svelte';
import { timeBeforeShowLoadingSpinner } from '#lib/constants.js';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.js';
import { getPeopleThumbnailUrl, handlePromiseError } from '#lib/utils.js';
import { handleError } from '#lib/utils/handle-error.js';
import { zoomImageToBase64 } from '#lib/utils/people-utils.js';
import { getPersonNameWithHiddenValue } from '#lib/utils/person.js';
import { timeBeforeShowLoadingSpinner } from '#lib/constants.ts';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.ts';
import { getPeopleThumbnailUrl, handlePromiseError } from '#lib/utils.ts';
import { handleError } from '#lib/utils/handle-error.ts';
import { zoomImageToBase64 } from '#lib/utils/people-utils.ts';
import { getPersonNameWithHiddenValue } from '#lib/utils/person.ts';
import { AssetTypeEnum, getAllPeople, type AssetFaceResponseDto, type PersonResponseDto } from '@immich/sdk';
import { IconButton, LoadingSpinner } from '@immich/ui';
import { mdiArrowLeftThin, mdiClose, mdiMagnify, mdiPlus } from '@mdi/js';
@@ -1,9 +1,9 @@
<script lang="ts">
import { initInput } from '#lib/actions/focus.js';
import { maximumLengthSearchPeople, timeBeforeShowLoadingSpinner } from '#lib/constants.js';
import { initInput } from '#lib/actions/focus.ts';
import { maximumLengthSearchPeople, timeBeforeShowLoadingSpinner } from '#lib/constants.ts';
import SearchBar from '#lib/elements/SearchBar.svelte';
import { handleError } from '#lib/utils/handle-error.js';
import { searchNameLocal } from '#lib/utils/person.js';
import { handleError } from '#lib/utils/handle-error.ts';
import { searchNameLocal } from '#lib/utils/person.ts';
import { searchPerson, type PersonResponseDto } from '@immich/sdk';
import { t } from 'svelte-i18n';
@@ -1,14 +1,14 @@
<script lang="ts">
import { shortcut } from '#lib/actions/shortcut.js';
import { shortcut } from '#lib/actions/shortcut.ts';
import OnEvents from '#lib/components/OnEvents.svelte';
import { timeBeforeShowLoadingSpinner } from '#lib/constants.js';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.js';
import { eventManager } from '#lib/managers/event-manager.svelte.js';
import { languageManager } from '#lib/managers/language-manager.svelte.js';
import { getPeopleThumbnailUrl, handlePromiseError } from '#lib/utils.js';
import { handleError } from '#lib/utils/handle-error.js';
import { zoomImageToBase64 } from '#lib/utils/people-utils.js';
import { getPersonNameWithHiddenValue } from '#lib/utils/person.js';
import { timeBeforeShowLoadingSpinner } from '#lib/constants.ts';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.ts';
import { eventManager } from '#lib/managers/event-manager.svelte.ts';
import { languageManager } from '#lib/managers/language-manager.svelte.ts';
import { getPeopleThumbnailUrl, handlePromiseError } from '#lib/utils.ts';
import { handleError } from '#lib/utils/handle-error.ts';
import { zoomImageToBase64 } from '#lib/utils/people-utils.ts';
import { getPersonNameWithHiddenValue } from '#lib/utils/person.ts';
import {
AssetTypeEnum,
createPerson,
@@ -2,9 +2,9 @@
import BreadcrumbActionPage from '#lib/components/BreadcrumbActionPage.svelte';
import NavigationBar from '#lib/components/shared-components/navigation-bar/NavigationBar.svelte';
import BottomInfo from '#lib/components/shared-components/side-bar/BottomInfo.svelte';
import { Route } from '#lib/route.js';
import { sidebarStore } from '#lib/stores/sidebar.svelte.js';
import type { HeaderButtonActionItem } from '#lib/types.js';
import { Route } from '#lib/route.ts';
import { sidebarStore } from '#lib/stores/sidebar.svelte.ts';
import type { HeaderButtonActionItem } from '#lib/types.ts';
import { AppShell, AppShellHeader, AppShellSidebar, MenuItemType, NavbarItem, type BreadcrumbItem } from '@immich/ui';
import { mdiAccountMultipleOutline, mdiBookshelf, mdiCog, mdiServer, mdiTrayFull, mdiWrench } from '@mdi/js';
import type { Snippet } from 'svelte';
@@ -3,11 +3,11 @@
</script>
<script lang="ts">
import { useActions, type ActionArray } from '#lib/actions/use-actions.js';
import { useActions, type ActionArray } from '#lib/actions/use-actions.ts';
import NavigationBar from '#lib/components/shared-components/navigation-bar/NavigationBar.svelte';
import UserSidebar from '#lib/components/shared-components/side-bar/UserSidebar.svelte';
import type { HeaderButtonActionItem } from '#lib/types.js';
import { openFileUploadDialog } from '#lib/utils/file-uploader.js';
import type { HeaderButtonActionItem } from '#lib/types.ts';
import { openFileUploadDialog } from '#lib/utils/file-uploader.ts';
import { Button, ContextMenuButton, HStack, isMenuItemType, type MenuItemType } from '@immich/ui';
import type { Snippet } from 'svelte';
import { t } from 'svelte-i18n';
@@ -1,4 +1,4 @@
import { locale } from '#lib/stores/preferences.store.js';
import { locale } from '#lib/stores/preferences.store.ts';
import { renderWithTooltips } from '#tests/helpers';
import { screen } from '@testing-library/svelte';
import { DateTime } from 'luxon';
@@ -1,9 +1,9 @@
<script lang="ts">
import OnEvents from '#lib/components/OnEvents.svelte';
import { BackupFileStatus } from '#lib/constants.js';
import { getDatabaseBackupActions, handleRestoreDatabaseBackup } from '#lib/services/database-backups.service.js';
import { locale } from '#lib/stores/preferences.store.js';
import { getBytesWithUnit } from '#lib/utils/byte-units.js';
import { BackupFileStatus } from '#lib/constants.ts';
import { getDatabaseBackupActions, handleRestoreDatabaseBackup } from '#lib/services/database-backups.service.ts';
import { locale } from '#lib/stores/preferences.store.ts';
import { getBytesWithUnit } from '#lib/utils/byte-units.ts';
import { Button, Card, CardBody, ContextMenuButton, HStack, Icon, Stack, Text } from '@immich/ui';
import { mdiAlertCircle, mdiCheckCircle, mdiDatabaseRefreshOutline } from '@mdi/js';
import { DateTime } from 'luxon';
@@ -2,7 +2,7 @@
import HeaderActionButton from '#lib/components/HeaderActionButton.svelte';
import MaintenanceBackupEntry from '#lib/components/maintenance/MaintenanceBackupEntry.svelte';
import OnEvents from '#lib/components/OnEvents.svelte';
import { handleUploadDatabaseBackup } from '#lib/services/database-backups.service.js';
import { handleUploadDatabaseBackup } from '#lib/services/database-backups.service.ts';
import type { DatabaseBackupDto } from '@immich/sdk';
import { listDatabaseBackups } from '@immich/sdk';
import { Card, CardBody, HStack, Icon, ProgressBar, Stack, Text } from '@immich/ui';
@@ -1,6 +1,6 @@
<script lang="ts">
import OnEvents from '#lib/components/OnEvents.svelte';
import { getIntegrityReportItemActions } from '#lib/services/integrity.service.js';
import { getIntegrityReportItemActions } from '#lib/services/integrity.service.ts';
import type { IntegrityReport } from '@immich/sdk';
import { ContextMenuButton, TableCell, TableRow } from '@immich/ui';
import { t } from 'svelte-i18n';
@@ -3,11 +3,11 @@
import IndividualSharedViewer from '#lib/components/share-page/IndividualSharedViewer.svelte';
import ControlAppBar from '#lib/components/shared-components/ControlAppBar.svelte';
import ThemeButton from '#lib/components/shared-components/ThemeButton.svelte';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.js';
import { authManager } from '#lib/managers/auth-manager.svelte.js';
import { setSharedLink } from '#lib/utils.js';
import { handleError } from '#lib/utils/handle-error.js';
import { navigate } from '#lib/utils/navigation.js';
import { assetViewerManager } from '#lib/managers/asset-viewer-manager.svelte.ts';
import { authManager } from '#lib/managers/auth-manager.svelte.ts';
import { setSharedLink } from '#lib/utils.ts';
import { handleError } from '#lib/utils/handle-error.ts';
import { navigate } from '#lib/utils/navigation.ts';
import { sharedLinkLogin, SharedLinkType, type AssetResponseDto, type SharedLinkResponseDto } from '@immich/sdk';
import { Button, Logo, PasswordInput } from '@immich/ui';
import { onDestroy, tick } from 'svelte';
@@ -1,5 +1,5 @@
<script lang="ts">
import { ByteUnit } from '#lib/utils/byte-units.js';
import { ByteUnit } from '#lib/utils/byte-units.ts';
import { Icon, Text } from '@immich/ui';
import type { Snippet } from 'svelte';
@@ -1,21 +1,21 @@
<script lang="ts">
import { goto } from '$app/navigation';
import type { Action } from '#lib/components/asset-viewer/actions/action.js';
import type { Action } from '#lib/components/asset-viewer/actions/action.ts';
import DownloadAction from '#lib/components/timeline/actions/DownloadAction.svelte';
import RemoveFromSharedLink from '#lib/components/timeline/actions/RemoveFromSharedLinkAction.svelte';
import AssetSelectControlBar from '#lib/components/timeline/AssetSelectControlBar.svelte';
import { AssetAction } from '#lib/constants.js';
import { assetMultiSelectManager } from '#lib/managers/asset-multi-select-manager.svelte.js';
import { authManager } from '#lib/managers/auth-manager.svelte.js';
import type { Viewport } from '#lib/managers/timeline-manager/types.js';
import { Route } from '#lib/route.js';
import { dragAndDropFilesStore } from '#lib/stores/drag-and-drop-files.store.js';
import { mediaQueryManager } from '#lib/stores/media-query-manager.svelte.js';
import { handlePromiseError } from '#lib/utils.js';
import { downloadArchive } from '#lib/utils/asset-utils.js';
import { fileUploadHandler, openFileUploadDialog } from '#lib/utils/file-uploader.js';
import { handleError } from '#lib/utils/handle-error.js';
import { toTimelineAsset } from '#lib/utils/timeline-util.js';
import { AssetAction } from '#lib/constants.ts';
import { assetMultiSelectManager } from '#lib/managers/asset-multi-select-manager.svelte.ts';
import { authManager } from '#lib/managers/auth-manager.svelte.ts';
import type { Viewport } from '#lib/managers/timeline-manager/types.ts';
import { Route } from '#lib/route.ts';
import { dragAndDropFilesStore } from '#lib/stores/drag-and-drop-files.store.ts';
import { mediaQueryManager } from '#lib/stores/media-query-manager.svelte.ts';
import { handlePromiseError } from '#lib/utils.ts';
import { downloadArchive } from '#lib/utils/asset-utils.ts';
import { fileUploadHandler, openFileUploadDialog } from '#lib/utils/file-uploader.ts';
import { handleError } from '#lib/utils/handle-error.ts';
import { toTimelineAsset } from '#lib/utils/timeline-util.ts';
import { getAssetInfo, type SharedLinkResponseDto } from '@immich/sdk';
import { IconButton, Logo, toastManager } from '@immich/ui';
import { mdiDownload, mdiFileImagePlusOutline, mdiSelectAll } from '@mdi/js';
@@ -20,9 +20,9 @@
</script>
<script lang="ts">
import { focusOutside } from '#lib/actions/focus-outside.js';
import { shortcuts } from '#lib/actions/shortcut.js';
import { generateId } from '#lib/utils/generate-id.js';
import { focusOutside } from '#lib/actions/focus-outside.ts';
import { shortcuts } from '#lib/actions/shortcut.ts';
import { generateId } from '#lib/utils/generate-id.ts';
import { Icon, IconButton, Label } from '@immich/ui';
import { mdiChevronDown, mdiClose, mdiMagnify } from '@mdi/js';
import { onMount, tick } from 'svelte';
@@ -1,6 +1,6 @@
<script lang="ts">
import NumberRangeInput from '#lib/components/shared-components/NumberRangeInput.svelte';
import { generateId } from '#lib/utils/generate-id.js';
import { generateId } from '#lib/utils/generate-id.ts';
import { convert } from 'geo-coordinates-parser';
import { t } from 'svelte-i18n';
@@ -3,7 +3,7 @@
</script>
<script lang="ts">
import { getProfileImageUrl } from '#lib/utils.js';
import { getProfileImageUrl } from '#lib/utils.ts';
import { type UserAvatarColor } from '@immich/sdk';
import { t } from 'svelte-i18n';
@@ -1,5 +1,5 @@
<script lang="ts">
import { SCROLL_PROPERTIES } from '#lib/components/shared-components/album-selection/album-selection-utils.js';
import { SCROLL_PROPERTIES } from '#lib/components/shared-components/album-selection/album-selection-utils.ts';
import { Icon } from '@immich/ui';
import { mdiPlus } from '@mdi/js';
import { t } from 'svelte-i18n';
@@ -2,8 +2,8 @@ import {
type AlbumModalRow,
AlbumModalRowConverter,
AlbumModalRowType,
} from '#lib/components/shared-components/album-selection/album-selection-utils.js';
import { AlbumSortBy, SortOrder } from '#lib/stores/preferences.store.js';
} from '#lib/components/shared-components/album-selection/album-selection-utils.ts';
import { AlbumSortBy, SortOrder } from '#lib/stores/preferences.store.ts';
import type { AlbumResponseDto } from '@immich/sdk';
import { albumFactory } from '#test-data/factories/album-factory';
@@ -1,5 +1,5 @@
import { sortAlbums } from '#lib/utils/album-utils.js';
import { normalizeSearchString } from '#lib/utils/string-utils.js';
import { sortAlbums } from '#lib/utils/album-utils.ts';
import { normalizeSearchString } from '#lib/utils/string-utils.ts';
import type { AlbumResponseDto } from '@immich/sdk';
import { t } from 'svelte-i18n';
import { get } from 'svelte/store';
@@ -1,15 +1,15 @@
<script lang="ts">
import { contextMenuNavigation } from '#lib/actions/context-menu-navigation.js';
import { shortcuts } from '#lib/actions/shortcut.js';
import { contextMenuNavigation } from '#lib/actions/context-menu-navigation.ts';
import { shortcuts } from '#lib/actions/shortcut.ts';
import ContextMenu from '#lib/components/shared-components/context-menu/ContextMenu.svelte';
import { languageManager } from '#lib/managers/language-manager.svelte.js';
import { optionClickCallbackStore, selectedIdStore } from '#lib/stores/context-menu.store.js';
import { languageManager } from '#lib/managers/language-manager.svelte.ts';
import { optionClickCallbackStore, selectedIdStore } from '#lib/stores/context-menu.store.ts';
import {
getContextMenuPositionFromBoundingRect,
getContextMenuPositionFromEvent,
type Align,
} from '#lib/utils/context-menu.js';
import { generateId } from '#lib/utils/generate-id.js';
} from '#lib/utils/context-menu.ts';
import { generateId } from '#lib/utils/generate-id.ts';
import { IconButton, type Color, type Size, type Variants } from '@immich/ui';
import type { Snippet } from 'svelte';
import type { HTMLAttributes } from 'svelte/elements';
@@ -1,6 +1,6 @@
<script lang="ts">
import { clickOutside } from '#lib/actions/click-outside.js';
import { languageManager } from '#lib/managers/language-manager.svelte.js';
import { clickOutside } from '#lib/actions/click-outside.ts';
import { languageManager } from '#lib/managers/language-manager.svelte.ts';
import type { Snippet } from 'svelte';
interface Props {
@@ -1,8 +1,8 @@
<script lang="ts">
import type { Shortcut } from '#lib/actions/shortcut.js';
import { shortcut as bindShortcut, shortcutLabel as computeShortcutLabel } from '#lib/actions/shortcut.js';
import { optionClickCallbackStore, selectedIdStore } from '#lib/stores/context-menu.store.js';
import { generateId } from '#lib/utils/generate-id.js';
import type { Shortcut } from '#lib/actions/shortcut.ts';
import { shortcut as bindShortcut, shortcutLabel as computeShortcutLabel } from '#lib/actions/shortcut.ts';
import { optionClickCallbackStore, selectedIdStore } from '#lib/stores/context-menu.store.ts';
import { generateId } from '#lib/utils/generate-id.ts';
import { Icon, type IconLike } from '@immich/ui';
interface Props {

Some files were not shown because too many files have changed in this diff Show More