From 2dd6b47714a183a53390574ba9b993d13b09f1dc Mon Sep 17 00:00:00 2001 From: Brandon Wees Date: Wed, 27 May 2026 05:01:30 -0500 Subject: [PATCH 01/71] fix: OCR bounding box positioning (#28568) --- web/src/lib/components/AdaptiveImage.svelte | 163 +++++++++++--------- web/src/lib/components/ImageLayer.svelte | 15 +- 2 files changed, 90 insertions(+), 88 deletions(-) diff --git a/web/src/lib/components/AdaptiveImage.svelte b/web/src/lib/components/AdaptiveImage.svelte index 4f3522887c..04136c721c 100644 --- a/web/src/lib/components/AdaptiveImage.svelte +++ b/web/src/lib/components/AdaptiveImage.svelte @@ -149,29 +149,35 @@ return { width: 1, height: 1 }; }); - const { insetInlineStart, top, rasterWidth, rasterHeight, rasterScale } = $derived.by(() => { - const scaleFn = objectFit === 'cover' ? scaleToCover : scaleToFit; - const { width, height } = scaleFn(imageDimensions, container); - if (maxRasterPixels === 0) { + const { insetInlineStart, top, displayWidth, displayHeight, rasterWidth, rasterHeight, rasterScale } = $derived.by( + () => { + const scaleFn = objectFit === 'cover' ? scaleToCover : scaleToFit; + const { width, height } = scaleFn(imageDimensions, container); + if (maxRasterPixels === 0) { + return { + insetInlineStart: (container.width - width) / 2 + 'px', + top: (container.height - height) / 2 + 'px', + displayWidth: width + 'px', + displayHeight: height + 'px', + rasterWidth: width + 'px', + rasterHeight: height + 'px', + rasterScale: 1, + }; + } + const nativeRatio = imageDimensions.width / width; + const budgetRatio = Math.sqrt(maxRasterPixels / Math.max(width * height, 1)); + const rasterRatio = Math.max(1, Math.min(nativeRatio, budgetRatio)); return { insetInlineStart: (container.width - width) / 2 + 'px', top: (container.height - height) / 2 + 'px', - rasterWidth: width + 'px', - rasterHeight: height + 'px', - rasterScale: 1, + displayWidth: width + 'px', + displayHeight: height + 'px', + rasterWidth: width * rasterRatio + 'px', + rasterHeight: height * rasterRatio + 'px', + rasterScale: 1 / rasterRatio, }; - } - const nativeRatio = imageDimensions.width / width; - const budgetRatio = Math.sqrt(maxRasterPixels / Math.max(width * height, 1)); - const rasterRatio = Math.max(1, Math.min(nativeRatio, budgetRatio)); - return { - insetInlineStart: (container.width - width) / 2 + 'px', - top: (container.height - height) / 2 + 'px', - rasterWidth: width * rasterRatio + 'px', - rasterHeight: height * rasterRatio + 'px', - rasterScale: 1 / rasterRatio, - }; - }); + }, + ); const { status } = $derived(adaptiveImageLoader); const alt = $derived(status.urls.preview ? $getAltText(toTimelineAsset(asset)) : ''); @@ -216,69 +222,78 @@ {@render backdrop?.()}
0 ? 'transform' : undefined} + style:width={displayWidth} + style:height={displayHeight} > - {#if show.alphaBackground} - - {/if} - - {#if show.thumbhash} - {#if asset.thumbhash} - - - {:else if show.spinner} - +
0 ? 'transform' : undefined} + > + {#if show.alphaBackground} + {/if} - {/if} - {#if show.thumbnail} - - {/if} + {#if show.thumbhash} + {#if asset.thumbhash} + + + {:else if show.spinner} + + {/if} + {/if} - {#if show.brokenAsset} - - {/if} + {#if show.thumbnail} + + {/if} - {#if show.preview} - - {/if} + {#if show.brokenAsset} + + {/if} - {#if show.original} - + {#if show.preview} + + {/if} + + {#if show.original} + + {/if} +
+ + {#if overlays} +
+ {@render overlays()} +
{/if}
diff --git a/web/src/lib/components/ImageLayer.svelte b/web/src/lib/components/ImageLayer.svelte index 1ac854259d..40bf7d6965 100644 --- a/web/src/lib/components/ImageLayer.svelte +++ b/web/src/lib/components/ImageLayer.svelte @@ -1,7 +1,6 @@ {#key adaptiveImageLoader} @@ -42,6 +30,5 @@ draggable={false} data-testid={quality} /> - {@render overlays?.()} {/key} From 748a13104a905e9e2ffa3dd58b4e126b9cf63875 Mon Sep 17 00:00:00 2001 From: Thomas van Gemert <125323285+tvangemert@users.noreply.github.com> Date: Wed, 27 May 2026 16:17:12 +0200 Subject: [PATCH 02/71] chore(docs): update FAQ with profile picture change instructions (#28634) Update FAQ with profile picture change instructions Based on this discussion (https://github.com/immich-app/immich/discussions/27168) it seems I am not the only one confused by how Immich lets you change your profile picture. An addition to the FAQ will help. I also added another horizontal separator to be consistent with the rest of the document. --- docs/docs/FAQ.mdx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/docs/FAQ.mdx b/docs/docs/FAQ.mdx index 7b7a265ddf..1a17385132 100644 --- a/docs/docs/FAQ.mdx +++ b/docs/docs/FAQ.mdx @@ -26,6 +26,8 @@ For organizations seeking to resell Immich, we have established the following gu When in doubt or if you have an edge case scenario, we encourage you to contact us directly via email to discuss the use of our trademark. We can provide clear guidance on what is acceptable and what is not. You can reach out at: questions@immich.app +--- + ## User ### How can I reset the admin password? @@ -36,6 +38,10 @@ The admin password can be reset by running the [reset-admin-password](/administr You can see the list of all users by running [list-users](/administration/server-commands.md) Command on the Immich-server. +### How can I change my profile picture? + +View a single photo, press the three dots in the top-right to show context menu, and select "Set as profile picture". In the pop-up, use your mouse scroll wheel to zoom in the picture until it completely fills the circle. Click and drag the picture to align it to your liking. Press "Save" to save your changes. + --- ## Mobile App From cf991e7b1be8e8e0400a1aa746d70fec6644c494 Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Wed, 27 May 2026 10:24:31 -0400 Subject: [PATCH 03/71] feat: workflow actions (#28639) --- i18n/en.json | 3 + pnpm-lock.yaml | 62 ++++++------ web/package.json | 2 +- .../lib/modals/WorkflowDuplicateModal.svelte | 53 +++++++++++ web/src/lib/services/asset.service.ts | 2 +- web/src/lib/services/system-config.service.ts | 33 +------ web/src/lib/services/workflow.service.ts | 69 ++++++++++++-- web/src/lib/utils.ts | 41 +++++++- web/src/lib/utils/asset-utils.ts | 28 +----- web/src/routes/(user)/workflows/+page.svelte | 47 ++++------ .../workflows/[workflowId]/+page.svelte | 94 +++++++++++-------- 11 files changed, 267 insertions(+), 167 deletions(-) create mode 100644 web/src/lib/modals/WorkflowDuplicateModal.svelte diff --git a/i18n/en.json b/i18n/en.json index cb8cc9c3f9..4ebd24b56b 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -840,6 +840,7 @@ "copy_error": "Copy error", "copy_file_path": "Copy file path", "copy_image": "Copy Image", + "copy_json": "Copy JSON", "copy_link": "Copy link", "copy_link_to_clipboard": "Copy link to clipboard", "copy_password": "Copy password", @@ -979,6 +980,8 @@ "downloading_media": "Downloading media", "drag_to_reorder": "Drag to reorder", "drop_files_to_upload": "Drop files anywhere to upload", + "duplicate": "Duplicate", + "duplicate_workflow": "Duplicate workflow", "duplicates": "Duplicates", "duplicates_description": "Resolve each group by indicating which, if any, are duplicates.", "duration": "Duration", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f380d940d1..64cf0d3d85 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -609,7 +609,7 @@ importers: version: 10.0.1(eslint@10.4.0(jiti@2.7.0)) '@nestjs/cli': specifier: ^11.0.2 - version: 11.0.21(@swc/core@1.15.33(@swc/helpers@0.5.21))(@types/node@24.12.4)(esbuild@0.28.0)(lightningcss@1.32.0)(prettier@3.8.3) + version: 11.0.21(@swc/core@1.15.33(@swc/helpers@0.5.22))(@types/node@24.12.4)(esbuild@0.28.0)(lightningcss@1.32.0)(prettier@3.8.3) '@nestjs/schematics': specifier: ^11.0.0 version: 11.1.0(chokidar@4.0.3)(prettier@3.8.3)(typescript@6.0.3) @@ -618,7 +618,7 @@ importers: version: 11.1.21(@nestjs/common@11.1.21(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.21)(@nestjs/platform-express@11.1.21) '@swc/core': specifier: ^1.4.14 - version: 1.15.33(@swc/helpers@0.5.21) + version: 1.15.33(@swc/helpers@0.5.22) '@types/archiver': specifier: ^7.0.0 version: 7.0.0 @@ -738,7 +738,7 @@ importers: version: 8.59.4(eslint@10.4.0(jiti@2.7.0))(typescript@6.0.3) unplugin-swc: specifier: ^1.4.5 - version: 1.5.9(@swc/core@1.15.33(@swc/helpers@0.5.21))(rollup@4.60.4) + version: 1.5.9(@swc/core@1.15.33(@swc/helpers@0.5.22))(rollup@4.60.4) vite-tsconfig-paths: specifier: ^6.0.0 version: 6.1.1(typescript@6.0.3)(vite@8.0.13(@types/node@24.12.4)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.99.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.9.0)) @@ -758,8 +758,8 @@ importers: specifier: workspace:* version: link:../packages/sdk '@immich/ui': - specifier: ^0.79.0 - version: 0.79.0(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.8(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@24.12.4)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.99.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.8(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@24.12.4)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.99.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.8(@typescript-eslint/types@8.59.4)) + specifier: ^0.79.2 + version: 0.79.2(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.8(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@24.12.4)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.99.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.8(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@24.12.4)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.99.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.8(@typescript-eslint/types@8.59.4)) '@mapbox/mapbox-gl-rtl-text': specifier: 0.4.0 version: 0.4.0 @@ -1691,6 +1691,10 @@ packages: resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.29.7': + resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} + engines: {node: '>=6.9.0'} + '@babel/template@7.28.6': resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} @@ -3204,8 +3208,8 @@ packages: resolution: {integrity: sha512-O1SJ+BbeFVsUTF4af1MfagJZM+lPgLjI8lQ3SZNjpo8SGJReSbUl2ii03OKuGni/G0yp2GnRLpOTNSHYGtVrcg==} hasBin: true - '@immich/ui@0.79.0': - resolution: {integrity: sha512-UEQZrP8CTc4Kth1xCV8/6Xmk1P51GQKISC7vKqcrM0BO0fxCaNwJK8Ocn6R8baVqH52JYfPb1yQR9bweBnCjXw==} + '@immich/ui@0.79.2': + resolution: {integrity: sha512-tnpYhYHrjrFJK18QglRMzPUtHv6q5V6tW38HiAraQJBv7MCg+yaJDrdF8omM2L5F311FGlv1PZLJYvmR4e49PA==} peerDependencies: '@sveltejs/kit': ^2.13.0 svelte: ^5.0.0 @@ -4982,8 +4986,8 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/helpers@0.5.21': - resolution: {integrity: sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==} + '@swc/helpers@0.5.22': + resolution: {integrity: sha512-/e2Ly3Docn9kYByap6TV4oquJ3wQuz3c+kC74riqtkwU9CwTMeuj6t2rW+bRr4pyOx/CYQM4wr0RgaKQwGEz0A==} '@swc/types@0.1.26': resolution: {integrity: sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw==} @@ -13787,6 +13791,8 @@ snapshots: '@babel/runtime@7.29.2': {} + '@babel/runtime@7.29.7': {} + '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 @@ -15879,7 +15885,7 @@ snapshots: pg-connection-string: 2.13.0 postgres: 3.4.9 - '@immich/ui@0.79.0(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.8(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@24.12.4)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.99.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.8(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@24.12.4)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.99.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.8(@typescript-eslint/types@8.59.4))': + '@immich/ui@0.79.2(@sveltejs/kit@2.60.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.55.8(@typescript-eslint/types@8.59.4))(vite@8.0.13(@types/node@24.12.4)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.99.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.8(@typescript-eslint/types@8.59.4))(typescript@6.0.3)(vite@8.0.13(@types/node@24.12.4)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.99.0)(terser@5.47.1)(tsx@4.22.3)(yaml@2.9.0)))(svelte@5.55.8(@typescript-eslint/types@8.59.4))': dependencies: '@internationalized/date': 3.12.1 '@mdi/js': 7.4.47 @@ -16035,7 +16041,7 @@ snapshots: '@internationalized/date@3.12.1': dependencies: - '@swc/helpers': 0.5.21 + '@swc/helpers': 0.5.22 '@ioredis/commands@1.5.1': {} @@ -16438,7 +16444,7 @@ snapshots: bullmq: 5.76.10 tslib: 2.8.1 - '@nestjs/cli@11.0.21(@swc/core@1.15.33(@swc/helpers@0.5.21))(@types/node@24.12.4)(esbuild@0.28.0)(lightningcss@1.32.0)(prettier@3.8.3)': + '@nestjs/cli@11.0.21(@swc/core@1.15.33(@swc/helpers@0.5.22))(@types/node@24.12.4)(esbuild@0.28.0)(lightningcss@1.32.0)(prettier@3.8.3)': dependencies: '@angular-devkit/core': 19.2.24(chokidar@4.0.3) '@angular-devkit/schematics': 19.2.24(chokidar@4.0.3) @@ -16449,17 +16455,17 @@ snapshots: chokidar: 4.0.3 cli-table3: 0.6.5 commander: 4.1.1 - fork-ts-checker-webpack-plugin: 9.1.0(typescript@5.9.3)(webpack@5.106.0(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.0)(lightningcss@1.32.0)) + fork-ts-checker-webpack-plugin: 9.1.0(typescript@5.9.3)(webpack@5.106.0(@swc/core@1.15.33(@swc/helpers@0.5.22))(esbuild@0.28.0)(lightningcss@1.32.0)) glob: 13.0.6 node-emoji: 1.11.0 ora: 5.4.1 tsconfig-paths: 4.2.0 tsconfig-paths-webpack-plugin: 4.2.0 typescript: 5.9.3 - webpack: 5.106.0(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.0)(lightningcss@1.32.0) + webpack: 5.106.0(@swc/core@1.15.33(@swc/helpers@0.5.22))(esbuild@0.28.0)(lightningcss@1.32.0) webpack-node-externals: 3.0.0 optionalDependencies: - '@swc/core': 1.15.33(@swc/helpers@0.5.21) + '@swc/core': 1.15.33(@swc/helpers@0.5.22) transitivePeerDependencies: - '@minify-html/node' - '@swc/css' @@ -17438,7 +17444,7 @@ snapshots: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 invariant: 2.2.4 prop-types: 15.8.1 react: 19.2.6 @@ -17647,7 +17653,7 @@ snapshots: '@swc/core-win32-x64-msvc@1.15.33': optional: true - '@swc/core@1.15.33(@swc/helpers@0.5.21)': + '@swc/core@1.15.33(@swc/helpers@0.5.22)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.26 @@ -17664,11 +17670,11 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.15.33 '@swc/core-win32-ia32-msvc': 1.15.33 '@swc/core-win32-x64-msvc': 1.15.33 - '@swc/helpers': 0.5.21 + '@swc/helpers': 0.5.22 '@swc/counter@0.1.3': {} - '@swc/helpers@0.5.21': + '@swc/helpers@0.5.22': dependencies: tslib: 2.8.1 @@ -21084,7 +21090,7 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@9.1.0(typescript@5.9.3)(webpack@5.106.0(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.0)(lightningcss@1.32.0)): + fork-ts-checker-webpack-plugin@9.1.0(typescript@5.9.3)(webpack@5.106.0(@swc/core@1.15.33(@swc/helpers@0.5.22))(esbuild@0.28.0)(lightningcss@1.32.0)): dependencies: '@babel/code-frame': 7.29.0 chalk: 4.1.2 @@ -21099,7 +21105,7 @@ snapshots: semver: 7.8.0 tapable: 2.3.3 typescript: 5.9.3 - webpack: 5.106.0(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.0)(lightningcss@1.32.0) + webpack: 5.106.0(@swc/core@1.15.33(@swc/helpers@0.5.22))(esbuild@0.28.0)(lightningcss@1.32.0) form-data-encoder@2.1.4: {} @@ -25761,15 +25767,15 @@ snapshots: - bare-abort-controller - react-native-b4a - terser-webpack-plugin@5.6.0(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.0)(lightningcss@1.32.0)(webpack@5.106.0(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.0)(lightningcss@1.32.0)): + terser-webpack-plugin@5.6.0(@swc/core@1.15.33(@swc/helpers@0.5.22))(esbuild@0.28.0)(lightningcss@1.32.0)(webpack@5.106.0(@swc/core@1.15.33(@swc/helpers@0.5.22))(esbuild@0.28.0)(lightningcss@1.32.0)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 terser: 5.47.1 - webpack: 5.106.0(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.0)(lightningcss@1.32.0) + webpack: 5.106.0(@swc/core@1.15.33(@swc/helpers@0.5.22))(esbuild@0.28.0)(lightningcss@1.32.0) optionalDependencies: - '@swc/core': 1.15.33(@swc/helpers@0.5.21) + '@swc/core': 1.15.33(@swc/helpers@0.5.22) esbuild: 0.28.0 lightningcss: 1.32.0 @@ -26176,10 +26182,10 @@ snapshots: unpipe@1.0.0: {} - unplugin-swc@1.5.9(@swc/core@1.15.33(@swc/helpers@0.5.21))(rollup@4.60.4): + unplugin-swc@1.5.9(@swc/core@1.15.33(@swc/helpers@0.5.22))(rollup@4.60.4): dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.60.4) - '@swc/core': 1.15.33(@swc/helpers@0.5.21) + '@swc/core': 1.15.33(@swc/helpers@0.5.22) load-tsconfig: 0.2.5 unplugin: 2.3.11 transitivePeerDependencies: @@ -26578,7 +26584,7 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.106.0(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.0)(lightningcss@1.32.0): + webpack@5.106.0(@swc/core@1.15.33(@swc/helpers@0.5.22))(esbuild@0.28.0)(lightningcss@1.32.0): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.9 @@ -26602,7 +26608,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.3 - terser-webpack-plugin: 5.6.0(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.0)(lightningcss@1.32.0)(webpack@5.106.0(@swc/core@1.15.33(@swc/helpers@0.5.21))(esbuild@0.28.0)(lightningcss@1.32.0)) + terser-webpack-plugin: 5.6.0(@swc/core@1.15.33(@swc/helpers@0.5.22))(esbuild@0.28.0)(lightningcss@1.32.0)(webpack@5.106.0(@swc/core@1.15.33(@swc/helpers@0.5.22))(esbuild@0.28.0)(lightningcss@1.32.0)) watchpack: 2.5.1 webpack-sources: 3.4.1 transitivePeerDependencies: diff --git a/web/package.json b/web/package.json index aa6e3a2692..2fb37daaed 100644 --- a/web/package.json +++ b/web/package.json @@ -27,7 +27,7 @@ "@formatjs/icu-messageformat-parser": "^3.0.0", "@immich/justified-layout-wasm": "^0.4.3", "@immich/sdk": "workspace:*", - "@immich/ui": "^0.79.0", + "@immich/ui": "^0.79.2", "@mapbox/mapbox-gl-rtl-text": "0.4.0", "@mdi/js": "^7.4.47", "@noble/hashes": "^2.2.0", diff --git a/web/src/lib/modals/WorkflowDuplicateModal.svelte b/web/src/lib/modals/WorkflowDuplicateModal.svelte new file mode 100644 index 0000000000..0b1286d499 --- /dev/null +++ b/web/src/lib/modals/WorkflowDuplicateModal.svelte @@ -0,0 +1,53 @@ + + + + + + + + + +