From 380fc0697925f69995cc76a499dfd0f16480c5ba Mon Sep 17 00:00:00 2001 From: Pranay Pandey <79053599+Pranay-Pandey@users.noreply.github.com> Date: Mon, 4 Nov 2024 20:33:03 +0530 Subject: [PATCH 01/21] fix: remove duplicateIds on unique assets (#13752) --- server/src/services/duplicate.service.spec.ts | 16 +++++++++++++-- server/src/services/duplicate.service.ts | 20 +++++++++++++++++-- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/server/src/services/duplicate.service.spec.ts b/server/src/services/duplicate.service.spec.ts index 095d53dde6570..75af1ef6f1f49 100644 --- a/server/src/services/duplicate.service.spec.ts +++ b/server/src/services/duplicate.service.spec.ts @@ -31,11 +31,23 @@ describe(SearchService.name, () => { describe('getDuplicates', () => { it('should get duplicates', async () => { - assetMock.getDuplicates.mockResolvedValue([assetStub.hasDupe]); + assetMock.getDuplicates.mockResolvedValue([assetStub.hasDupe, assetStub.hasDupe]); await expect(sut.getDuplicates(authStub.admin)).resolves.toEqual([ - { duplicateId: assetStub.hasDupe.duplicateId, assets: [expect.objectContaining({ id: assetStub.hasDupe.id })] }, + { + duplicateId: assetStub.hasDupe.duplicateId, + assets: [ + expect.objectContaining({ id: assetStub.hasDupe.id }), + expect.objectContaining({ id: assetStub.hasDupe.id }), + ], + }, ]); }); + + it('should update assets with duplicateId', async () => { + assetMock.getDuplicates.mockResolvedValue([assetStub.hasDupe]); + await expect(sut.getDuplicates(authStub.admin)).resolves.toEqual([]); + expect(assetMock.updateAll).toHaveBeenCalledWith([assetStub.hasDupe.id], { duplicateId: null }); + }); }); describe('handleQueueSearchDuplicates', () => { diff --git a/server/src/services/duplicate.service.ts b/server/src/services/duplicate.service.ts index 2fac7fcd3e9ed..0d91df5790d4b 100644 --- a/server/src/services/duplicate.service.ts +++ b/server/src/services/duplicate.service.ts @@ -16,8 +16,24 @@ import { usePagination } from 'src/utils/pagination'; export class DuplicateService extends BaseService { async getDuplicates(auth: AuthDto): Promise { const res = await this.assetRepository.getDuplicates({ userIds: [auth.user.id] }); - - return mapDuplicateResponse(res.map((a) => mapAsset(a, { auth, withStack: true }))); + const uniqueAssetIds: string[] = []; + const duplicates = mapDuplicateResponse(res.map((a) => mapAsset(a, { auth, withStack: true }))).filter( + (duplicate) => { + if (duplicate.assets.length === 1) { + uniqueAssetIds.push(duplicate.assets[0].id); + return false; + } + return true; + }, + ); + if (uniqueAssetIds.length > 0) { + try { + await this.assetRepository.updateAll(uniqueAssetIds, { duplicateId: null }); + } catch (error: any) { + this.logger.error(`Failed to remove duplicateId from assets: ${error.message}`); + } + } + return duplicates; } @OnJob({ name: JobName.QUEUE_DUPLICATE_DETECTION, queue: QueueName.DUPLICATE_DETECTION }) From 3f99ef90ec4dc0fd3955cefa38dc4d81bf84c60f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 19:50:17 -0500 Subject: [PATCH 02/21] fix(deps): update machine-learning (#13919) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- machine-learning/poetry.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/machine-learning/poetry.lock b/machine-learning/poetry.lock index a2da285750336..32a2b73ffca7f 100644 --- a/machine-learning/poetry.lock +++ b/machine-learning/poetry.lock @@ -946,13 +946,13 @@ tqdm = ["tqdm"] [[package]] name = "ftfy" -version = "6.3.0" +version = "6.3.1" description = "Fixes mojibake and other problems with Unicode, after the fact" optional = false python-versions = ">=3.9" files = [ - {file = "ftfy-6.3.0-py3-none-any.whl", hash = "sha256:17aca296801f44142e3ff2c16f93fbf6a87609ebb3704a9a41dd5d4903396caf"}, - {file = "ftfy-6.3.0.tar.gz", hash = "sha256:1c7d6418e72b25a7760feb150acf574b86924dbb2e95b32c0b3abbd1ba3d7ad6"}, + {file = "ftfy-6.3.1-py3-none-any.whl", hash = "sha256:7c70eb532015cd2f9adb53f101fb6c7945988d023a085d127d1573dc49dd0083"}, + {file = "ftfy-6.3.1.tar.gz", hash = "sha256:9b3c3d90f84fb267fe64d375a07b7f8912d817cf86009ae134aa03e1819506ec"}, ] [package.dependencies] @@ -1609,13 +1609,13 @@ test = ["pytest (>=7.4)", "pytest-cov (>=4.1)"] [[package]] name = "locust" -version = "2.32.0" +version = "2.32.1" description = "Developer-friendly load testing framework" optional = false python-versions = ">=3.9" files = [ - {file = "locust-2.32.0-py3-none-any.whl", hash = "sha256:e004514332b8631ca91382d11d224baee4ced040c5f5c8b2233800ebcbc73c0e"}, - {file = "locust-2.32.0.tar.gz", hash = "sha256:d8f7f5d9d4e801b2e7b0ee3f31109333673da744ccedf85e7da0151f2d263dd9"}, + {file = "locust-2.32.1-py3-none-any.whl", hash = "sha256:3fb5548b4f2b6477fa5229ee55ac3dddbae56e86c3430bf2ba3fee358eb7e7bb"}, + {file = "locust-2.32.1.tar.gz", hash = "sha256:8c3b1094dbf20860fd2f6e26b68f0c6064dc28054f4462664389d102fce1448b"}, ] [package.dependencies] @@ -2749,13 +2749,13 @@ cli = ["click (>=5.0)"] [[package]] name = "python-multipart" -version = "0.0.12" +version = "0.0.17" description = "A streaming multipart parser for Python" optional = false python-versions = ">=3.8" files = [ - {file = "python_multipart-0.0.12-py3-none-any.whl", hash = "sha256:43dcf96cf65888a9cd3423544dd0d75ac10f7aa0c3c28a175bbcd00c9ce1aebf"}, - {file = "python_multipart-0.0.12.tar.gz", hash = "sha256:045e1f98d719c1ce085ed7f7e1ef9d8ccc8c02ba02b5566d5f7521410ced58cb"}, + {file = "python_multipart-0.0.17-py3-none-any.whl", hash = "sha256:15dc4f487e0a9476cc1201261188ee0940165cffc94429b6fc565c4d3045cb5d"}, + {file = "python_multipart-0.0.17.tar.gz", hash = "sha256:41330d831cae6e2f22902704ead2826ea038d0419530eadff3ea80175aec5538"}, ] [[package]] From 60afd7b400199657e85068ed97c8cdaf5ebbaa52 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 19:52:23 -0500 Subject: [PATCH 03/21] chore(deps): update node (#13918) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- cli/Dockerfile | 2 +- cli/package-lock.json | 10 +++++----- cli/package.json | 2 +- e2e/package-lock.json | 12 ++++++------ e2e/package.json | 2 +- open-api/typescript-sdk/package-lock.json | 8 ++++---- open-api/typescript-sdk/package.json | 2 +- server/Dockerfile | 2 +- server/package-lock.json | 14 +++++++------- server/package.json | 2 +- web/Dockerfile | 2 +- 11 files changed, 29 insertions(+), 29 deletions(-) diff --git a/cli/Dockerfile b/cli/Dockerfile index b112382cbb2fe..c4b99869c65f2 100644 --- a/cli/Dockerfile +++ b/cli/Dockerfile @@ -1,4 +1,4 @@ -FROM node:22.10.0-alpine3.20@sha256:fc95a044b87e95507c60c1f8c829e5d98ddf46401034932499db370c494ef0ff AS core +FROM node:22.11.0-alpine3.20@sha256:f265794478aa0b1a23d85a492c8311ed795bc527c3fe7e43453b3c872dcd71a3 AS core WORKDIR /usr/src/open-api/typescript-sdk COPY open-api/typescript-sdk/package*.json open-api/typescript-sdk/tsconfig*.json ./ diff --git a/cli/package-lock.json b/cli/package-lock.json index 7f691935dad04..4ae1adaf2d658 100644 --- a/cli/package-lock.json +++ b/cli/package-lock.json @@ -24,7 +24,7 @@ "@types/cli-progress": "^3.11.0", "@types/lodash-es": "^4.17.12", "@types/mock-fs": "^4.13.1", - "@types/node": "^22.8.1", + "@types/node": "^22.8.4", "@typescript-eslint/eslint-plugin": "^8.0.0", "@typescript-eslint/parser": "^8.0.0", "@vitest/coverage-v8": "^2.0.5", @@ -59,7 +59,7 @@ "@oazapfts/runtime": "^1.0.2" }, "devDependencies": { - "@types/node": "^22.8.1", + "@types/node": "^22.8.4", "typescript": "^5.3.3" } }, @@ -1378,9 +1378,9 @@ } }, "node_modules/@types/node": { - "version": "22.8.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.5.tgz", - "integrity": "sha512-5iYk6AMPtsMbkZqCO1UGF9W5L38twq11S2pYWkybGHH2ogPUvXWNlQqJBzuEZWKj/WRH+QTeiv6ySWqJtvIEgA==", + "version": "22.8.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.7.tgz", + "integrity": "sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==", "dev": true, "license": "MIT", "dependencies": { diff --git a/cli/package.json b/cli/package.json index 7e1eaa8d1ceb9..bf26a778975c7 100644 --- a/cli/package.json +++ b/cli/package.json @@ -20,7 +20,7 @@ "@types/cli-progress": "^3.11.0", "@types/lodash-es": "^4.17.12", "@types/mock-fs": "^4.13.1", - "@types/node": "^22.8.1", + "@types/node": "^22.8.4", "@typescript-eslint/eslint-plugin": "^8.0.0", "@typescript-eslint/parser": "^8.0.0", "@vitest/coverage-v8": "^2.0.5", diff --git a/e2e/package-lock.json b/e2e/package-lock.json index 7333cc6547912..049f950fea71c 100644 --- a/e2e/package-lock.json +++ b/e2e/package-lock.json @@ -15,7 +15,7 @@ "@immich/sdk": "file:../open-api/typescript-sdk", "@playwright/test": "^1.44.1", "@types/luxon": "^3.4.2", - "@types/node": "^22.8.1", + "@types/node": "^22.8.4", "@types/oidc-provider": "^8.5.1", "@types/pg": "^8.11.0", "@types/pngjs": "^6.0.4", @@ -64,7 +64,7 @@ "@types/cli-progress": "^3.11.0", "@types/lodash-es": "^4.17.12", "@types/mock-fs": "^4.13.1", - "@types/node": "^22.8.1", + "@types/node": "^22.8.4", "@typescript-eslint/eslint-plugin": "^8.0.0", "@typescript-eslint/parser": "^8.0.0", "@vitest/coverage-v8": "^2.0.5", @@ -99,7 +99,7 @@ "@oazapfts/runtime": "^1.0.2" }, "devDependencies": { - "@types/node": "^22.8.1", + "@types/node": "^22.8.4", "typescript": "^5.3.3" } }, @@ -1613,9 +1613,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "22.8.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.5.tgz", - "integrity": "sha512-5iYk6AMPtsMbkZqCO1UGF9W5L38twq11S2pYWkybGHH2ogPUvXWNlQqJBzuEZWKj/WRH+QTeiv6ySWqJtvIEgA==", + "version": "22.8.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.7.tgz", + "integrity": "sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==", "dev": true, "license": "MIT", "dependencies": { diff --git a/e2e/package.json b/e2e/package.json index 86488e8a70632..4d05cd0ae85c9 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -25,7 +25,7 @@ "@immich/sdk": "file:../open-api/typescript-sdk", "@playwright/test": "^1.44.1", "@types/luxon": "^3.4.2", - "@types/node": "^22.8.1", + "@types/node": "^22.8.4", "@types/oidc-provider": "^8.5.1", "@types/pg": "^8.11.0", "@types/pngjs": "^6.0.4", diff --git a/open-api/typescript-sdk/package-lock.json b/open-api/typescript-sdk/package-lock.json index 74bac2b924b99..82b9eb651311a 100644 --- a/open-api/typescript-sdk/package-lock.json +++ b/open-api/typescript-sdk/package-lock.json @@ -12,7 +12,7 @@ "@oazapfts/runtime": "^1.0.2" }, "devDependencies": { - "@types/node": "^22.8.1", + "@types/node": "^22.8.4", "typescript": "^5.3.3" } }, @@ -22,9 +22,9 @@ "integrity": "sha512-8tKiYffhwTGHSHYGnZ3oneLGCjX0po/XAXQ5Ng9fqKkvIdl/xz8+Vh8i+6xjzZqvZ2pLVpUcuSfnvNI/x67L0g==" }, "node_modules/@types/node": { - "version": "22.8.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.5.tgz", - "integrity": "sha512-5iYk6AMPtsMbkZqCO1UGF9W5L38twq11S2pYWkybGHH2ogPUvXWNlQqJBzuEZWKj/WRH+QTeiv6ySWqJtvIEgA==", + "version": "22.8.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.7.tgz", + "integrity": "sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==", "dev": true, "license": "MIT", "dependencies": { diff --git a/open-api/typescript-sdk/package.json b/open-api/typescript-sdk/package.json index 726c63da8eecd..f470844aecdbe 100644 --- a/open-api/typescript-sdk/package.json +++ b/open-api/typescript-sdk/package.json @@ -19,7 +19,7 @@ "@oazapfts/runtime": "^1.0.2" }, "devDependencies": { - "@types/node": "^22.8.1", + "@types/node": "^22.8.4", "typescript": "^5.3.3" }, "repository": { diff --git a/server/Dockerfile b/server/Dockerfile index f14178dd9fff0..f0223cdc5d14a 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -25,7 +25,7 @@ COPY --from=dev /usr/src/app/node_modules/@img ./node_modules/@img COPY --from=dev /usr/src/app/node_modules/exiftool-vendored.pl ./node_modules/exiftool-vendored.pl # web build -FROM node:22.10.0-alpine3.20@sha256:fc95a044b87e95507c60c1f8c829e5d98ddf46401034932499db370c494ef0ff AS web +FROM node:22.11.0-alpine3.20@sha256:f265794478aa0b1a23d85a492c8311ed795bc527c3fe7e43453b3c872dcd71a3 AS web WORKDIR /usr/src/open-api/typescript-sdk COPY open-api/typescript-sdk/package*.json open-api/typescript-sdk/tsconfig*.json ./ diff --git a/server/package-lock.json b/server/package-lock.json index b3c1686b1ed14..0297c92532d3c 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -83,7 +83,7 @@ "@types/lodash": "^4.14.197", "@types/mock-fs": "^4.13.1", "@types/multer": "^1.4.7", - "@types/node": "^22.8.1", + "@types/node": "^22.8.4", "@types/nodemailer": "^6.4.14", "@types/picomatch": "^3.0.0", "@types/pngjs": "^6.0.5", @@ -5110,9 +5110,9 @@ } }, "node_modules/@types/node": { - "version": "22.8.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.5.tgz", - "integrity": "sha512-5iYk6AMPtsMbkZqCO1UGF9W5L38twq11S2pYWkybGHH2ogPUvXWNlQqJBzuEZWKj/WRH+QTeiv6ySWqJtvIEgA==", + "version": "22.8.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.7.tgz", + "integrity": "sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==", "dependencies": { "undici-types": "~6.19.8" } @@ -18258,9 +18258,9 @@ } }, "@types/node": { - "version": "22.8.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.5.tgz", - "integrity": "sha512-5iYk6AMPtsMbkZqCO1UGF9W5L38twq11S2pYWkybGHH2ogPUvXWNlQqJBzuEZWKj/WRH+QTeiv6ySWqJtvIEgA==", + "version": "22.8.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.7.tgz", + "integrity": "sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==", "requires": { "undici-types": "~6.19.8" } diff --git a/server/package.json b/server/package.json index 8d3515b8daae7..bb48fac80c662 100644 --- a/server/package.json +++ b/server/package.json @@ -108,7 +108,7 @@ "@types/lodash": "^4.14.197", "@types/mock-fs": "^4.13.1", "@types/multer": "^1.4.7", - "@types/node": "^22.8.1", + "@types/node": "^22.8.4", "@types/nodemailer": "^6.4.14", "@types/picomatch": "^3.0.0", "@types/pngjs": "^6.0.5", diff --git a/web/Dockerfile b/web/Dockerfile index 674fafcda9238..7e4d9769be2f8 100644 --- a/web/Dockerfile +++ b/web/Dockerfile @@ -1,4 +1,4 @@ -FROM node:22.10.0-alpine3.20@sha256:fc95a044b87e95507c60c1f8c829e5d98ddf46401034932499db370c494ef0ff +FROM node:22.11.0-alpine3.20@sha256:f265794478aa0b1a23d85a492c8311ed795bc527c3fe7e43453b3c872dcd71a3 RUN apk add --no-cache tini USER node From 1d55b5bfc0cd029d83bd5ecdc6cfb58deed9256c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Nov 2024 06:48:01 -0500 Subject: [PATCH 04/21] chore(deps): update dependency @types/node to ^22.8.5 (#13923) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- cli/package-lock.json | 10 +++++----- cli/package.json | 2 +- e2e/package-lock.json | 12 ++++++------ e2e/package.json | 2 +- open-api/typescript-sdk/package-lock.json | 8 ++++---- open-api/typescript-sdk/package.json | 2 +- server/package-lock.json | 14 +++++++------- server/package.json | 2 +- 8 files changed, 26 insertions(+), 26 deletions(-) diff --git a/cli/package-lock.json b/cli/package-lock.json index 4ae1adaf2d658..fe18b93b188f6 100644 --- a/cli/package-lock.json +++ b/cli/package-lock.json @@ -24,7 +24,7 @@ "@types/cli-progress": "^3.11.0", "@types/lodash-es": "^4.17.12", "@types/mock-fs": "^4.13.1", - "@types/node": "^22.8.4", + "@types/node": "^22.8.5", "@typescript-eslint/eslint-plugin": "^8.0.0", "@typescript-eslint/parser": "^8.0.0", "@vitest/coverage-v8": "^2.0.5", @@ -59,7 +59,7 @@ "@oazapfts/runtime": "^1.0.2" }, "devDependencies": { - "@types/node": "^22.8.4", + "@types/node": "^22.8.5", "typescript": "^5.3.3" } }, @@ -1378,9 +1378,9 @@ } }, "node_modules/@types/node": { - "version": "22.8.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.7.tgz", - "integrity": "sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==", + "version": "22.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", + "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", "dev": true, "license": "MIT", "dependencies": { diff --git a/cli/package.json b/cli/package.json index bf26a778975c7..0f9356b4bfe28 100644 --- a/cli/package.json +++ b/cli/package.json @@ -20,7 +20,7 @@ "@types/cli-progress": "^3.11.0", "@types/lodash-es": "^4.17.12", "@types/mock-fs": "^4.13.1", - "@types/node": "^22.8.4", + "@types/node": "^22.8.5", "@typescript-eslint/eslint-plugin": "^8.0.0", "@typescript-eslint/parser": "^8.0.0", "@vitest/coverage-v8": "^2.0.5", diff --git a/e2e/package-lock.json b/e2e/package-lock.json index 049f950fea71c..bb46924e3ece3 100644 --- a/e2e/package-lock.json +++ b/e2e/package-lock.json @@ -15,7 +15,7 @@ "@immich/sdk": "file:../open-api/typescript-sdk", "@playwright/test": "^1.44.1", "@types/luxon": "^3.4.2", - "@types/node": "^22.8.4", + "@types/node": "^22.8.5", "@types/oidc-provider": "^8.5.1", "@types/pg": "^8.11.0", "@types/pngjs": "^6.0.4", @@ -64,7 +64,7 @@ "@types/cli-progress": "^3.11.0", "@types/lodash-es": "^4.17.12", "@types/mock-fs": "^4.13.1", - "@types/node": "^22.8.4", + "@types/node": "^22.8.5", "@typescript-eslint/eslint-plugin": "^8.0.0", "@typescript-eslint/parser": "^8.0.0", "@vitest/coverage-v8": "^2.0.5", @@ -99,7 +99,7 @@ "@oazapfts/runtime": "^1.0.2" }, "devDependencies": { - "@types/node": "^22.8.4", + "@types/node": "^22.8.5", "typescript": "^5.3.3" } }, @@ -1613,9 +1613,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "22.8.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.7.tgz", - "integrity": "sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==", + "version": "22.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", + "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", "dev": true, "license": "MIT", "dependencies": { diff --git a/e2e/package.json b/e2e/package.json index 4d05cd0ae85c9..42043fd6b274b 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -25,7 +25,7 @@ "@immich/sdk": "file:../open-api/typescript-sdk", "@playwright/test": "^1.44.1", "@types/luxon": "^3.4.2", - "@types/node": "^22.8.4", + "@types/node": "^22.8.5", "@types/oidc-provider": "^8.5.1", "@types/pg": "^8.11.0", "@types/pngjs": "^6.0.4", diff --git a/open-api/typescript-sdk/package-lock.json b/open-api/typescript-sdk/package-lock.json index 82b9eb651311a..53a2e76cb4f68 100644 --- a/open-api/typescript-sdk/package-lock.json +++ b/open-api/typescript-sdk/package-lock.json @@ -12,7 +12,7 @@ "@oazapfts/runtime": "^1.0.2" }, "devDependencies": { - "@types/node": "^22.8.4", + "@types/node": "^22.8.5", "typescript": "^5.3.3" } }, @@ -22,9 +22,9 @@ "integrity": "sha512-8tKiYffhwTGHSHYGnZ3oneLGCjX0po/XAXQ5Ng9fqKkvIdl/xz8+Vh8i+6xjzZqvZ2pLVpUcuSfnvNI/x67L0g==" }, "node_modules/@types/node": { - "version": "22.8.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.7.tgz", - "integrity": "sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==", + "version": "22.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", + "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", "dev": true, "license": "MIT", "dependencies": { diff --git a/open-api/typescript-sdk/package.json b/open-api/typescript-sdk/package.json index f470844aecdbe..9df9068897059 100644 --- a/open-api/typescript-sdk/package.json +++ b/open-api/typescript-sdk/package.json @@ -19,7 +19,7 @@ "@oazapfts/runtime": "^1.0.2" }, "devDependencies": { - "@types/node": "^22.8.4", + "@types/node": "^22.8.5", "typescript": "^5.3.3" }, "repository": { diff --git a/server/package-lock.json b/server/package-lock.json index 0297c92532d3c..85b08523d6d54 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -83,7 +83,7 @@ "@types/lodash": "^4.14.197", "@types/mock-fs": "^4.13.1", "@types/multer": "^1.4.7", - "@types/node": "^22.8.4", + "@types/node": "^22.8.5", "@types/nodemailer": "^6.4.14", "@types/picomatch": "^3.0.0", "@types/pngjs": "^6.0.5", @@ -5110,9 +5110,9 @@ } }, "node_modules/@types/node": { - "version": "22.8.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.7.tgz", - "integrity": "sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==", + "version": "22.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", + "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", "dependencies": { "undici-types": "~6.19.8" } @@ -18258,9 +18258,9 @@ } }, "@types/node": { - "version": "22.8.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.7.tgz", - "integrity": "sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==", + "version": "22.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", + "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", "requires": { "undici-types": "~6.19.8" } diff --git a/server/package.json b/server/package.json index bb48fac80c662..a19dd626ad04c 100644 --- a/server/package.json +++ b/server/package.json @@ -108,7 +108,7 @@ "@types/lodash": "^4.14.197", "@types/mock-fs": "^4.13.1", "@types/multer": "^1.4.7", - "@types/node": "^22.8.4", + "@types/node": "^22.8.5", "@types/nodemailer": "^6.4.14", "@types/picomatch": "^3.0.0", "@types/pngjs": "^6.0.5", From 5edbb93a4db07761d9c4e1cd4d0c80d47ec8fdf5 Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Tue, 5 Nov 2024 08:07:51 -0500 Subject: [PATCH 05/21] refactor(server): get worker (#13927) --- server/src/interfaces/config.interface.ts | 1 + server/src/repositories/config.repository.ts | 10 ++++++++-- server/src/services/base.service.ts | 10 ++++++---- server/src/services/job.service.spec.ts | 8 +++++--- server/test/repositories/config.repository.mock.ts | 1 + server/test/utils.ts | 5 +---- 6 files changed, 22 insertions(+), 13 deletions(-) diff --git a/server/src/interfaces/config.interface.ts b/server/src/interfaces/config.interface.ts index ec5397cc2cdd4..300b55f27b6fd 100644 --- a/server/src/interfaces/config.interface.ts +++ b/server/src/interfaces/config.interface.ts @@ -93,4 +93,5 @@ export interface EnvData { export interface IConfigRepository { getEnv(): EnvData; + getWorker(): ImmichWorker | undefined; } diff --git a/server/src/repositories/config.repository.ts b/server/src/repositories/config.repository.ts index 76b0bb0c83b18..a8a1c9972b3d5 100644 --- a/server/src/repositories/config.repository.ts +++ b/server/src/repositories/config.repository.ts @@ -1,10 +1,10 @@ -import { Injectable } from '@nestjs/common'; +import { Inject, Injectable, Optional } from '@nestjs/common'; import { plainToInstance } from 'class-transformer'; import { validateSync } from 'class-validator'; import { Request, Response } from 'express'; import { CLS_ID } from 'nestjs-cls'; import { join, resolve } from 'node:path'; -import { citiesFile, excludePaths } from 'src/constants'; +import { citiesFile, excludePaths, IWorker } from 'src/constants'; import { Telemetry } from 'src/decorators'; import { EnvDto } from 'src/dtos/env.dto'; import { ImmichEnvironment, ImmichHeader, ImmichTelemetry, ImmichWorker } from 'src/enum'; @@ -228,6 +228,8 @@ let cached: EnvData | undefined; @Injectable() @Telemetry({ enabled: false }) export class ConfigRepository implements IConfigRepository { + constructor(@Inject(IWorker) @Optional() private worker?: ImmichWorker) {} + getEnv(): EnvData { if (!cached) { cached = getEnv(); @@ -235,6 +237,10 @@ export class ConfigRepository implements IConfigRepository { return cached; } + + getWorker() { + return this.worker; + } } export const clearEnvCache = () => (cached = undefined); diff --git a/server/src/services/base.service.ts b/server/src/services/base.service.ts index 124e45b62cf58..dc7dab102c69d 100644 --- a/server/src/services/base.service.ts +++ b/server/src/services/base.service.ts @@ -1,10 +1,9 @@ -import { BadRequestException, Inject, Optional } from '@nestjs/common'; +import { BadRequestException, Inject } from '@nestjs/common'; import sanitize from 'sanitize-filename'; import { SystemConfig } from 'src/config'; -import { IWorker, SALT_ROUNDS } from 'src/constants'; +import { SALT_ROUNDS } from 'src/constants'; import { StorageCore } from 'src/cores/storage.core'; import { UserEntity } from 'src/entities/user.entity'; -import { ImmichWorker } from 'src/enum'; import { IAccessRepository } from 'src/interfaces/access.interface'; import { IActivityRepository } from 'src/interfaces/activity.interface'; import { IAlbumUserRepository } from 'src/interfaces/album-user.interface'; @@ -50,7 +49,6 @@ export class BaseService { protected storageCore: StorageCore; constructor( - @Inject(IWorker) @Optional() protected worker: ImmichWorker | undefined, @Inject(ILoggerRepository) protected logger: ILoggerRepository, @Inject(IAccessRepository) protected accessRepository: IAccessRepository, @Inject(IActivityRepository) protected activityRepository: IActivityRepository, @@ -103,6 +101,10 @@ export class BaseService { ); } + get worker() { + return this.configRepository.getWorker(); + } + private get configRepos() { return { configRepo: this.configRepository, diff --git a/server/src/services/job.service.spec.ts b/server/src/services/job.service.spec.ts index 0e7607f27a9b4..b4599917857f1 100644 --- a/server/src/services/job.service.spec.ts +++ b/server/src/services/job.service.spec.ts @@ -2,6 +2,7 @@ import { BadRequestException } from '@nestjs/common'; import { defaults } from 'src/config'; import { ImmichWorker } from 'src/enum'; import { IAssetRepository } from 'src/interfaces/asset.interface'; +import { IConfigRepository } from 'src/interfaces/config.interface'; import { IJobRepository, JobCommand, JobItem, JobName, JobStatus, QueueName } from 'src/interfaces/job.interface'; import { ILoggerRepository } from 'src/interfaces/logger.interface'; import { ITelemetryRepository } from 'src/interfaces/telemetry.interface'; @@ -13,14 +14,15 @@ import { Mocked } from 'vitest'; describe(JobService.name, () => { let sut: JobService; let assetMock: Mocked; + let configMock: Mocked; let jobMock: Mocked; let loggerMock: Mocked; let telemetryMock: Mocked; beforeEach(() => { - ({ sut, assetMock, jobMock, loggerMock, telemetryMock } = newTestService(JobService, { - worker: ImmichWorker.MICROSERVICES, - })); + ({ sut, assetMock, configMock, jobMock, loggerMock, telemetryMock } = newTestService(JobService, {})); + + configMock.getWorker.mockReturnValue(ImmichWorker.MICROSERVICES); }); it('should work', () => { diff --git a/server/test/repositories/config.repository.mock.ts b/server/test/repositories/config.repository.mock.ts index 55a890fa4a663..df26f7f72565f 100644 --- a/server/test/repositories/config.repository.mock.ts +++ b/server/test/repositories/config.repository.mock.ts @@ -96,5 +96,6 @@ export const mockEnvData = (config: Partial) => ({ ...envData, ...confi export const newConfigRepositoryMock = (): Mocked => { return { getEnv: vitest.fn().mockReturnValue(mockEnvData({})), + getWorker: vitest.fn().mockReturnValue(ImmichWorker.API), }; }; diff --git a/server/test/utils.ts b/server/test/utils.ts index a5a61190338b7..d37af5118d323 100644 --- a/server/test/utils.ts +++ b/server/test/utils.ts @@ -58,9 +58,7 @@ export const newTestService = ( Service: Constructor, overrides?: Overrides, ) => { - const { metadataRepository, worker: workerOverride } = overrides || {}; - - const worker = workerOverride || ImmichWorker.API; + const { metadataRepository } = overrides || {}; const accessMock = newAccessRepositoryMock(); const loggerMock = newLoggerRepositoryMock(); @@ -102,7 +100,6 @@ export const newTestService = ( const viewMock = newViewRepositoryMock(); const sut = new Service( - worker, loggerMock, accessMock, activityMock, From c383e115af197038389c97b2e505699068cea940 Mon Sep 17 00:00:00 2001 From: Zack Pollard Date: Tue, 5 Nov 2024 16:20:56 +0000 Subject: [PATCH 06/21] chore: better observability for geodata import (#13931) --- server/src/repositories/map.repository.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/server/src/repositories/map.repository.ts b/server/src/repositories/map.repository.ts index 7ad94016e8667..f87ba6d0ac83c 100644 --- a/server/src/repositories/map.repository.ts +++ b/server/src/repositories/map.repository.ts @@ -249,6 +249,7 @@ export class MapRepository implements IMapRepository { const input = createReadStream(filePath); let bufferGeodata: QueryDeepPartialEntity[] = []; const lineReader = readLine.createInterface({ input }); + let count = 0; for await (const line of lineReader) { const lineSplit = line.split('\t'); @@ -257,8 +258,12 @@ export class MapRepository implements IMapRepository { } const geoData = lineToEntityMapper(lineSplit); bufferGeodata.push(geoData); - if (bufferGeodata.length > 1000) { + if (bufferGeodata.length >= 1000) { await queryRunner.manager.upsert(GeodataPlacesEntity, bufferGeodata, ['id']); + count += bufferGeodata.length; + if (count % 10_000 === 0) { + this.logger.log(`${count} geodata records imported`); + } bufferGeodata = []; } } From d456d355105cf54e66da97885770a15a39b27331 Mon Sep 17 00:00:00 2001 From: Zack Pollard Date: Tue, 5 Nov 2024 16:30:56 +0000 Subject: [PATCH 07/21] refactor: config init event for first config load (#13930) --- server/src/app.module.ts | 4 +- server/src/interfaces/event.interface.ts | 16 +++-- server/src/services/backup.service.spec.ts | 24 +++---- server/src/services/backup.service.ts | 17 ++--- server/src/services/database.service.ts | 3 +- server/src/services/job.service.spec.ts | 2 +- server/src/services/job.service.ts | 3 +- server/src/services/library.service.spec.ts | 72 ++++++------------- server/src/services/library.service.ts | 18 ++--- server/src/services/metadata.service.spec.ts | 14 ++-- server/src/services/metadata.service.ts | 21 ++---- .../src/services/notification.service.spec.ts | 2 +- .../src/services/smart-info.service.spec.ts | 41 +++++++---- server/src/services/smart-info.service.ts | 15 ++-- .../services/storage-template.service.spec.ts | 6 +- .../src/services/storage-template.service.ts | 3 +- server/src/services/system-config.service.ts | 16 +++-- server/test/fixtures/system-config.stub.ts | 29 ++++++++ 18 files changed, 160 insertions(+), 146 deletions(-) diff --git a/server/src/app.module.ts b/server/src/app.module.ts index 7b9098c01003b..da8fa55606099 100644 --- a/server/src/app.module.ts +++ b/server/src/app.module.ts @@ -78,11 +78,11 @@ class BaseModule implements OnModuleInit, OnModuleDestroy { } this.eventRepository.setup({ services }); - await this.eventRepository.emit('app.bootstrap', this.worker); + await this.eventRepository.emit('app.bootstrap'); } async onModuleDestroy() { - await this.eventRepository.emit('app.shutdown', this.worker); + await this.eventRepository.emit('app.shutdown'); await teardownTelemetry(); } } diff --git a/server/src/interfaces/event.interface.ts b/server/src/interfaces/event.interface.ts index 0ed3d63f2afb3..9a9e23cca0018 100644 --- a/server/src/interfaces/event.interface.ts +++ b/server/src/interfaces/event.interface.ts @@ -2,22 +2,21 @@ import { ClassConstructor } from 'class-transformer'; import { SystemConfig } from 'src/config'; import { AssetResponseDto } from 'src/dtos/asset-response.dto'; import { ReleaseNotification, ServerVersionResponseDto } from 'src/dtos/server.dto'; -import { ImmichWorker } from 'src/enum'; import { JobItem, QueueName } from 'src/interfaces/job.interface'; export const IEventRepository = 'IEventRepository'; type EventMap = { // app events - 'app.bootstrap': [ImmichWorker]; - 'app.shutdown': [ImmichWorker]; + 'app.bootstrap': []; + 'app.shutdown': []; + 'config.init': [{ newConfig: SystemConfig }]; // config events 'config.update': [ { newConfig: SystemConfig; - /** When the server starts, `oldConfig` is `undefined` */ - oldConfig?: SystemConfig; + oldConfig: SystemConfig; }, ]; 'config.validate': [{ newConfig: SystemConfig; oldConfig: SystemConfig }]; @@ -89,6 +88,13 @@ export type EventItem = { server: boolean; }; +export enum BootstrapEventPriority { + // Database service should be initialized before anything else, most other services need database access + DatabaseService = -200, + // Initialise config after other bootstrap services, stop other services from using config on bootstrap + SystemConfig = 100, +} + export interface IEventRepository { setup(options: { services: ClassConstructor[] }): void; emit(event: T, ...args: ArgsOf): Promise; diff --git a/server/src/services/backup.service.spec.ts b/server/src/services/backup.service.spec.ts index 8f006d0d6ba0b..df2f80b37c99f 100644 --- a/server/src/services/backup.service.spec.ts +++ b/server/src/services/backup.service.spec.ts @@ -2,6 +2,7 @@ import { PassThrough } from 'node:stream'; import { defaults, SystemConfig } from 'src/config'; import { StorageCore } from 'src/cores/storage.core'; import { ImmichWorker, StorageFolder } from 'src/enum'; +import { IConfigRepository } from 'src/interfaces/config.interface'; import { IDatabaseRepository } from 'src/interfaces/database.interface'; import { IJobRepository, JobStatus } from 'src/interfaces/job.interface'; import { IProcessRepository } from 'src/interfaces/process.interface'; @@ -16,13 +17,14 @@ describe(BackupService.name, () => { let sut: BackupService; let databaseMock: Mocked; + let configMock: Mocked; let jobMock: Mocked; let processMock: Mocked; let storageMock: Mocked; let systemMock: Mocked; beforeEach(() => { - ({ sut, databaseMock, jobMock, processMock, storageMock, systemMock } = newTestService(BackupService)); + ({ sut, configMock, databaseMock, jobMock, processMock, storageMock, systemMock } = newTestService(BackupService)); }); it('should work', () => { @@ -32,25 +34,23 @@ describe(BackupService.name, () => { describe('onBootstrapEvent', () => { it('should init cron job and handle config changes', async () => { databaseMock.tryLock.mockResolvedValue(true); - systemMock.get.mockResolvedValue(systemConfigStub.backupEnabled); - await sut.onBootstrap(ImmichWorker.API); + await sut.onConfigInit({ newConfig: systemConfigStub.backupEnabled as SystemConfig }); expect(jobMock.addCronJob).toHaveBeenCalled(); - expect(systemMock.get).toHaveBeenCalled(); }); it('should not initialize backup database cron job when lock is taken', async () => { - systemMock.get.mockResolvedValue(systemConfigStub.backupEnabled); databaseMock.tryLock.mockResolvedValue(false); - await sut.onBootstrap(ImmichWorker.API); + await sut.onConfigInit({ newConfig: systemConfigStub.backupEnabled as SystemConfig }); expect(jobMock.addCronJob).not.toHaveBeenCalled(); }); it('should not initialise backup database job when running on microservices', async () => { - await sut.onBootstrap(ImmichWorker.MICROSERVICES); + configMock.getWorker.mockReturnValue(ImmichWorker.MICROSERVICES); + await sut.onConfigInit({ newConfig: systemConfigStub.backupEnabled as SystemConfig }); expect(jobMock.addCronJob).not.toHaveBeenCalled(); }); @@ -58,9 +58,8 @@ describe(BackupService.name, () => { describe('onConfigUpdateEvent', () => { beforeEach(async () => { - systemMock.get.mockResolvedValue(defaults); databaseMock.tryLock.mockResolvedValue(true); - await sut.onBootstrap(ImmichWorker.API); + await sut.onConfigInit({ newConfig: defaults }); }); it('should update cron job if backup is enabled', () => { @@ -80,14 +79,9 @@ describe(BackupService.name, () => { expect(jobMock.updateCronJob).toHaveBeenCalled(); }); - it('should do nothing if oldConfig is not provided', () => { - sut.onConfigUpdate({ newConfig: systemConfigStub.backupEnabled as SystemConfig }); - expect(jobMock.updateCronJob).not.toHaveBeenCalled(); - }); - it('should do nothing if instance does not have the backup database lock', async () => { databaseMock.tryLock.mockResolvedValue(false); - await sut.onBootstrap(ImmichWorker.API); + await sut.onConfigInit({ newConfig: defaults }); sut.onConfigUpdate({ newConfig: systemConfigStub.backupEnabled as SystemConfig, oldConfig: defaults }); expect(jobMock.updateCronJob).not.toHaveBeenCalled(); }); diff --git a/server/src/services/backup.service.ts b/server/src/services/backup.service.ts index 9856a8cfa26bc..fc470f188c63d 100644 --- a/server/src/services/backup.service.ts +++ b/server/src/services/backup.service.ts @@ -14,14 +14,15 @@ import { validateCronExpression } from 'src/validation'; export class BackupService extends BaseService { private backupLock = false; - @OnEvent({ name: 'app.bootstrap' }) - async onBootstrap(workerType: ImmichWorker) { - if (workerType !== ImmichWorker.API) { + @OnEvent({ name: 'config.init' }) + async onConfigInit({ + newConfig: { + backup: { database }, + }, + }: ArgOf<'config.init'>) { + if (this.worker !== ImmichWorker.API) { return; } - const { - backup: { database }, - } = await this.getConfig({ withCache: true }); this.backupLock = await this.databaseRepository.tryLock(DatabaseLock.BackupDatabase); @@ -36,8 +37,8 @@ export class BackupService extends BaseService { } @OnEvent({ name: 'config.update', server: true }) - onConfigUpdate({ newConfig: { backup }, oldConfig }: ArgOf<'config.update'>) { - if (!oldConfig || !this.backupLock) { + onConfigUpdate({ newConfig: { backup } }: ArgOf<'config.update'>) { + if (!this.backupLock) { return; } diff --git a/server/src/services/database.service.ts b/server/src/services/database.service.ts index 363266c6aef6a..b1a270abd8dc7 100644 --- a/server/src/services/database.service.ts +++ b/server/src/services/database.service.ts @@ -9,6 +9,7 @@ import { VectorExtension, VectorIndex, } from 'src/interfaces/database.interface'; +import { BootstrapEventPriority } from 'src/interfaces/event.interface'; import { BaseService } from 'src/services/base.service'; type CreateFailedArgs = { name: string; extension: string; otherName: string }; @@ -64,7 +65,7 @@ const RETRY_DURATION = Duration.fromObject({ seconds: 5 }); export class DatabaseService extends BaseService { private reconnection?: NodeJS.Timeout; - @OnEvent({ name: 'app.bootstrap', priority: -200 }) + @OnEvent({ name: 'app.bootstrap', priority: BootstrapEventPriority.DatabaseService }) async onBootstrap() { const version = await this.databaseRepository.getPostgresVersion(); const current = semver.coerce(version); diff --git a/server/src/services/job.service.spec.ts b/server/src/services/job.service.spec.ts index b4599917857f1..260497fcea3f6 100644 --- a/server/src/services/job.service.spec.ts +++ b/server/src/services/job.service.spec.ts @@ -31,7 +31,7 @@ describe(JobService.name, () => { describe('onConfigUpdate', () => { it('should update concurrency', () => { - sut.onConfigUpdate({ oldConfig: defaults, newConfig: defaults }); + sut.onConfigInitOrUpdate({ newConfig: defaults }); expect(jobMock.setConcurrency).toHaveBeenCalledTimes(15); expect(jobMock.setConcurrency).toHaveBeenNthCalledWith(5, QueueName.FACIAL_RECOGNITION, 1); diff --git a/server/src/services/job.service.ts b/server/src/services/job.service.ts index 946d9b1c9124c..c368f95bfd694 100644 --- a/server/src/services/job.service.ts +++ b/server/src/services/job.service.ts @@ -38,8 +38,9 @@ const asJobItem = (dto: JobCreateDto): JobItem => { @Injectable() export class JobService extends BaseService { + @OnEvent({ name: 'config.init' }) @OnEvent({ name: 'config.update', server: true }) - onConfigUpdate({ newConfig: config }: ArgOf<'config.update'>) { + onConfigInitOrUpdate({ newConfig: config }: ArgOf<'config.init'>) { if (this.worker !== ImmichWorker.MICROSERVICES) { return; } diff --git a/server/src/services/library.service.spec.ts b/server/src/services/library.service.spec.ts index a3b270218ef48..879965e82bf38 100644 --- a/server/src/services/library.service.spec.ts +++ b/server/src/services/library.service.spec.ts @@ -5,6 +5,7 @@ import { mapLibrary } from 'src/dtos/library.dto'; import { UserEntity } from 'src/entities/user.entity'; import { AssetType, ImmichWorker } from 'src/enum'; import { IAssetRepository } from 'src/interfaces/asset.interface'; +import { IConfigRepository } from 'src/interfaces/config.interface'; import { IDatabaseRepository } from 'src/interfaces/database.interface'; import { IJobRepository, @@ -16,7 +17,6 @@ import { } from 'src/interfaces/job.interface'; import { ILibraryRepository } from 'src/interfaces/library.interface'; import { IStorageRepository } from 'src/interfaces/storage.interface'; -import { ISystemMetadataRepository } from 'src/interfaces/system-metadata.interface'; import { LibraryService } from 'src/services/library.service'; import { assetStub } from 'test/fixtures/asset.stub'; import { authStub } from 'test/fixtures/auth.stub'; @@ -35,30 +35,28 @@ describe(LibraryService.name, () => { let sut: LibraryService; let assetMock: Mocked; + let configMock: Mocked; let databaseMock: Mocked; let jobMock: Mocked; let libraryMock: Mocked; let storageMock: Mocked; - let systemMock: Mocked; beforeEach(() => { - ({ sut, assetMock, databaseMock, jobMock, libraryMock, storageMock, systemMock } = newTestService(LibraryService)); + ({ sut, assetMock, configMock, databaseMock, jobMock, libraryMock, storageMock } = newTestService(LibraryService)); databaseMock.tryLock.mockResolvedValue(true); + configMock.getWorker.mockReturnValue(ImmichWorker.MICROSERVICES); }); it('should work', () => { expect(sut).toBeDefined(); }); - describe('onBootstrapEvent', () => { + describe('onConfigInit', () => { it('should init cron job and handle config changes', async () => { - systemMock.get.mockResolvedValue(systemConfigStub.libraryScan); - - await sut.onBootstrap(ImmichWorker.MICROSERVICES); + await sut.onConfigInit({ newConfig: defaults }); expect(jobMock.addCronJob).toHaveBeenCalled(); - expect(systemMock.get).toHaveBeenCalled(); await sut.onConfigUpdate({ oldConfig: defaults, @@ -82,7 +80,6 @@ describe(LibraryService.name, () => { libraryStub.externalLibraryWithImportPaths2, ]); - systemMock.get.mockResolvedValue(systemConfigStub.libraryWatchEnabled); libraryMock.get.mockImplementation((id) => Promise.resolve( [libraryStub.externalLibraryWithImportPaths1, libraryStub.externalLibraryWithImportPaths2].find( @@ -91,7 +88,7 @@ describe(LibraryService.name, () => { ), ); - await sut.onBootstrap(ImmichWorker.MICROSERVICES); + await sut.onConfigInit({ newConfig: systemConfigStub.libraryWatchEnabled as SystemConfig }); expect(storageMock.watch.mock.calls).toEqual( expect.arrayContaining([ @@ -102,33 +99,30 @@ describe(LibraryService.name, () => { }); it('should not initialize watcher when watching is disabled', async () => { - systemMock.get.mockResolvedValue(systemConfigStub.libraryWatchDisabled); - - await sut.onBootstrap(ImmichWorker.MICROSERVICES); + await sut.onConfigInit({ newConfig: systemConfigStub.libraryWatchDisabled as SystemConfig }); expect(storageMock.watch).not.toHaveBeenCalled(); }); it('should not initialize watcher when lock is taken', async () => { - systemMock.get.mockResolvedValue(systemConfigStub.libraryWatchEnabled); databaseMock.tryLock.mockResolvedValue(false); - await sut.onBootstrap(ImmichWorker.MICROSERVICES); + await sut.onConfigInit({ newConfig: systemConfigStub.libraryWatchEnabled as SystemConfig }); expect(storageMock.watch).not.toHaveBeenCalled(); }); it('should not initialize library scan cron job when lock is taken', async () => { - systemMock.get.mockResolvedValue(systemConfigStub.libraryWatchEnabled); databaseMock.tryLock.mockResolvedValue(false); - await sut.onBootstrap(ImmichWorker.MICROSERVICES); + await sut.onConfigInit({ newConfig: systemConfigStub.libraryWatchEnabled as SystemConfig }); expect(jobMock.addCronJob).not.toHaveBeenCalled(); }); it('should not initialize watcher or library scan job when running on api', async () => { - await sut.onBootstrap(ImmichWorker.API); + configMock.getWorker.mockReturnValue(ImmichWorker.API); + await sut.onConfigInit({ newConfig: systemConfigStub.libraryScan as SystemConfig }); expect(jobMock.addCronJob).not.toHaveBeenCalled(); }); @@ -136,19 +130,13 @@ describe(LibraryService.name, () => { describe('onConfigUpdateEvent', () => { beforeEach(async () => { - systemMock.get.mockResolvedValue(defaults); databaseMock.tryLock.mockResolvedValue(true); - await sut.onBootstrap(ImmichWorker.MICROSERVICES); - }); - - it('should do nothing if oldConfig is not provided', async () => { - await sut.onConfigUpdate({ newConfig: systemConfigStub.libraryScan as SystemConfig }); - expect(jobMock.updateCronJob).not.toHaveBeenCalled(); + await sut.onConfigInit({ newConfig: defaults }); }); it('should do nothing if instance does not have the watch lock', async () => { databaseMock.tryLock.mockResolvedValue(false); - await sut.onBootstrap(ImmichWorker.MICROSERVICES); + await sut.onConfigInit({ newConfig: defaults }); await sut.onConfigUpdate({ newConfig: systemConfigStub.libraryScan as SystemConfig, oldConfig: defaults }); expect(jobMock.updateCronJob).not.toHaveBeenCalled(); }); @@ -156,9 +144,7 @@ describe(LibraryService.name, () => { it('should update cron job and enable watching', async () => { libraryMock.getAll.mockResolvedValue([]); await sut.onConfigUpdate({ - newConfig: { - library: { ...systemConfigStub.libraryScan.library, ...systemConfigStub.libraryWatchEnabled.library }, - } as SystemConfig, + newConfig: systemConfigStub.libraryScanAndWatch as SystemConfig, oldConfig: defaults, }); @@ -172,15 +158,11 @@ describe(LibraryService.name, () => { it('should update cron job and disable watching', async () => { libraryMock.getAll.mockResolvedValue([]); await sut.onConfigUpdate({ - newConfig: { - library: { ...systemConfigStub.libraryScan.library, ...systemConfigStub.libraryWatchEnabled.library }, - } as SystemConfig, + newConfig: systemConfigStub.libraryScanAndWatch as SystemConfig, oldConfig: defaults, }); await sut.onConfigUpdate({ - newConfig: { - library: { ...systemConfigStub.libraryScan.library, ...systemConfigStub.libraryWatchDisabled.library }, - } as SystemConfig, + newConfig: systemConfigStub.libraryScan as SystemConfig, oldConfig: defaults, }); @@ -703,12 +685,10 @@ describe(LibraryService.name, () => { libraryMock.get.mockResolvedValue(libraryStub.externalLibraryWithImportPaths1); libraryMock.getAll.mockResolvedValue([libraryStub.externalLibraryWithImportPaths1]); - systemMock.get.mockResolvedValue(systemConfigStub.libraryWatchEnabled); - const mockClose = vitest.fn(); storageMock.watch.mockImplementation(makeMockWatcher({ close: mockClose })); - await sut.onBootstrap(ImmichWorker.MICROSERVICES); + await sut.onConfigInit({ newConfig: systemConfigStub.libraryWatchEnabled as SystemConfig }); await sut.delete(libraryStub.externalLibraryWithImportPaths1.id); expect(mockClose).toHaveBeenCalled(); @@ -837,12 +817,11 @@ describe(LibraryService.name, () => { }); it('should create watched with import paths', async () => { - systemMock.get.mockResolvedValue(systemConfigStub.libraryWatchEnabled); libraryMock.create.mockResolvedValue(libraryStub.externalLibraryWithImportPaths1); libraryMock.get.mockResolvedValue(libraryStub.externalLibraryWithImportPaths1); libraryMock.getAll.mockResolvedValue([]); - await sut.onBootstrap(ImmichWorker.MICROSERVICES); + await sut.onConfigInit({ newConfig: systemConfigStub.libraryWatchEnabled as SystemConfig }); await sut.create({ ownerId: authStub.admin.user.id, importPaths: libraryStub.externalLibraryWithImportPaths1.importPaths, @@ -902,10 +881,9 @@ describe(LibraryService.name, () => { describe('update', () => { beforeEach(async () => { - systemMock.get.mockResolvedValue(systemConfigStub.libraryWatchEnabled); libraryMock.getAll.mockResolvedValue([]); - await sut.onBootstrap(ImmichWorker.MICROSERVICES); + await sut.onConfigInit({ newConfig: systemConfigStub.libraryWatchEnabled as SystemConfig }); }); it('should throw an error if an import path is invalid', async () => { @@ -944,9 +922,7 @@ describe(LibraryService.name, () => { describe('watching disabled', () => { beforeEach(async () => { - systemMock.get.mockResolvedValue(systemConfigStub.libraryWatchDisabled); - - await sut.onBootstrap(ImmichWorker.MICROSERVICES); + await sut.onConfigInit({ newConfig: systemConfigStub.libraryWatchDisabled as SystemConfig }); }); it('should not watch library', async () => { @@ -960,9 +936,8 @@ describe(LibraryService.name, () => { describe('watching enabled', () => { beforeEach(async () => { - systemMock.get.mockResolvedValue(systemConfigStub.libraryWatchEnabled); libraryMock.getAll.mockResolvedValue([]); - await sut.onBootstrap(ImmichWorker.MICROSERVICES); + await sut.onConfigInit({ newConfig: systemConfigStub.libraryWatchEnabled as SystemConfig }); }); it('should watch library', async () => { @@ -1114,7 +1089,6 @@ describe(LibraryService.name, () => { libraryStub.externalLibraryWithImportPaths2, ]); - systemMock.get.mockResolvedValue(systemConfigStub.libraryWatchEnabled); libraryMock.get.mockResolvedValue(libraryStub.externalLibrary1); libraryMock.get.mockImplementation((id) => @@ -1128,7 +1102,7 @@ describe(LibraryService.name, () => { const mockClose = vitest.fn(); storageMock.watch.mockImplementation(makeMockWatcher({ close: mockClose })); - await sut.onBootstrap(ImmichWorker.MICROSERVICES); + await sut.onConfigInit({ newConfig: systemConfigStub.libraryWatchEnabled as SystemConfig }); await sut.onShutdown(); expect(mockClose).toHaveBeenCalledTimes(2); diff --git a/server/src/services/library.service.ts b/server/src/services/library.service.ts index ffb08031004ca..6e10863793275 100644 --- a/server/src/services/library.service.ts +++ b/server/src/services/library.service.ts @@ -32,16 +32,16 @@ export class LibraryService extends BaseService { private lock = false; private watchers: Record Promise> = {}; - @OnEvent({ name: 'app.bootstrap' }) - async onBootstrap(workerType: ImmichWorker) { - if (workerType !== ImmichWorker.MICROSERVICES) { + @OnEvent({ name: 'config.init' }) + async onConfigInit({ + newConfig: { + library: { watch, scan }, + }, + }: ArgOf<'config.init'>) { + if (this.worker !== ImmichWorker.MICROSERVICES) { return; } - const config = await this.getConfig({ withCache: false }); - - const { watch, scan } = config.library; - // This ensures that library watching only occurs in one microservice this.lock = await this.databaseRepository.tryLock(DatabaseLock.Library); @@ -62,8 +62,8 @@ export class LibraryService extends BaseService { } @OnEvent({ name: 'config.update', server: true }) - async onConfigUpdate({ newConfig: { library }, oldConfig }: ArgOf<'config.update'>) { - if (!oldConfig || !this.lock) { + async onConfigUpdate({ newConfig: { library } }: ArgOf<'config.update'>) { + if (!this.lock) { return; } diff --git a/server/src/services/metadata.service.spec.ts b/server/src/services/metadata.service.spec.ts index cc6eae6e3b511..986fab48bdf94 100644 --- a/server/src/services/metadata.service.spec.ts +++ b/server/src/services/metadata.service.spec.ts @@ -6,6 +6,7 @@ import { ExifEntity } from 'src/entities/exif.entity'; import { AssetType, ImmichWorker, SourceType } from 'src/enum'; import { IAlbumRepository } from 'src/interfaces/album.interface'; import { IAssetRepository, WithoutProperty } from 'src/interfaces/asset.interface'; +import { IConfigRepository } from 'src/interfaces/config.interface'; import { ICryptoRepository } from 'src/interfaces/crypto.interface'; import { IEventRepository } from 'src/interfaces/event.interface'; import { IJobRepository, JobName, JobStatus } from 'src/interfaces/job.interface'; @@ -32,6 +33,7 @@ describe(MetadataService.name, () => { let albumMock: Mocked; let assetMock: Mocked; + let configMock: Mocked; let cryptoMock: Mocked; let eventMock: Mocked; let jobMock: Mocked; @@ -55,6 +57,7 @@ describe(MetadataService.name, () => { sut, albumMock, assetMock, + configMock, cryptoMock, eventMock, jobMock, @@ -70,6 +73,8 @@ describe(MetadataService.name, () => { mockReadTags(); + configMock.getWorker.mockReturnValue(ImmichWorker.MICROSERVICES); + delete process.env.TZ; }); @@ -83,17 +88,16 @@ describe(MetadataService.name, () => { describe('onBootstrapEvent', () => { it('should pause and resume queue during init', async () => { - await sut.onBootstrap(ImmichWorker.MICROSERVICES); + await sut.onBootstrap(); expect(jobMock.pause).toHaveBeenCalledTimes(1); expect(mapMock.init).toHaveBeenCalledTimes(1); expect(jobMock.resume).toHaveBeenCalledTimes(1); }); - it('should return if reverse geocoding is disabled', async () => { - systemMock.get.mockResolvedValue({ reverseGeocoding: { enabled: false } }); - - await sut.onBootstrap(ImmichWorker.MICROSERVICES); + it('should return if running on api', async () => { + configMock.getWorker.mockReturnValue(ImmichWorker.API); + await sut.onBootstrap(); expect(jobMock.pause).not.toHaveBeenCalled(); expect(mapMock.init).not.toHaveBeenCalled(); diff --git a/server/src/services/metadata.service.ts b/server/src/services/metadata.service.ts index 194f61a0a4ead..98566b9693636 100644 --- a/server/src/services/metadata.service.ts +++ b/server/src/services/metadata.service.ts @@ -80,12 +80,12 @@ const validateRange = (value: number | undefined, min: number, max: number): Non @Injectable() export class MetadataService extends BaseService { @OnEvent({ name: 'app.bootstrap' }) - async onBootstrap(app: ArgOf<'app.bootstrap'>) { - if (app !== ImmichWorker.MICROSERVICES) { + async onBootstrap() { + if (this.worker !== ImmichWorker.MICROSERVICES) { return; } - const config = await this.getConfig({ withCache: false }); - await this.init(config); + this.logger.log('Bootstrapping metadata service'); + await this.init(); } @OnEvent({ name: 'app.shutdown' }) @@ -93,17 +93,8 @@ export class MetadataService extends BaseService { await this.metadataRepository.teardown(); } - @OnEvent({ name: 'config.update' }) - async onConfigUpdate({ newConfig }: ArgOf<'config.update'>) { - await this.init(newConfig); - } - - private async init({ reverseGeocoding }: SystemConfig) { - const { enabled } = reverseGeocoding; - - if (!enabled) { - return; - } + private async init() { + this.logger.log('Initializing metadata service'); try { await this.jobRepository.pause(QueueName.METADATA_EXTRACTION); diff --git a/server/src/services/notification.service.spec.ts b/server/src/services/notification.service.spec.ts index d07d06443aee1..76da12bbd6abb 100644 --- a/server/src/services/notification.service.spec.ts +++ b/server/src/services/notification.service.spec.ts @@ -77,7 +77,7 @@ describe(NotificationService.name, () => { describe('onConfigUpdate', () => { it('should emit client and server events', () => { - const update = { newConfig: defaults }; + const update = { oldConfig: defaults, newConfig: defaults }; expect(sut.onConfigUpdate(update)).toBeUndefined(); expect(eventMock.clientBroadcast).toHaveBeenCalledWith('on_config_update'); expect(eventMock.serverSend).toHaveBeenCalledWith('config.update', update); diff --git a/server/src/services/smart-info.service.spec.ts b/server/src/services/smart-info.service.spec.ts index f53822a9e2251..4ae595919450f 100644 --- a/server/src/services/smart-info.service.spec.ts +++ b/server/src/services/smart-info.service.spec.ts @@ -1,6 +1,7 @@ import { SystemConfig } from 'src/config'; import { ImmichWorker } from 'src/enum'; import { IAssetRepository, WithoutProperty } from 'src/interfaces/asset.interface'; +import { IConfigRepository } from 'src/interfaces/config.interface'; import { IDatabaseRepository } from 'src/interfaces/database.interface'; import { IJobRepository, JobName, JobStatus } from 'src/interfaces/job.interface'; import { IMachineLearningRepository } from 'src/interfaces/machine-learning.interface'; @@ -22,12 +23,14 @@ describe(SmartInfoService.name, () => { let machineLearningMock: Mocked; let searchMock: Mocked; let systemMock: Mocked; + let configMock: Mocked; beforeEach(() => { - ({ sut, assetMock, databaseMock, jobMock, machineLearningMock, searchMock, systemMock } = + ({ sut, assetMock, databaseMock, jobMock, machineLearningMock, searchMock, systemMock, configMock } = newTestService(SmartInfoService)); assetMock.getByIds.mockResolvedValue([assetStub.image]); + configMock.getWorker.mockReturnValue(ImmichWorker.MICROSERVICES); }); it('should work', () => { @@ -63,11 +66,11 @@ describe(SmartInfoService.name, () => { }); }); - describe('onBootstrapEvent', () => { + describe('onConfigInit', () => { it('should return if not microservices', async () => { - await sut.onBootstrap(ImmichWorker.API); + configMock.getWorker.mockReturnValue(ImmichWorker.API); + await sut.onConfigInit({ newConfig: systemConfigStub.machineLearningEnabled as SystemConfig }); - expect(systemMock.get).not.toHaveBeenCalled(); expect(searchMock.getDimensionSize).not.toHaveBeenCalled(); expect(searchMock.setDimensionSize).not.toHaveBeenCalled(); expect(searchMock.deleteAllSearchEmbeddings).not.toHaveBeenCalled(); @@ -78,11 +81,8 @@ describe(SmartInfoService.name, () => { }); it('should return if machine learning is disabled', async () => { - systemMock.get.mockResolvedValue(systemConfigStub.machineLearningDisabled); + await sut.onConfigInit({ newConfig: systemConfigStub.machineLearningDisabled as SystemConfig }); - await sut.onBootstrap(ImmichWorker.MICROSERVICES); - - expect(systemMock.get).toHaveBeenCalledTimes(1); expect(searchMock.getDimensionSize).not.toHaveBeenCalled(); expect(searchMock.setDimensionSize).not.toHaveBeenCalled(); expect(searchMock.deleteAllSearchEmbeddings).not.toHaveBeenCalled(); @@ -95,9 +95,8 @@ describe(SmartInfoService.name, () => { it('should return if model and DB dimension size are equal', async () => { searchMock.getDimensionSize.mockResolvedValue(512); - await sut.onBootstrap(ImmichWorker.MICROSERVICES); + await sut.onConfigInit({ newConfig: systemConfigStub.machineLearningEnabled as SystemConfig }); - expect(systemMock.get).toHaveBeenCalledTimes(1); expect(searchMock.getDimensionSize).toHaveBeenCalledTimes(1); expect(searchMock.setDimensionSize).not.toHaveBeenCalled(); expect(searchMock.deleteAllSearchEmbeddings).not.toHaveBeenCalled(); @@ -111,9 +110,8 @@ describe(SmartInfoService.name, () => { searchMock.getDimensionSize.mockResolvedValue(768); jobMock.getQueueStatus.mockResolvedValue({ isActive: false, isPaused: false }); - await sut.onBootstrap(ImmichWorker.MICROSERVICES); + await sut.onConfigInit({ newConfig: systemConfigStub.machineLearningEnabled as SystemConfig }); - expect(systemMock.get).toHaveBeenCalledTimes(1); expect(searchMock.getDimensionSize).toHaveBeenCalledTimes(1); expect(searchMock.setDimensionSize).toHaveBeenCalledWith(512); expect(jobMock.getQueueStatus).toHaveBeenCalledTimes(1); @@ -126,9 +124,8 @@ describe(SmartInfoService.name, () => { searchMock.getDimensionSize.mockResolvedValue(768); jobMock.getQueueStatus.mockResolvedValue({ isActive: false, isPaused: true }); - await sut.onBootstrap(ImmichWorker.MICROSERVICES); + await sut.onConfigInit({ newConfig: systemConfigStub.machineLearningEnabled as SystemConfig }); - expect(systemMock.get).toHaveBeenCalledTimes(1); expect(searchMock.getDimensionSize).toHaveBeenCalledTimes(1); expect(searchMock.setDimensionSize).toHaveBeenCalledWith(512); expect(jobMock.getQueueStatus).toHaveBeenCalledTimes(1); @@ -139,6 +136,22 @@ describe(SmartInfoService.name, () => { }); describe('onConfigUpdateEvent', () => { + it('should return if not microservices', async () => { + configMock.getWorker.mockReturnValue(ImmichWorker.API); + await sut.onConfigUpdate({ + newConfig: systemConfigStub.machineLearningEnabled as SystemConfig, + oldConfig: systemConfigStub.machineLearningEnabled as SystemConfig, + }); + + expect(searchMock.getDimensionSize).not.toHaveBeenCalled(); + expect(searchMock.setDimensionSize).not.toHaveBeenCalled(); + expect(searchMock.deleteAllSearchEmbeddings).not.toHaveBeenCalled(); + expect(jobMock.getQueueStatus).not.toHaveBeenCalled(); + expect(jobMock.pause).not.toHaveBeenCalled(); + expect(jobMock.waitForQueueCompletion).not.toHaveBeenCalled(); + expect(jobMock.resume).not.toHaveBeenCalled(); + }); + it('should return if machine learning is disabled', async () => { systemMock.get.mockResolvedValue(systemConfigStub.machineLearningDisabled); diff --git a/server/src/services/smart-info.service.ts b/server/src/services/smart-info.service.ts index e74c0a7fe5d79..9e1eb5b31b686 100644 --- a/server/src/services/smart-info.service.ts +++ b/server/src/services/smart-info.service.ts @@ -13,17 +13,12 @@ import { usePagination } from 'src/utils/pagination'; @Injectable() export class SmartInfoService extends BaseService { - @OnEvent({ name: 'app.bootstrap' }) - async onBootstrap(app: ArgOf<'app.bootstrap'>) { - if (app !== ImmichWorker.MICROSERVICES) { - return; - } - - const config = await this.getConfig({ withCache: false }); - await this.init(config); + @OnEvent({ name: 'config.init' }) + async onConfigInit({ newConfig }: ArgOf<'config.init'>) { + await this.init(newConfig); } - @OnEvent({ name: 'config.update' }) + @OnEvent({ name: 'config.update', server: true }) async onConfigUpdate({ oldConfig, newConfig }: ArgOf<'config.update'>) { await this.init(newConfig, oldConfig); } @@ -40,7 +35,7 @@ export class SmartInfoService extends BaseService { } private async init(newConfig: SystemConfig, oldConfig?: SystemConfig) { - if (!isSmartSearchEnabled(newConfig.machineLearning)) { + if (this.worker !== ImmichWorker.MICROSERVICES || !isSmartSearchEnabled(newConfig.machineLearning)) { return; } diff --git a/server/src/services/storage-template.service.spec.ts b/server/src/services/storage-template.service.spec.ts index fd063bd50d419..496468a0288b3 100644 --- a/server/src/services/storage-template.service.spec.ts +++ b/server/src/services/storage-template.service.spec.ts @@ -38,7 +38,7 @@ describe(StorageTemplateService.name, () => { systemMock.get.mockResolvedValue({ storageTemplate: { enabled: true } }); - sut.onConfigUpdate({ newConfig: defaults }); + sut.onConfigInitOrUpdate({ newConfig: defaults }); }); describe('onConfigValidate', () => { @@ -171,7 +171,7 @@ describe(StorageTemplateService.name, () => { const config = structuredClone(defaults); config.storageTemplate.template = '{{y}}/{{#if album}}{{album}}{{else}}other/{{MM}}{{/if}}/{{filename}}'; - sut.onConfigUpdate({ oldConfig: defaults, newConfig: config }); + sut.onConfigInitOrUpdate({ newConfig: config }); userMock.get.mockResolvedValue(user); assetMock.getByIds.mockResolvedValueOnce([asset]); @@ -192,7 +192,7 @@ describe(StorageTemplateService.name, () => { const user = userStub.user1; const config = structuredClone(defaults); config.storageTemplate.template = '{{y}}/{{#if album}}{{album}}{{else}}other//{{MM}}{{/if}}/{{filename}}'; - sut.onConfigUpdate({ oldConfig: defaults, newConfig: config }); + sut.onConfigInitOrUpdate({ newConfig: config }); userMock.get.mockResolvedValue(user); assetMock.getByIds.mockResolvedValueOnce([asset]); diff --git a/server/src/services/storage-template.service.ts b/server/src/services/storage-template.service.ts index f54f493e21fa7..08566446e369b 100644 --- a/server/src/services/storage-template.service.ts +++ b/server/src/services/storage-template.service.ts @@ -74,8 +74,9 @@ export class StorageTemplateService extends BaseService { return this._template; } + @OnEvent({ name: 'config.init' }) @OnEvent({ name: 'config.update', server: true }) - onConfigUpdate({ newConfig }: ArgOf<'config.update'>) { + onConfigInitOrUpdate({ newConfig }: ArgOf<'config.init'>) { const template = newConfig.storageTemplate.template; if (!this._template || template !== this.template.raw) { this.logger.debug(`Compiling new storage template: ${template}`); diff --git a/server/src/services/system-config.service.ts b/server/src/services/system-config.service.ts index 8f19b221733a5..b5ae42e0989d1 100644 --- a/server/src/services/system-config.service.ts +++ b/server/src/services/system-config.service.ts @@ -4,17 +4,17 @@ import _ from 'lodash'; import { defaults } from 'src/config'; import { OnEvent } from 'src/decorators'; import { SystemConfigDto, mapConfig } from 'src/dtos/system-config.dto'; -import { ArgOf } from 'src/interfaces/event.interface'; +import { ArgOf, BootstrapEventPriority } from 'src/interfaces/event.interface'; import { BaseService } from 'src/services/base.service'; import { clearConfigCache } from 'src/utils/config'; import { toPlainObject } from 'src/utils/object'; @Injectable() export class SystemConfigService extends BaseService { - @OnEvent({ name: 'app.bootstrap', priority: -100 }) + @OnEvent({ name: 'app.bootstrap', priority: BootstrapEventPriority.SystemConfig }) async onBootstrap() { const config = await this.getConfig({ withCache: false }); - await this.eventRepository.emit('config.update', { newConfig: config }); + await this.eventRepository.emit('config.init', { newConfig: config }); } async getSystemConfig(): Promise { @@ -26,14 +26,18 @@ export class SystemConfigService extends BaseService { return mapConfig(defaults); } - @OnEvent({ name: 'config.update', server: true }) - onConfigUpdate({ newConfig: { logging } }: ArgOf<'config.update'>) { + @OnEvent({ name: 'config.init' }) + onConfigInit({ newConfig: { logging } }: ArgOf<'config.init'>) { const { logLevel: envLevel } = this.configRepository.getEnv(); const configLevel = logging.enabled ? logging.level : false; const level = envLevel ?? configLevel; this.logger.setLogLevel(level); this.logger.log(`LogLevel=${level} ${envLevel ? '(set via IMMICH_LOG_LEVEL)' : '(set via system config)'}`); - // TODO only do this if the event is a socket.io event + } + + @OnEvent({ name: 'config.update', server: true }) + onConfigUpdate({ newConfig }: ArgOf<'config.update'>) { + this.onConfigInit({ newConfig }); clearConfigCache(); } diff --git a/server/test/fixtures/system-config.stub.ts b/server/test/fixtures/system-config.stub.ts index 9c6822d52f34d..10a0de77b04b7 100644 --- a/server/test/fixtures/system-config.stub.ts +++ b/server/test/fixtures/system-config.stub.ts @@ -54,6 +54,9 @@ export const systemConfigStub = { }, libraryWatchEnabled: { library: { + scan: { + enabled: false, + }, watch: { enabled: true, }, @@ -61,6 +64,9 @@ export const systemConfigStub = { }, libraryWatchDisabled: { library: { + scan: { + enabled: false, + }, watch: { enabled: false, }, @@ -72,6 +78,20 @@ export const systemConfigStub = { enabled: true, cronExpression: '0 0 * * *', }, + watch: { + enabled: false, + }, + }, + }, + libraryScanAndWatch: { + library: { + scan: { + enabled: true, + cronExpression: '0 0 * * *', + }, + watch: { + enabled: true, + }, }, }, backupEnabled: { @@ -88,4 +108,13 @@ export const systemConfigStub = { enabled: false, }, }, + machineLearningEnabled: { + machineLearning: { + enabled: true, + clip: { + modelName: 'ViT-B-16__openai', + enabled: true, + }, + }, + }, } satisfies Record>; From b36de7d7d4a8295df077d3afa94e7e61d56b45c8 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 5 Nov 2024 10:34:24 -0600 Subject: [PATCH 08/21] chore(mobile): upgrade gradle (#13901) * chore(mobile): upgrade gradle * update photo_manager * migrate from kapt to ksp pumps kotlin and other dependency version to fix build issues * increase java heap size --------- Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> --- mobile/android/app/build.gradle | 23 +++++++------ .../android/app/src/debug/AndroidManifest.xml | 4 +-- .../android/app/src/main/AndroidManifest.xml | 2 +- .../app/src/profile/AndroidManifest.xml | 4 +-- mobile/android/build.gradle | 2 +- mobile/android/gradle.properties | 6 ++-- .../gradle/wrapper/gradle-wrapper.properties | 4 +-- mobile/android/settings.gradle | 6 ++-- mobile/lib/entities/album.entity.g.dart | 2 +- .../android_device_asset.entity.g.dart | 2 +- mobile/lib/entities/asset.entity.g.dart | 2 +- .../lib/entities/backup_album.entity.g.dart | 2 +- .../entities/duplicated_asset.entity.g.dart | 2 +- mobile/lib/entities/etag.entity.g.dart | 2 +- mobile/lib/entities/exif_info.entity.g.dart | 2 +- .../entities/ios_device_asset.entity.g.dart | 2 +- .../lib/entities/logger_message.entity.g.dart | 2 +- mobile/lib/entities/store.entity.g.dart | 2 +- mobile/lib/entities/user.entity.g.dart | 2 +- mobile/pubspec.lock | 34 +++++++++---------- mobile/pubspec.yaml | 18 +++++++--- 21 files changed, 69 insertions(+), 56 deletions(-) diff --git a/mobile/android/app/build.gradle b/mobile/android/app/build.gradle index 52750232cceba..506ee9d1a4b0a 100644 --- a/mobile/android/app/build.gradle +++ b/mobile/android/app/build.gradle @@ -2,7 +2,7 @@ plugins { id "com.android.application" id "kotlin-android" id "dev.flutter.flutter-gradle-plugin" - id "kotlin-kapt" + id 'com.google.devtools.ksp' } def localProperties = new Properties() @@ -31,12 +31,13 @@ android { compileSdkVersion 34 compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + coreLibraryDesugaringEnabled true } kotlinOptions { - jvmTarget = '1.8' + jvmTarget = '17' } sourceSets { @@ -74,6 +75,7 @@ android { signingConfig signingConfigs.release } } + namespace 'app.alextran.immich' } flutter { @@ -81,11 +83,11 @@ flutter { } dependencies { - def kotlin_version = '1.9.24' - def kotlin_coroutines_version = '1.8.1' - def work_version = '2.9.0' - def concurrent_version = '1.1.0' - def guava_version = '33.2.0-android' + def kotlin_version = '2.0.20' + def kotlin_coroutines_version = '1.9.0' + def work_version = '2.9.1' + def concurrent_version = '1.2.0' + def guava_version = '33.3.1-android' def glide_version = '4.16.0' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" @@ -94,7 +96,8 @@ dependencies { implementation "androidx.concurrent:concurrent-futures:$concurrent_version" implementation "com.google.guava:guava:$guava_version" implementation "com.github.bumptech.glide:glide:$glide_version" - kapt "com.github.bumptech.glide:compiler:$glide_version" + ksp "com.github.bumptech.glide:ksp:$glide_version" + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.2' } // This is uncommented in F-Droid build script diff --git a/mobile/android/app/src/debug/AndroidManifest.xml b/mobile/android/app/src/debug/AndroidManifest.xml index e33c470b4d2a0..ac7c0c7e53034 100644 --- a/mobile/android/app/src/debug/AndroidManifest.xml +++ b/mobile/android/app/src/debug/AndroidManifest.xml @@ -1,6 +1,6 @@ - + - \ No newline at end of file + diff --git a/mobile/android/app/src/main/AndroidManifest.xml b/mobile/android/app/src/main/AndroidManifest.xml index 17c2830b48e26..c85ce136844bc 100644 --- a/mobile/android/app/src/main/AndroidManifest.xml +++ b/mobile/android/app/src/main/AndroidManifest.xml @@ -1,4 +1,4 @@ - diff --git a/mobile/android/app/src/profile/AndroidManifest.xml b/mobile/android/app/src/profile/AndroidManifest.xml index e33c470b4d2a0..ac7c0c7e53034 100644 --- a/mobile/android/app/src/profile/AndroidManifest.xml +++ b/mobile/android/app/src/profile/AndroidManifest.xml @@ -1,6 +1,6 @@ - + - \ No newline at end of file + diff --git a/mobile/android/build.gradle b/mobile/android/build.gradle index 87cc79281dd37..7a39a8d3cccf9 100644 --- a/mobile/android/build.gradle +++ b/mobile/android/build.gradle @@ -1,5 +1,5 @@ allprojects { - ext.kotlin_version = '1.9.24' + ext.kotlin_version = '2.0.20' repositories { google() diff --git a/mobile/android/gradle.properties b/mobile/android/gradle.properties index 4d3226abc21bb..8da88752907fc 100644 --- a/mobile/android/gradle.properties +++ b/mobile/android/gradle.properties @@ -1,3 +1,5 @@ -org.gradle.jvmargs=-Xmx1536M +org.gradle.jvmargs=-Xmx4096M android.useAndroidX=true -android.enableJetifier=true \ No newline at end of file +android.enableJetifier=true +android.nonTransitiveRClass=false +android.nonFinalResIds=false diff --git a/mobile/android/gradle/wrapper/gradle-wrapper.properties b/mobile/android/gradle/wrapper/gradle-wrapper.properties index 6357330c9e8fd..dedd5d1e69e69 100644 --- a/mobile/android/gradle/wrapper/gradle-wrapper.properties +++ b/mobile/android/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-all.zip +networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.4-all.zip -distributionSha256Sum=fe696c020f241a5f69c30f763c5a7f38eec54b490db19cd2b0962dda420d7d12 \ No newline at end of file diff --git a/mobile/android/settings.gradle b/mobile/android/settings.gradle index e809a0abaa38f..74f8904a10960 100644 --- a/mobile/android/settings.gradle +++ b/mobile/android/settings.gradle @@ -18,9 +18,9 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.4.2" apply false - id "org.jetbrains.kotlin.android" version "1.9.0" apply false - id "org.jetbrains.kotlin.kapt" version "1.9.0" apply false + id "com.android.application" version '8.7.2' apply false + id "org.jetbrains.kotlin.android" version "2.0.20" apply false + id 'com.google.devtools.ksp' version '2.0.20-1.0.24' apply false } include ":app" diff --git a/mobile/lib/entities/album.entity.g.dart b/mobile/lib/entities/album.entity.g.dart index 11046ec1e0d67..b1e322e397cb2 100644 --- a/mobile/lib/entities/album.entity.g.dart +++ b/mobile/lib/entities/album.entity.g.dart @@ -131,7 +131,7 @@ const AlbumSchema = CollectionSchema( getId: _albumGetId, getLinks: _albumGetLinks, attach: _albumAttach, - version: '3.1.0+1', + version: '3.1.8', ); int _albumEstimateSize( diff --git a/mobile/lib/entities/android_device_asset.entity.g.dart b/mobile/lib/entities/android_device_asset.entity.g.dart index 9b1eef0ae59d7..eaa7658565f1c 100644 --- a/mobile/lib/entities/android_device_asset.entity.g.dart +++ b/mobile/lib/entities/android_device_asset.entity.g.dart @@ -49,7 +49,7 @@ const AndroidDeviceAssetSchema = CollectionSchema( getId: _androidDeviceAssetGetId, getLinks: _androidDeviceAssetGetLinks, attach: _androidDeviceAssetAttach, - version: '3.1.0+1', + version: '3.1.8', ); int _androidDeviceAssetEstimateSize( diff --git a/mobile/lib/entities/asset.entity.g.dart b/mobile/lib/entities/asset.entity.g.dart index 23bf23604635d..07eee4825e0bd 100644 --- a/mobile/lib/entities/asset.entity.g.dart +++ b/mobile/lib/entities/asset.entity.g.dart @@ -180,7 +180,7 @@ const AssetSchema = CollectionSchema( getId: _assetGetId, getLinks: _assetGetLinks, attach: _assetAttach, - version: '3.1.0+1', + version: '3.1.8', ); int _assetEstimateSize( diff --git a/mobile/lib/entities/backup_album.entity.g.dart b/mobile/lib/entities/backup_album.entity.g.dart index 7fb6c0e03b6b2..23d00e43cadbe 100644 --- a/mobile/lib/entities/backup_album.entity.g.dart +++ b/mobile/lib/entities/backup_album.entity.g.dart @@ -45,7 +45,7 @@ const BackupAlbumSchema = CollectionSchema( getId: _backupAlbumGetId, getLinks: _backupAlbumGetLinks, attach: _backupAlbumAttach, - version: '3.1.0+1', + version: '3.1.8', ); int _backupAlbumEstimateSize( diff --git a/mobile/lib/entities/duplicated_asset.entity.g.dart b/mobile/lib/entities/duplicated_asset.entity.g.dart index 28faa05b6d0f9..8965d47c97e33 100644 --- a/mobile/lib/entities/duplicated_asset.entity.g.dart +++ b/mobile/lib/entities/duplicated_asset.entity.g.dart @@ -34,7 +34,7 @@ const DuplicatedAssetSchema = CollectionSchema( getId: _duplicatedAssetGetId, getLinks: _duplicatedAssetGetLinks, attach: _duplicatedAssetAttach, - version: '3.1.0+1', + version: '3.1.8', ); int _duplicatedAssetEstimateSize( diff --git a/mobile/lib/entities/etag.entity.g.dart b/mobile/lib/entities/etag.entity.g.dart index 5327f6041afca..afabca4aeaa4e 100644 --- a/mobile/lib/entities/etag.entity.g.dart +++ b/mobile/lib/entities/etag.entity.g.dart @@ -58,7 +58,7 @@ const ETagSchema = CollectionSchema( getId: _eTagGetId, getLinks: _eTagGetLinks, attach: _eTagAttach, - version: '3.1.0+1', + version: '3.1.8', ); int _eTagEstimateSize( diff --git a/mobile/lib/entities/exif_info.entity.g.dart b/mobile/lib/entities/exif_info.entity.g.dart index 016f6d71260d0..015983abf289f 100644 --- a/mobile/lib/entities/exif_info.entity.g.dart +++ b/mobile/lib/entities/exif_info.entity.g.dart @@ -109,7 +109,7 @@ const ExifInfoSchema = CollectionSchema( getId: _exifInfoGetId, getLinks: _exifInfoGetLinks, attach: _exifInfoAttach, - version: '3.1.0+1', + version: '3.1.8', ); int _exifInfoEstimateSize( diff --git a/mobile/lib/entities/ios_device_asset.entity.g.dart b/mobile/lib/entities/ios_device_asset.entity.g.dart index 6ecf9f0b73098..ffed338c916fb 100644 --- a/mobile/lib/entities/ios_device_asset.entity.g.dart +++ b/mobile/lib/entities/ios_device_asset.entity.g.dart @@ -66,7 +66,7 @@ const IOSDeviceAssetSchema = CollectionSchema( getId: _iOSDeviceAssetGetId, getLinks: _iOSDeviceAssetGetLinks, attach: _iOSDeviceAssetAttach, - version: '3.1.0+1', + version: '3.1.8', ); int _iOSDeviceAssetEstimateSize( diff --git a/mobile/lib/entities/logger_message.entity.g.dart b/mobile/lib/entities/logger_message.entity.g.dart index 50c7fcf8ed281..e292e7173a48d 100644 --- a/mobile/lib/entities/logger_message.entity.g.dart +++ b/mobile/lib/entities/logger_message.entity.g.dart @@ -60,7 +60,7 @@ const LoggerMessageSchema = CollectionSchema( getId: _loggerMessageGetId, getLinks: _loggerMessageGetLinks, attach: _loggerMessageAttach, - version: '3.1.0+1', + version: '3.1.8', ); int _loggerMessageEstimateSize( diff --git a/mobile/lib/entities/store.entity.g.dart b/mobile/lib/entities/store.entity.g.dart index eb8fa62f4078d..7d3210ff85a7a 100644 --- a/mobile/lib/entities/store.entity.g.dart +++ b/mobile/lib/entities/store.entity.g.dart @@ -39,7 +39,7 @@ const StoreValueSchema = CollectionSchema( getId: _storeValueGetId, getLinks: _storeValueGetLinks, attach: _storeValueAttach, - version: '3.1.0+1', + version: '3.1.8', ); int _storeValueEstimateSize( diff --git a/mobile/lib/entities/user.entity.g.dart b/mobile/lib/entities/user.entity.g.dart index a0ecc4705c738..a7aaee44bf164 100644 --- a/mobile/lib/entities/user.entity.g.dart +++ b/mobile/lib/entities/user.entity.g.dart @@ -129,7 +129,7 @@ const UserSchema = CollectionSchema( getId: _userGetId, getLinks: _userGetLinks, attach: _userAttach, - version: '3.1.0+1', + version: '3.1.8', ); int _userEstimateSize( diff --git a/mobile/pubspec.lock b/mobile/pubspec.lock index d3dfeb8deee30..d08740a8d13e6 100644 --- a/mobile/pubspec.lock +++ b/mobile/pubspec.lock @@ -548,10 +548,10 @@ packages: dependency: "direct main" description: name: flutter_local_notifications - sha256: dd6676d8c2926537eccdf9f72128bbb2a9d0814689527b17f92c248ff192eaf3 + sha256: "674173fd3c9eda9d4c8528da2ce0ea69f161577495a9cc835a2a4ecd7eadeb35" url: "https://pub.dev" source: hosted - version: "17.2.1+2" + version: "17.2.4" flutter_local_notifications_linux: dependency: transitive description: @@ -876,26 +876,26 @@ packages: dependency: "direct main" description: name: isar - sha256: "99165dadb2cf2329d3140198363a7e7bff9bbd441871898a87e26914d25cf1ea" - url: "https://pub.dev" + sha256: e17a9555bc7f22ff26568b8c64d019b4ffa2dc6bd4cb1c8d9b269aefd32e53ad + url: "https://pub.isar-community.dev" source: hosted - version: "3.1.0+1" + version: "3.1.8" isar_flutter_libs: dependency: "direct main" description: name: isar_flutter_libs - sha256: bc6768cc4b9c61aabff77152e7f33b4b17d2fc93134f7af1c3dd51500fe8d5e8 - url: "https://pub.dev" + sha256: "78710781e658ce4bff59b3f38c5b2735e899e627f4e926e1221934e77b95231a" + url: "https://pub.isar-community.dev" source: hosted - version: "3.1.0+1" + version: "3.1.8" isar_generator: dependency: "direct dev" description: name: isar_generator - sha256: "76c121e1295a30423604f2f819bc255bc79f852f3bc8743a24017df6068ad133" - url: "https://pub.dev" + sha256: "484e73d3b7e81dbd816852fe0b9497333118a9aeb646fd2d349a62cc8980ffe1" + url: "https://pub.isar-community.dev" source: hosted - version: "3.1.0+1" + version: "3.1.8" js: dependency: transitive description: @@ -1211,10 +1211,10 @@ packages: dependency: "direct main" description: name: photo_manager - sha256: "70159eee32203e8162d49d588232f0299ed3f383c63eef1e899cb6b83dee6b26" + sha256: f5ef2618870e9a50d8bfeb81a02c242d580ae8614bd5ea9e1b80dbb7e49d4260 url: "https://pub.dev" source: hosted - version: "3.5.1" + version: "3.6.1" photo_manager_image_provider: dependency: "direct main" description: @@ -1712,18 +1712,18 @@ packages: dependency: "direct main" description: name: video_player - sha256: e30df0d226c4ef82e2c150ebf6834b3522cf3f654d8e2f9419d376cdc071425d + sha256: "4a8c3492d734f7c39c2588a3206707a05ee80cef52e8c7f3b2078d430c84bc17" url: "https://pub.dev" source: hosted - version: "2.9.1" + version: "2.9.2" video_player_android: dependency: transitive description: name: video_player_android - sha256: "4de50df9ee786f5891d3281e1e633d7b142ef1acf47392592eb91cba5d355849" + sha256: "391e092ba4abe2f93b3e625bd6b6a6ec7d7414279462c1c0ee42b5ab8d0a0898" url: "https://pub.dev" source: hosted - version: "2.6.0" + version: "2.7.16" video_player_avfoundation: dependency: transitive description: diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index 9f3fef92841f0..454c5bfe93790 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -8,12 +8,14 @@ environment: sdk: '>=3.3.0 <4.0.0' flutter: 3.24.4 +isar_version: &isar_version 3.1.8 # define the version to be used + dependencies: flutter: sdk: flutter path_provider_ios: - photo_manager: ^3.5.1 + photo_manager: ^3.6.1 photo_manager_image_provider: ^2.2.0 flutter_hooks: ^0.20.4 hooks_riverpod: ^2.4.9 @@ -23,7 +25,7 @@ dependencies: intl: ^0.19.0 auto_route: ^9.2.0 fluttertoast: ^8.2.4 - video_player: ^2.8.2 + video_player: ^2.9.2 chewie: ^1.7.4 socket_io_client: ^2.0.3+1 maplibre_gl: 0.19.0+2 @@ -44,8 +46,12 @@ dependencies: http_parser: ^4.0.2 flutter_web_auth: ^0.6.0 easy_image_viewer: ^1.4.0 - isar: ^3.1.0+1 - isar_flutter_libs: ^3.1.0+1 + isar: + version: *isar_version + hosted: https://pub.isar-community.dev/ + isar_flutter_libs: # contains Isar Core + version: *isar_version + hosted: https://pub.isar-community.dev/ permission_handler: ^11.2.0 device_info_plus: ^11.0.0 connectivity_plus: ^6.0.0 @@ -92,7 +98,9 @@ dev_dependencies: auto_route_generator: ^9.0.0 flutter_launcher_icons: ^0.14.0 flutter_native_splash: ^2.3.9 - isar_generator: ^3.1.0+1 + isar_generator: + version: *isar_version + hosted: https://pub.isar-community.dev/ integration_test: sdk: flutter custom_lint: ^0.6.4 From 06e0ba29f89dc2a7d4e924aeaff0dd7527b5fb7d Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 5 Nov 2024 12:55:20 -0600 Subject: [PATCH 09/21] chore(web): scrubber animation (#13936) * chore(web): scrubber animation * minor styling --- .../shared-components/scrubber/scrubber.svelte | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/web/src/lib/components/shared-components/scrubber/scrubber.svelte b/web/src/lib/components/shared-components/scrubber/scrubber.svelte index 673a0c5a234b0..dbd4b05152a9d 100644 --- a/web/src/lib/components/shared-components/scrubber/scrubber.svelte +++ b/web/src/lib/components/shared-components/scrubber/scrubber.svelte @@ -6,7 +6,7 @@ import { onMount } from 'svelte'; import { isTimelineScrolling } from '$lib/stores/timeline.store'; import { parseUtcDate } from '$lib/utils/date-time'; - import { fly } from 'svelte/transition'; + import { fade, fly } from 'svelte/transition'; export let timelineTopOffset = 0; export let timelineBottomOffset = 0; @@ -240,15 +240,13 @@ {#if !isDragging}
{#if $isTimelineScrolling && formatedDate}

{formatedDate}

From 5d7a04367c3921560521c843d2af333f8060a2c1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Nov 2024 14:28:13 -0500 Subject: [PATCH 10/21] chore(deps): update dependency @types/node to ^22.8.6 (#13937) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- cli/package-lock.json | 4 ++-- cli/package.json | 2 +- e2e/package-lock.json | 6 +++--- e2e/package.json | 2 +- open-api/typescript-sdk/package-lock.json | 2 +- open-api/typescript-sdk/package.json | 2 +- server/package-lock.json | 2 +- server/package.json | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/cli/package-lock.json b/cli/package-lock.json index fe18b93b188f6..3a19b2634822d 100644 --- a/cli/package-lock.json +++ b/cli/package-lock.json @@ -24,7 +24,7 @@ "@types/cli-progress": "^3.11.0", "@types/lodash-es": "^4.17.12", "@types/mock-fs": "^4.13.1", - "@types/node": "^22.8.5", + "@types/node": "^22.8.6", "@typescript-eslint/eslint-plugin": "^8.0.0", "@typescript-eslint/parser": "^8.0.0", "@vitest/coverage-v8": "^2.0.5", @@ -59,7 +59,7 @@ "@oazapfts/runtime": "^1.0.2" }, "devDependencies": { - "@types/node": "^22.8.5", + "@types/node": "^22.8.6", "typescript": "^5.3.3" } }, diff --git a/cli/package.json b/cli/package.json index 0f9356b4bfe28..2a4fb7f5b8955 100644 --- a/cli/package.json +++ b/cli/package.json @@ -20,7 +20,7 @@ "@types/cli-progress": "^3.11.0", "@types/lodash-es": "^4.17.12", "@types/mock-fs": "^4.13.1", - "@types/node": "^22.8.5", + "@types/node": "^22.8.6", "@typescript-eslint/eslint-plugin": "^8.0.0", "@typescript-eslint/parser": "^8.0.0", "@vitest/coverage-v8": "^2.0.5", diff --git a/e2e/package-lock.json b/e2e/package-lock.json index bb46924e3ece3..56344613ba09b 100644 --- a/e2e/package-lock.json +++ b/e2e/package-lock.json @@ -15,7 +15,7 @@ "@immich/sdk": "file:../open-api/typescript-sdk", "@playwright/test": "^1.44.1", "@types/luxon": "^3.4.2", - "@types/node": "^22.8.5", + "@types/node": "^22.8.6", "@types/oidc-provider": "^8.5.1", "@types/pg": "^8.11.0", "@types/pngjs": "^6.0.4", @@ -64,7 +64,7 @@ "@types/cli-progress": "^3.11.0", "@types/lodash-es": "^4.17.12", "@types/mock-fs": "^4.13.1", - "@types/node": "^22.8.5", + "@types/node": "^22.8.6", "@typescript-eslint/eslint-plugin": "^8.0.0", "@typescript-eslint/parser": "^8.0.0", "@vitest/coverage-v8": "^2.0.5", @@ -99,7 +99,7 @@ "@oazapfts/runtime": "^1.0.2" }, "devDependencies": { - "@types/node": "^22.8.5", + "@types/node": "^22.8.6", "typescript": "^5.3.3" } }, diff --git a/e2e/package.json b/e2e/package.json index 42043fd6b274b..5fed58b2d03cb 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -25,7 +25,7 @@ "@immich/sdk": "file:../open-api/typescript-sdk", "@playwright/test": "^1.44.1", "@types/luxon": "^3.4.2", - "@types/node": "^22.8.5", + "@types/node": "^22.8.6", "@types/oidc-provider": "^8.5.1", "@types/pg": "^8.11.0", "@types/pngjs": "^6.0.4", diff --git a/open-api/typescript-sdk/package-lock.json b/open-api/typescript-sdk/package-lock.json index 53a2e76cb4f68..3155c7d245713 100644 --- a/open-api/typescript-sdk/package-lock.json +++ b/open-api/typescript-sdk/package-lock.json @@ -12,7 +12,7 @@ "@oazapfts/runtime": "^1.0.2" }, "devDependencies": { - "@types/node": "^22.8.5", + "@types/node": "^22.8.6", "typescript": "^5.3.3" } }, diff --git a/open-api/typescript-sdk/package.json b/open-api/typescript-sdk/package.json index 9df9068897059..21cc5ff75cad7 100644 --- a/open-api/typescript-sdk/package.json +++ b/open-api/typescript-sdk/package.json @@ -19,7 +19,7 @@ "@oazapfts/runtime": "^1.0.2" }, "devDependencies": { - "@types/node": "^22.8.5", + "@types/node": "^22.8.6", "typescript": "^5.3.3" }, "repository": { diff --git a/server/package-lock.json b/server/package-lock.json index 85b08523d6d54..951968d65727f 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -83,7 +83,7 @@ "@types/lodash": "^4.14.197", "@types/mock-fs": "^4.13.1", "@types/multer": "^1.4.7", - "@types/node": "^22.8.5", + "@types/node": "^22.8.6", "@types/nodemailer": "^6.4.14", "@types/picomatch": "^3.0.0", "@types/pngjs": "^6.0.5", diff --git a/server/package.json b/server/package.json index a19dd626ad04c..e83b88ca66e79 100644 --- a/server/package.json +++ b/server/package.json @@ -108,7 +108,7 @@ "@types/lodash": "^4.14.197", "@types/mock-fs": "^4.13.1", "@types/multer": "^1.4.7", - "@types/node": "^22.8.5", + "@types/node": "^22.8.6", "@types/nodemailer": "^6.4.14", "@types/picomatch": "^3.0.0", "@types/pngjs": "^6.0.5", From 42ee7f1290f58cb426bb0b504b2607f06d2ff712 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Nov 2024 20:04:39 +0000 Subject: [PATCH 11/21] chore(deps): update typescript-projects (#13922) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Daniel Dietzler --- cli/package-lock.json | 327 ++++----- e2e/package-lock.json | 495 +++++++------ server/package-lock.json | 1428 +++++++++++++++++++------------------- server/package.json | 2 +- web/package-lock.json | 341 ++++----- 5 files changed, 1306 insertions(+), 1287 deletions(-) diff --git a/cli/package-lock.json b/cli/package-lock.json index 3a19b2634822d..66211c21dd648 100644 --- a/cli/package-lock.json +++ b/cli/package-lock.json @@ -173,19 +173,21 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -276,12 +278,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.2" + "@babel/types": "^7.26.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -291,14 +294,14 @@ } }, "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1394,17 +1397,17 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.11.0.tgz", - "integrity": "sha512-KhGn2LjW1PJT2A/GfDpiyOfS4a8xHQv2myUagTM5+zsormOmBlYsnQ6pobJ8XxJmh6hnHwa2Mbe3fPrDJoDhbA==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.12.2.tgz", + "integrity": "sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.11.0", - "@typescript-eslint/type-utils": "8.11.0", - "@typescript-eslint/utils": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0", + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/type-utils": "8.12.2", + "@typescript-eslint/utils": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -1428,16 +1431,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.11.0.tgz", - "integrity": "sha512-lmt73NeHdy1Q/2ul295Qy3uninSqi6wQI18XwSpm8w0ZbQXUpjCAWP1Vlv/obudoBiIjJVjlztjQ+d/Md98Yxg==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz", + "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "8.11.0", - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/typescript-estree": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0", + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "debug": "^4.3.4" }, "engines": { @@ -1457,14 +1460,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.11.0.tgz", - "integrity": "sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz", + "integrity": "sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0" + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1475,14 +1478,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.11.0.tgz", - "integrity": "sha512-ItiMfJS6pQU0NIKAaybBKkuVzo6IdnAhPFZA/2Mba/uBjuPQPet/8+zh5GtLHwmuFRShZx+8lhIs7/QeDHflOg==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.12.2.tgz", + "integrity": "sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.11.0", - "@typescript-eslint/utils": "8.11.0", + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/utils": "8.12.2", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1500,9 +1503,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.11.0.tgz", - "integrity": "sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.12.2.tgz", + "integrity": "sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==", "dev": true, "license": "MIT", "engines": { @@ -1514,14 +1517,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.11.0.tgz", - "integrity": "sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.12.2.tgz", + "integrity": "sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -1543,16 +1546,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.11.0.tgz", - "integrity": "sha512-CYiX6WZcbXNJV7UNB4PLDIBtSdRmRI/nb0FMyqHPTQD1rMjA0foPLaPUV39C/MxkTd/QKSeX+Gb34PPsDVC35g==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.12.2.tgz", + "integrity": "sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.11.0", - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/typescript-estree": "8.11.0" + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1566,13 +1569,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.11.0.tgz", - "integrity": "sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.12.2.tgz", + "integrity": "sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.11.0", + "@typescript-eslint/types": "8.12.2", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -1584,21 +1587,21 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.3.tgz", - "integrity": "sha512-2OJ3c7UPoFSmBZwqD2VEkUw6A/tzPF0LmW0ZZhhB8PFxuc+9IBG/FaSM+RLEenc7ljzFvGN+G0nGQoZnh7sy2A==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.4.tgz", + "integrity": "sha512-FPKQuJfR6VTfcNMcGpqInmtJuVXFSCd9HQltYncfR01AzXhLucMEtQ5SinPdZxsT5x/5BK7I5qFJ5/ApGCmyTQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^0.2.3", - "debug": "^4.3.6", + "debug": "^4.3.7", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^5.0.6", "istanbul-reports": "^3.1.7", - "magic-string": "^0.30.11", - "magicast": "^0.3.4", + "magic-string": "^0.30.12", + "magicast": "^0.3.5", "std-env": "^3.7.0", "test-exclude": "^7.0.1", "tinyrainbow": "^1.2.0" @@ -1607,8 +1610,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "2.1.3", - "vitest": "2.1.3" + "@vitest/browser": "2.1.4", + "vitest": "2.1.4" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -1617,15 +1620,15 @@ } }, "node_modules/@vitest/expect": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.3.tgz", - "integrity": "sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.4.tgz", + "integrity": "sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.3", - "@vitest/utils": "2.1.3", - "chai": "^5.1.1", + "@vitest/spy": "2.1.4", + "@vitest/utils": "2.1.4", + "chai": "^5.1.2", "tinyrainbow": "^1.2.0" }, "funding": { @@ -1633,22 +1636,21 @@ } }, "node_modules/@vitest/mocker": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.3.tgz", - "integrity": "sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.4.tgz", + "integrity": "sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.3", + "@vitest/spy": "2.1.4", "estree-walker": "^3.0.3", - "magic-string": "^0.30.11" + "magic-string": "^0.30.12" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/spy": "2.1.3", - "msw": "^2.3.5", + "msw": "^2.4.9", "vite": "^5.0.0" }, "peerDependenciesMeta": { @@ -1661,9 +1663,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.3.tgz", - "integrity": "sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.4.tgz", + "integrity": "sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==", "dev": true, "license": "MIT", "dependencies": { @@ -1674,13 +1676,13 @@ } }, "node_modules/@vitest/runner": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.3.tgz", - "integrity": "sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.4.tgz", + "integrity": "sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "2.1.3", + "@vitest/utils": "2.1.4", "pathe": "^1.1.2" }, "funding": { @@ -1688,14 +1690,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.3.tgz", - "integrity": "sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.4.tgz", + "integrity": "sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.3", - "magic-string": "^0.30.11", + "@vitest/pretty-format": "2.1.4", + "magic-string": "^0.30.12", "pathe": "^1.1.2" }, "funding": { @@ -1703,27 +1705,27 @@ } }, "node_modules/@vitest/spy": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.3.tgz", - "integrity": "sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.4.tgz", + "integrity": "sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==", "dev": true, "license": "MIT", "dependencies": { - "tinyspy": "^3.0.0" + "tinyspy": "^3.0.2" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.3.tgz", - "integrity": "sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.4.tgz", + "integrity": "sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.3", - "loupe": "^3.1.1", + "@vitest/pretty-format": "2.1.4", + "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" }, "funding": { @@ -1930,9 +1932,9 @@ ] }, "node_modules/chai": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", - "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", "dev": true, "license": "MIT", "dependencies": { @@ -2082,12 +2084,13 @@ } }, "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -2496,6 +2499,16 @@ "node": ">=0.10.0" } }, + "node_modules/expect-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", + "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3052,22 +3065,24 @@ "dev": true }, "node_modules/magic-string": { - "version": "0.30.11", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", - "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "version": "0.30.12", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", + "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/magicast": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz", - "integrity": "sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/parser": "^7.24.4", - "@babel/types": "^7.24.0", + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" } }, @@ -3141,9 +3156,9 @@ } }, "node_modules/mock-fs": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-5.4.0.tgz", - "integrity": "sha512-3ROPnEMgBOkusBMYQUW2rnT3wZwsgfOKzJDLvx/TZ7FL1WmWvwSwn3j4aDR5fLDGtgcc1WF0Z1y0di7c9L4FKw==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-5.4.1.tgz", + "integrity": "sha512-sz/Q8K1gXXXHR+qr0GZg2ysxCRr323kuN10O7CtQjraJsFDJ4SJ+0I5MzALz7aRp9lHk8Cc/YdsT95h9Ka1aFw==", "dev": true, "license": "MIT", "engines": { @@ -3151,10 +3166,11 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.7", @@ -3971,17 +3987,18 @@ "license": "MIT" }, "node_modules/tinyexec": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.0.tgz", - "integrity": "sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", + "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", "dev": true, "license": "MIT" }, "node_modules/tinypool": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.0.tgz", - "integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz", + "integrity": "sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==", "dev": true, + "license": "MIT", "engines": { "node": "^18.0.0 || >=20.0.0" } @@ -4005,15 +4022,6 @@ "node": ">=14.0.0" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4206,14 +4214,14 @@ } }, "node_modules/vite-node": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.3.tgz", - "integrity": "sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.4.tgz", + "integrity": "sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==", "dev": true, "license": "MIT", "dependencies": { "cac": "^6.7.14", - "debug": "^4.3.6", + "debug": "^4.3.7", "pathe": "^1.1.2", "vite": "^5.0.0" }, @@ -4248,30 +4256,31 @@ } }, "node_modules/vitest": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.3.tgz", - "integrity": "sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.4.tgz", + "integrity": "sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "2.1.3", - "@vitest/mocker": "2.1.3", - "@vitest/pretty-format": "^2.1.3", - "@vitest/runner": "2.1.3", - "@vitest/snapshot": "2.1.3", - "@vitest/spy": "2.1.3", - "@vitest/utils": "2.1.3", - "chai": "^5.1.1", - "debug": "^4.3.6", - "magic-string": "^0.30.11", + "@vitest/expect": "2.1.4", + "@vitest/mocker": "2.1.4", + "@vitest/pretty-format": "^2.1.4", + "@vitest/runner": "2.1.4", + "@vitest/snapshot": "2.1.4", + "@vitest/spy": "2.1.4", + "@vitest/utils": "2.1.4", + "chai": "^5.1.2", + "debug": "^4.3.7", + "expect-type": "^1.1.0", + "magic-string": "^0.30.12", "pathe": "^1.1.2", "std-env": "^3.7.0", "tinybench": "^2.9.0", - "tinyexec": "^0.3.0", - "tinypool": "^1.0.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.1.3", + "vite-node": "2.1.4", "why-is-node-running": "^2.3.0" }, "bin": { @@ -4286,8 +4295,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.3", - "@vitest/ui": "2.1.3", + "@vitest/browser": "2.1.4", + "@vitest/ui": "2.1.4", "happy-dom": "*", "jsdom": "*" }, diff --git a/e2e/package-lock.json b/e2e/package-lock.json index 56344613ba09b..5abf21cb0b4ab 100644 --- a/e2e/package-lock.json +++ b/e2e/package-lock.json @@ -210,19 +210,21 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -319,12 +321,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.2" + "@babel/types": "^7.26.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -334,14 +337,14 @@ } }, "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1186,13 +1189,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.48.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.48.1.tgz", - "integrity": "sha512-s9RtWoxkOLmRJdw3oFvhFbs9OJS0BzrLUc8Hf6l2UdCNd1rqeEyD4BhCJkvzeEoD1FsK4mirsWwGerhVmYKtZg==", + "version": "1.48.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.48.2.tgz", + "integrity": "sha512-54w1xCWfXuax7dz4W2M9uw0gDyh+ti/0K/MxcCUxChFh37kkdxPdfZDw5QBbuPUJHr1CiHJ1hXgSs+GgeQc5Zw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.48.1" + "playwright": "1.48.2" }, "bin": { "playwright": "cli.js" @@ -1202,9 +1205,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", - "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.4.tgz", + "integrity": "sha512-jfUJrFct/hTA0XDM5p/htWKoNNTbDLY0KRwEt6pyOA6k2fmk0WVwl65PdUdJZgzGEHWx+49LilkcSaumQRyNQw==", "cpu": [ "arm" ], @@ -1216,9 +1219,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz", - "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.4.tgz", + "integrity": "sha512-j4nrEO6nHU1nZUuCfRKoCcvh7PIywQPUCBa2UsootTHvTHIoIu2BzueInGJhhvQO/2FTRdNYpf63xsgEqH9IhA==", "cpu": [ "arm64" ], @@ -1230,9 +1233,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz", - "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.4.tgz", + "integrity": "sha512-GmU/QgGtBTeraKyldC7cDVVvAJEOr3dFLKneez/n7BvX57UdhOqDsVwzU7UOnYA7AAOt+Xb26lk79PldDHgMIQ==", "cpu": [ "arm64" ], @@ -1244,9 +1247,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz", - "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.4.tgz", + "integrity": "sha512-N6oDBiZCBKlwYcsEPXGDE4g9RoxZLK6vT98M8111cW7VsVJFpNEqvJeIPfsCzbf0XEakPslh72X0gnlMi4Ddgg==", "cpu": [ "x64" ], @@ -1257,10 +1260,38 @@ "darwin" ] }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.24.4.tgz", + "integrity": "sha512-py5oNShCCjCyjWXCZNrRGRpjWsF0ic8f4ieBNra5buQz0O/U6mMXCpC1LvrHuhJsNPgRt36tSYMidGzZiJF6mw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.24.4.tgz", + "integrity": "sha512-L7VVVW9FCnTTp4i7KrmHeDsDvjB4++KOBENYtNYAiYl96jeBThFfhP6HVxL74v4SiZEVDH/1ILscR5U9S4ms4g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz", - "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.4.tgz", + "integrity": "sha512-10ICosOwYChROdQoQo589N5idQIisxjaFE/PAnX2i0Zr84mY0k9zul1ArH0rnJ/fpgiqfu13TFZR5A5YJLOYZA==", "cpu": [ "arm" ], @@ -1272,9 +1303,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz", - "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.4.tgz", + "integrity": "sha512-ySAfWs69LYC7QhRDZNKqNhz2UKN8LDfbKSMAEtoEI0jitwfAG2iZwVqGACJT+kfYvvz3/JgsLlcBP+WWoKCLcw==", "cpu": [ "arm" ], @@ -1286,9 +1317,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz", - "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.4.tgz", + "integrity": "sha512-uHYJ0HNOI6pGEeZ/5mgm5arNVTI0nLlmrbdph+pGXpC9tFHFDQmDMOEqkmUObRfosJqpU8RliYoGz06qSdtcjg==", "cpu": [ "arm64" ], @@ -1300,9 +1331,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz", - "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.4.tgz", + "integrity": "sha512-38yiWLemQf7aLHDgTg85fh3hW9stJ0Muk7+s6tIkSUOMmi4Xbv5pH/5Bofnsb6spIwD5FJiR+jg71f0CH5OzoA==", "cpu": [ "arm64" ], @@ -1314,9 +1345,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz", - "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.4.tgz", + "integrity": "sha512-q73XUPnkwt9ZNF2xRS4fvneSuaHw2BXuV5rI4cw0fWYVIWIBeDZX7c7FWhFQPNTnE24172K30I+dViWRVD9TwA==", "cpu": [ "ppc64" ], @@ -1328,9 +1359,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz", - "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.4.tgz", + "integrity": "sha512-Aie/TbmQi6UXokJqDZdmTJuZBCU3QBDA8oTKRGtd4ABi/nHgXICulfg1KI6n9/koDsiDbvHAiQO3YAUNa/7BCw==", "cpu": [ "riscv64" ], @@ -1342,9 +1373,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz", - "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.4.tgz", + "integrity": "sha512-P8MPErVO/y8ohWSP9JY7lLQ8+YMHfTI4bAdtCi3pC2hTeqFJco2jYspzOzTUB8hwUWIIu1xwOrJE11nP+0JFAQ==", "cpu": [ "s390x" ], @@ -1356,9 +1387,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz", - "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.4.tgz", + "integrity": "sha512-K03TljaaoPK5FOyNMZAAEmhlyO49LaE4qCsr0lYHUKyb6QacTNF9pnfPpXnFlFD3TXuFbFbz7tJ51FujUXkXYA==", "cpu": [ "x64" ], @@ -1370,9 +1401,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz", - "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.4.tgz", + "integrity": "sha512-VJYl4xSl/wqG2D5xTYncVWW+26ICV4wubwN9Gs5NrqhJtayikwCXzPL8GDsLnaLU3WwhQ8W02IinYSFJfyo34Q==", "cpu": [ "x64" ], @@ -1384,9 +1415,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz", - "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.4.tgz", + "integrity": "sha512-ku2GvtPwQfCqoPFIJCqZ8o7bJcj+Y54cZSr43hHca6jLwAiCbZdBUOrqE6y29QFajNAzzpIOwsckaTFmN6/8TA==", "cpu": [ "arm64" ], @@ -1398,9 +1429,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz", - "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.4.tgz", + "integrity": "sha512-V3nCe+eTt/W6UYNr/wGvO1fLpHUrnlirlypZfKCT1fG6hWfqhPgQV/K/mRBXBpxc0eKLIF18pIOFVPh0mqHjlg==", "cpu": [ "ia32" ], @@ -1412,9 +1443,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", - "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.4.tgz", + "integrity": "sha512-LTw1Dfd0mBIEqUVCxbvTE/LLo+9ZxVC9k99v1v4ahg9Aak6FpqOfNu5kRkeTAn0wphoC4JU7No1/rL+bBCEwhg==", "cpu": [ "x64" ], @@ -1777,17 +1808,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.11.0.tgz", - "integrity": "sha512-KhGn2LjW1PJT2A/GfDpiyOfS4a8xHQv2myUagTM5+zsormOmBlYsnQ6pobJ8XxJmh6hnHwa2Mbe3fPrDJoDhbA==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.12.2.tgz", + "integrity": "sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.11.0", - "@typescript-eslint/type-utils": "8.11.0", - "@typescript-eslint/utils": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0", + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/type-utils": "8.12.2", + "@typescript-eslint/utils": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -1811,16 +1842,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.11.0.tgz", - "integrity": "sha512-lmt73NeHdy1Q/2ul295Qy3uninSqi6wQI18XwSpm8w0ZbQXUpjCAWP1Vlv/obudoBiIjJVjlztjQ+d/Md98Yxg==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz", + "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "8.11.0", - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/typescript-estree": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0", + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "debug": "^4.3.4" }, "engines": { @@ -1840,14 +1871,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.11.0.tgz", - "integrity": "sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz", + "integrity": "sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0" + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1858,14 +1889,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.11.0.tgz", - "integrity": "sha512-ItiMfJS6pQU0NIKAaybBKkuVzo6IdnAhPFZA/2Mba/uBjuPQPet/8+zh5GtLHwmuFRShZx+8lhIs7/QeDHflOg==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.12.2.tgz", + "integrity": "sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.11.0", - "@typescript-eslint/utils": "8.11.0", + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/utils": "8.12.2", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1883,9 +1914,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.11.0.tgz", - "integrity": "sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.12.2.tgz", + "integrity": "sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==", "dev": true, "license": "MIT", "engines": { @@ -1897,14 +1928,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.11.0.tgz", - "integrity": "sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.12.2.tgz", + "integrity": "sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -1952,16 +1983,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.11.0.tgz", - "integrity": "sha512-CYiX6WZcbXNJV7UNB4PLDIBtSdRmRI/nb0FMyqHPTQD1rMjA0foPLaPUV39C/MxkTd/QKSeX+Gb34PPsDVC35g==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.12.2.tgz", + "integrity": "sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.11.0", - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/typescript-estree": "8.11.0" + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1975,13 +2006,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.11.0.tgz", - "integrity": "sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.12.2.tgz", + "integrity": "sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.11.0", + "@typescript-eslint/types": "8.12.2", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -1993,21 +2024,21 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.3.tgz", - "integrity": "sha512-2OJ3c7UPoFSmBZwqD2VEkUw6A/tzPF0LmW0ZZhhB8PFxuc+9IBG/FaSM+RLEenc7ljzFvGN+G0nGQoZnh7sy2A==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.4.tgz", + "integrity": "sha512-FPKQuJfR6VTfcNMcGpqInmtJuVXFSCd9HQltYncfR01AzXhLucMEtQ5SinPdZxsT5x/5BK7I5qFJ5/ApGCmyTQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^0.2.3", - "debug": "^4.3.6", + "debug": "^4.3.7", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^5.0.6", "istanbul-reports": "^3.1.7", - "magic-string": "^0.30.11", - "magicast": "^0.3.4", + "magic-string": "^0.30.12", + "magicast": "^0.3.5", "std-env": "^3.7.0", "test-exclude": "^7.0.1", "tinyrainbow": "^1.2.0" @@ -2016,8 +2047,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "2.1.3", - "vitest": "2.1.3" + "@vitest/browser": "2.1.4", + "vitest": "2.1.4" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -2026,15 +2057,15 @@ } }, "node_modules/@vitest/expect": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.3.tgz", - "integrity": "sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.4.tgz", + "integrity": "sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.3", - "@vitest/utils": "2.1.3", - "chai": "^5.1.1", + "@vitest/spy": "2.1.4", + "@vitest/utils": "2.1.4", + "chai": "^5.1.2", "tinyrainbow": "^1.2.0" }, "funding": { @@ -2042,22 +2073,21 @@ } }, "node_modules/@vitest/mocker": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.3.tgz", - "integrity": "sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.4.tgz", + "integrity": "sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.3", + "@vitest/spy": "2.1.4", "estree-walker": "^3.0.3", - "magic-string": "^0.30.11" + "magic-string": "^0.30.12" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/spy": "2.1.3", - "msw": "^2.3.5", + "msw": "^2.4.9", "vite": "^5.0.0" }, "peerDependenciesMeta": { @@ -2070,9 +2100,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.3.tgz", - "integrity": "sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.4.tgz", + "integrity": "sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==", "dev": true, "license": "MIT", "dependencies": { @@ -2083,13 +2113,13 @@ } }, "node_modules/@vitest/runner": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.3.tgz", - "integrity": "sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.4.tgz", + "integrity": "sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "2.1.3", + "@vitest/utils": "2.1.4", "pathe": "^1.1.2" }, "funding": { @@ -2097,14 +2127,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.3.tgz", - "integrity": "sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.4.tgz", + "integrity": "sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.3", - "magic-string": "^0.30.11", + "@vitest/pretty-format": "2.1.4", + "magic-string": "^0.30.12", "pathe": "^1.1.2" }, "funding": { @@ -2112,27 +2142,27 @@ } }, "node_modules/@vitest/spy": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.3.tgz", - "integrity": "sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.4.tgz", + "integrity": "sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==", "dev": true, "license": "MIT", "dependencies": { - "tinyspy": "^3.0.0" + "tinyspy": "^3.0.2" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.3.tgz", - "integrity": "sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.4.tgz", + "integrity": "sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.3", - "loupe": "^3.1.1", + "@vitest/pretty-format": "2.1.4", + "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" }, "funding": { @@ -2479,9 +2509,9 @@ ] }, "node_modules/chai": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", - "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", "dev": true, "license": "MIT", "dependencies": { @@ -3333,6 +3363,16 @@ "!win32" ] }, + "node_modules/expect-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", + "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4414,22 +4454,24 @@ } }, "node_modules/magic-string": { - "version": "0.30.11", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", - "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "version": "0.30.12", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", + "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/magicast": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz", - "integrity": "sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/parser": "^7.24.4", - "@babel/types": "^7.24.0", + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" } }, @@ -5165,13 +5207,13 @@ } }, "node_modules/playwright": { - "version": "1.48.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.48.1.tgz", - "integrity": "sha512-j8CiHW/V6HxmbntOfyB4+T/uk08tBy6ph0MpBXwuoofkSnLmlfdYNNkFTYD6ofzzlSqLA1fwH4vwvVFvJgLN0w==", + "version": "1.48.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.48.2.tgz", + "integrity": "sha512-NjYvYgp4BPmiwfe31j4gHLa3J7bD2WiBz8Lk2RoSsmX38SVIARZ18VYjxLjAcDsAhA+F4iSEXTSGgjua0rrlgQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.48.1" + "playwright-core": "1.48.2" }, "bin": { "playwright": "cli.js" @@ -5184,9 +5226,9 @@ } }, "node_modules/playwright-core": { - "version": "1.48.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.48.1.tgz", - "integrity": "sha512-Yw/t4VAFX/bBr1OzwCuOMZkY1Cnb4z/doAFSwf4huqAGWmf9eMNjmK7NiOljCdLmxeRYcGPPmcDgU0zOlzP0YA==", + "version": "1.48.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.48.2.tgz", + "integrity": "sha512-sjjw+qrLFlriJo64du+EK0kJgZzoQPsabGF4lBvsid+3CNIZIYLgnMj9V6JY5VhM2Peh20DJWIVpVljLLnlawA==", "dev": true, "license": "Apache-2.0", "bin": { @@ -5635,9 +5677,9 @@ } }, "node_modules/rollup": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", - "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.4.tgz", + "integrity": "sha512-vGorVWIsWfX3xbcyAS+I047kFKapHYivmkaT63Smj77XwvLSJos6M1xGqZnBPFQFBRZDOcG1QnYEIxAvTr/HjA==", "dev": true, "license": "MIT", "dependencies": { @@ -5651,22 +5693,24 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.24.0", - "@rollup/rollup-android-arm64": "4.24.0", - "@rollup/rollup-darwin-arm64": "4.24.0", - "@rollup/rollup-darwin-x64": "4.24.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.24.0", - "@rollup/rollup-linux-arm-musleabihf": "4.24.0", - "@rollup/rollup-linux-arm64-gnu": "4.24.0", - "@rollup/rollup-linux-arm64-musl": "4.24.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0", - "@rollup/rollup-linux-riscv64-gnu": "4.24.0", - "@rollup/rollup-linux-s390x-gnu": "4.24.0", - "@rollup/rollup-linux-x64-gnu": "4.24.0", - "@rollup/rollup-linux-x64-musl": "4.24.0", - "@rollup/rollup-win32-arm64-msvc": "4.24.0", - "@rollup/rollup-win32-ia32-msvc": "4.24.0", - "@rollup/rollup-win32-x64-msvc": "4.24.0", + "@rollup/rollup-android-arm-eabi": "4.24.4", + "@rollup/rollup-android-arm64": "4.24.4", + "@rollup/rollup-darwin-arm64": "4.24.4", + "@rollup/rollup-darwin-x64": "4.24.4", + "@rollup/rollup-freebsd-arm64": "4.24.4", + "@rollup/rollup-freebsd-x64": "4.24.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.24.4", + "@rollup/rollup-linux-arm-musleabihf": "4.24.4", + "@rollup/rollup-linux-arm64-gnu": "4.24.4", + "@rollup/rollup-linux-arm64-musl": "4.24.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.24.4", + "@rollup/rollup-linux-riscv64-gnu": "4.24.4", + "@rollup/rollup-linux-s390x-gnu": "4.24.4", + "@rollup/rollup-linux-x64-gnu": "4.24.4", + "@rollup/rollup-linux-x64-musl": "4.24.4", + "@rollup/rollup-win32-arm64-msvc": "4.24.4", + "@rollup/rollup-win32-ia32-msvc": "4.24.4", + "@rollup/rollup-win32-x64-msvc": "4.24.4", "fsevents": "~2.3.2" } }, @@ -6180,17 +6224,18 @@ "license": "MIT" }, "node_modules/tinyexec": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.0.tgz", - "integrity": "sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", + "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", "dev": true, "license": "MIT" }, "node_modules/tinypool": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.0.tgz", - "integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz", + "integrity": "sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==", "dev": true, + "license": "MIT", "engines": { "node": "^18.0.0 || >=20.0.0" } @@ -6214,15 +6259,6 @@ "node": ">=14.0.0" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -6412,9 +6448,9 @@ } }, "node_modules/vite": { - "version": "5.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.9.tgz", - "integrity": "sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg==", + "version": "5.4.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz", + "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6472,14 +6508,14 @@ } }, "node_modules/vite-node": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.3.tgz", - "integrity": "sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.4.tgz", + "integrity": "sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==", "dev": true, "license": "MIT", "dependencies": { "cac": "^6.7.14", - "debug": "^4.3.6", + "debug": "^4.3.7", "pathe": "^1.1.2", "vite": "^5.0.0" }, @@ -6509,30 +6545,31 @@ } }, "node_modules/vitest": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.3.tgz", - "integrity": "sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.4.tgz", + "integrity": "sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "2.1.3", - "@vitest/mocker": "2.1.3", - "@vitest/pretty-format": "^2.1.3", - "@vitest/runner": "2.1.3", - "@vitest/snapshot": "2.1.3", - "@vitest/spy": "2.1.3", - "@vitest/utils": "2.1.3", - "chai": "^5.1.1", - "debug": "^4.3.6", - "magic-string": "^0.30.11", + "@vitest/expect": "2.1.4", + "@vitest/mocker": "2.1.4", + "@vitest/pretty-format": "^2.1.4", + "@vitest/runner": "2.1.4", + "@vitest/snapshot": "2.1.4", + "@vitest/spy": "2.1.4", + "@vitest/utils": "2.1.4", + "chai": "^5.1.2", + "debug": "^4.3.7", + "expect-type": "^1.1.0", + "magic-string": "^0.30.12", "pathe": "^1.1.2", "std-env": "^3.7.0", "tinybench": "^2.9.0", - "tinyexec": "^0.3.0", - "tinypool": "^1.0.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.1.3", + "vite-node": "2.1.4", "why-is-node-running": "^2.3.0" }, "bin": { @@ -6547,8 +6584,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.3", - "@vitest/ui": "2.1.3", + "@vitest/browser": "2.1.4", + "@vitest/ui": "2.1.4", "happy-dom": "*", "jsdom": "*" }, diff --git a/server/package-lock.json b/server/package-lock.json index 951968d65727f..ec6c53b07255b 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -23,7 +23,7 @@ "@opentelemetry/context-async-hooks": "^1.24.0", "@opentelemetry/exporter-prometheus": "^0.54.0", "@opentelemetry/sdk-node": "^0.54.0", - "@react-email/components": "^0.0.25", + "@react-email/components": "^0.0.26", "@socket.io/redis-adapter": "^8.3.0", "archiver": "^7.0.0", "async-lock": "^1.4.0", @@ -479,17 +479,17 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz", - "integrity": "sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz", - "integrity": "sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "engines": { "node": ">=6.9.0" } @@ -667,13 +667,12 @@ } }, "node_modules/@babel/types": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz", - "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "dependencies": { - "@babel/helper-string-parser": "^7.24.6", - "@babel/helper-validator-identifier": "^7.24.6", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1992,11 +1991,11 @@ ] }, "node_modules/@nestjs/bull-shared": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@nestjs/bull-shared/-/bull-shared-10.2.1.tgz", - "integrity": "sha512-zvnTvSq6OJ92omcsFUwaUmPbM3PRgWkIusHPB5TE3IFS7nNdM3OwF+kfe56sgKjMtQQMe/56lok0S04OtPMX5Q==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@nestjs/bull-shared/-/bull-shared-10.2.2.tgz", + "integrity": "sha512-bMIEILYYovQWfdz6fCSTgqb/zuKyGmNSc7guB56MiZVW84JloUHb8330nNh3VWaamJKGtUzawbEoG2VR3uVeOg==", "dependencies": { - "tslib": "2.6.3" + "tslib": "2.8.0" }, "peerDependencies": { "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", @@ -2004,12 +2003,12 @@ } }, "node_modules/@nestjs/bullmq": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@nestjs/bullmq/-/bullmq-10.2.1.tgz", - "integrity": "sha512-nDR0hDabmtXt5gsb5R786BJsGIJoWh/79sVmRETXf4S45+fvdqG1XkCKAeHF9TO9USodw9m+XBNKysTnkY41gw==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@nestjs/bullmq/-/bullmq-10.2.2.tgz", + "integrity": "sha512-1RXhR7+XK6uXaw9uNH5hP9bcW5Vzkpc4lX7t7sUC23N9XH2CMH6uUm0I14T5KkvMKkj0VXj0GY+Ulh3pCtdwbA==", "dependencies": { - "@nestjs/bull-shared": "^10.2.1", - "tslib": "2.6.3" + "@nestjs/bull-shared": "^10.2.2", + "tslib": "2.8.0" }, "peerDependencies": { "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", @@ -2224,51 +2223,6 @@ "rxjs": "^7.1.0" } }, - "node_modules/@nestjs/platform-socket.io/node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@nestjs/platform-socket.io/node_modules/engine.io": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", - "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", - "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.7.2", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.2.1", - "ws": "~8.17.1" - }, - "engines": { - "node": ">=10.2.0" - } - }, - "node_modules/@nestjs/platform-socket.io/node_modules/socket.io": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz", - "integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==", - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "cors": "~2.8.5", - "debug": "~4.3.2", - "engine.io": "~6.6.0", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.4" - }, - "engines": { - "node": ">=10.2.0" - } - }, "node_modules/@nestjs/platform-socket.io/node_modules/tslib": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", @@ -2300,13 +2254,13 @@ } }, "node_modules/@nestjs/schematics": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.2.2.tgz", - "integrity": "sha512-D4pJ46E8llCA7WPr3cV6sfRqDlvnTjQWnF1fLyKYD3Ldl+KPtlLyIcxaqlLTB0YR9ItKNKIZTJzUehRxR7UUsQ==", + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.2.3.tgz", + "integrity": "sha512-4e8gxaCk7DhBxVUly2PjYL4xC2ifDFexCqq1/u4TtivLGXotVk0wHdYuPYe1tHTHuR1lsOkRbfOCpkdTnigLVg==", "dev": true, "dependencies": { - "@angular-devkit/core": "17.3.10", - "@angular-devkit/schematics": "17.3.10", + "@angular-devkit/core": "17.3.11", + "@angular-devkit/schematics": "17.3.11", "comment-json": "4.2.5", "jsonc-parser": "3.3.1", "pluralize": "8.0.0" @@ -2316,9 +2270,9 @@ } }, "node_modules/@nestjs/schematics/node_modules/@angular-devkit/core": { - "version": "17.3.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.10.tgz", - "integrity": "sha512-czdl54yxU5DOAGy/uUPNjJruoBDTgwi/V+eOgLNybYhgrc+TsY0f7uJ11yEk/pz5sCov7xIiS7RdRv96waS7vg==", + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.11.tgz", + "integrity": "sha512-vTNDYNsLIWpYk2I969LMQFH29GTsLzxNk/0cLw5q56ARF0v5sIWfHYwGTS88jdDqIpuuettcSczbxeA7EuAmqQ==", "dev": true, "dependencies": { "ajv": "8.12.0", @@ -2349,12 +2303,12 @@ "dev": true }, "node_modules/@nestjs/schematics/node_modules/@angular-devkit/schematics": { - "version": "17.3.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.10.tgz", - "integrity": "sha512-FHcNa1ktYRd0SKExCsNJpR75RffsyuPIV8kvBXzXnLHmXMqvl25G2te3yYJ9yYqy9OLy/58HZznZTxWRyUdHOg==", + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.11.tgz", + "integrity": "sha512-I5wviiIqiFwar9Pdk30Lujk8FczEEc18i22A5c6Z9lbmhPQdTroDnEQdsfXjy404wPe8H62s0I15o4pmMGfTYQ==", "dev": true, "dependencies": { - "@angular-devkit/core": "17.3.10", + "@angular-devkit/core": "17.3.11", "jsonc-parser": "3.2.1", "magic-string": "0.30.8", "ora": "5.4.1", @@ -2498,14 +2452,14 @@ "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" }, "node_modules/@next/env": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz", - "integrity": "sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==" + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.10.tgz", + "integrity": "sha512-dZIu93Bf5LUtluBXIv4woQw2cZVZ2DJTjax5/5DOs3lzEOeKLy7GxRSr4caK9/SCPdaW6bCgpye6+n4Dh9oJPw==" }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz", - "integrity": "sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.10.tgz", + "integrity": "sha512-V3z10NV+cvMAfxQUMhKgfQnPbjw+Ew3cnr64b0lr8MDiBJs3eLnM6RpGC46nhfMZsiXgQngCJKWGTC/yDcgrDQ==", "cpu": [ "arm64" ], @@ -2518,9 +2472,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz", - "integrity": "sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.10.tgz", + "integrity": "sha512-Y0TC+FXbFUQ2MQgimJ/7Ina2mXIKhE7F+GUe1SgnzRmwFY3hX2z8nyVCxE82I2RicspdkZnSWMn4oTjIKz4uzA==", "cpu": [ "x64" ], @@ -2533,9 +2487,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz", - "integrity": "sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.10.tgz", + "integrity": "sha512-ZfQ7yOy5zyskSj9rFpa0Yd7gkrBnJTkYVSya95hX3zeBG9E55Z6OTNPn1j2BTFWvOVVj65C3T+qsjOyVI9DQpA==", "cpu": [ "arm64" ], @@ -2548,9 +2502,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz", - "integrity": "sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.10.tgz", + "integrity": "sha512-n2i5o3y2jpBfXFRxDREr342BGIQCJbdAUi/K4q6Env3aSx8erM9VuKXHw5KNROK9ejFSPf0LhoSkU/ZiNdacpQ==", "cpu": [ "arm64" ], @@ -2563,9 +2517,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz", - "integrity": "sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.10.tgz", + "integrity": "sha512-GXvajAWh2woTT0GKEDlkVhFNxhJS/XdDmrVHrPOA83pLzlGPQnixqxD8u3bBB9oATBKB//5e4vpACnx5Vaxdqg==", "cpu": [ "x64" ], @@ -2578,9 +2532,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz", - "integrity": "sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.10.tgz", + "integrity": "sha512-opFFN5B0SnO+HTz4Wq4HaylXGFV+iHrVxd3YvREUX9K+xfc4ePbRrxqOuPOFjtSuiVouwe6uLeDtabjEIbkmDA==", "cpu": [ "x64" ], @@ -2593,9 +2547,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz", - "integrity": "sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.10.tgz", + "integrity": "sha512-9NUzZuR8WiXTvv+EiU/MXdcQ1XUvFixbLIMNQiVHuzs7ZIFrJDLJDaOF1KaqttoTujpcxljM/RNAOmw1GhPPQQ==", "cpu": [ "arm64" ], @@ -2608,9 +2562,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz", - "integrity": "sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.10.tgz", + "integrity": "sha512-fr3aEbSd1GeW3YUMBkWAu4hcdjZ6g4NBl1uku4gAn661tcxd1bHs1THWYzdsbTRLcCKLjrDZlNp6j2HTfrw+Bg==", "cpu": [ "ia32" ], @@ -2623,9 +2577,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz", - "integrity": "sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.10.tgz", + "integrity": "sha512-UjeVoRGKNL2zfbcQ6fscmgjBAS/inHBh63mjIlfPg/NG8Yn2ztqylXt5qilYb6hoHIwaU2ogHknHWWmahJjgZQ==", "cpu": [ "x64" ], @@ -4012,9 +3966,9 @@ } }, "node_modules/@react-email/button": { - "version": "0.0.17", - "resolved": "https://registry.npmjs.org/@react-email/button/-/button-0.0.17.tgz", - "integrity": "sha512-ioHdsk+BpGS/PqjU6JS7tUrVy9yvbUx92Z+Cem2+MbYp55oEwQ9VHf7u4f5NoM0gdhfKSehBwRdYlHt/frEMcg==", + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@react-email/button/-/button-0.0.18.tgz", + "integrity": "sha512-uNUnpeDzz1o9HAky47JSTsUN/Ih0A3Az165AAOgAy8XOVzQJPrltUBRzHkScSVJTwRqKLASkie1yZbtNGIcRdA==", "engines": { "node": ">=18.0.0" }, @@ -4059,12 +4013,12 @@ } }, "node_modules/@react-email/components": { - "version": "0.0.25", - "resolved": "https://registry.npmjs.org/@react-email/components/-/components-0.0.25.tgz", - "integrity": "sha512-lnfVVrThEcET5NPoeaXvrz9UxtWpGRcut2a07dLbyKgNbP7vj/cXTI5TuHtanCvhCddFpMDnElNRghDOfPzwUg==", + "version": "0.0.26", + "resolved": "https://registry.npmjs.org/@react-email/components/-/components-0.0.26.tgz", + "integrity": "sha512-FqxCGnQiI4zztEBAXPfjovIQ9e1l7NJNMgE8hSaH7slWySFn/PpPRQFYpxyCFNr9DqPVHtKYtpo8xvUYx2LdTg==", "dependencies": { "@react-email/body": "0.0.10", - "@react-email/button": "0.0.17", + "@react-email/button": "0.0.18", "@react-email/code-block": "0.0.9", "@react-email/code-inline": "0.0.4", "@react-email/column": "0.0.12", @@ -4075,13 +4029,13 @@ "@react-email/hr": "0.0.10", "@react-email/html": "0.0.10", "@react-email/img": "0.0.10", - "@react-email/link": "0.0.10", + "@react-email/link": "0.0.11", "@react-email/markdown": "0.0.12", "@react-email/preview": "0.0.11", - "@react-email/render": "1.0.1", - "@react-email/row": "0.0.10", - "@react-email/section": "0.0.14", - "@react-email/tailwind": "0.1.0", + "@react-email/render": "1.0.2", + "@react-email/row": "0.0.11", + "@react-email/section": "0.0.15", + "@react-email/tailwind": "1.0.0", "@react-email/text": "0.0.10" }, "engines": { @@ -4166,9 +4120,9 @@ } }, "node_modules/@react-email/link": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/@react-email/link/-/link-0.0.10.tgz", - "integrity": "sha512-tva3wvAWSR10lMJa9fVA09yRn7pbEki0ZZpHE6GD1jKbFhmzt38VgLO9B797/prqoDZdAr4rVK7LJFcdPx3GwA==", + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@react-email/link/-/link-0.0.11.tgz", + "integrity": "sha512-o1/BgPn2Fi+bN4Nh+P64t4tulaOyPhkBNSpNmiYL1Ar+ilw8q0BmUAqM+lvHy8Qr/4K7BjkgFoc4GoYkoEjOig==", "engines": { "node": ">=18.0.0" }, @@ -4202,9 +4156,9 @@ } }, "node_modules/@react-email/render": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@react-email/render/-/render-1.0.1.tgz", - "integrity": "sha512-W3gTrcmLOVYnG80QuUp22ReIT/xfLsVJ+n7ghSlG2BITB8evNABn1AO2rGQoXuK84zKtDAlxCdm3hRyIpZdGSA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@react-email/render/-/render-1.0.2.tgz", + "integrity": "sha512-q82eBd39TepzA/xjlm8szqJlrQk/gh7mgtxXMGlJ4dcdx89go1m9YBDpZY98SFy+2r2KAOd5A1mxvUbsPwoATg==", "dependencies": { "html-to-text": "9.0.5", "js-beautify": "^1.14.11", @@ -4219,9 +4173,9 @@ } }, "node_modules/@react-email/row": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/@react-email/row/-/row-0.0.10.tgz", - "integrity": "sha512-jPyEhG3gsLX+Eb9U+A30fh0gK6hXJwF4ghJ+ZtFQtlKAKqHX+eCpWlqB3Xschd/ARJLod8WAswg0FB+JD9d0/A==", + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@react-email/row/-/row-0.0.11.tgz", + "integrity": "sha512-ra09h7BMoGa14ds3vh7KVuj1N3astTstEC1YbMdCiHcx/nxylglNaT7qJXU74ZTzyHiGabyiNuyabTS+HLoMCA==", "engines": { "node": ">=18.0.0" }, @@ -4230,9 +4184,9 @@ } }, "node_modules/@react-email/section": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/@react-email/section/-/section-0.0.14.tgz", - "integrity": "sha512-+fYWLb4tPU1A/+GE5J1+SEMA7/wR3V30lQ+OR9t2kAJqNrARDbMx0bLnYnR1QL5TiFRz0pCF05SQUobk6gHEDQ==", + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/@react-email/section/-/section-0.0.15.tgz", + "integrity": "sha512-xfM3Qy5eU7fbkwvktlTeQgad7uo+1Z7YVh1aowSZaRBvKbkEXgoH/XssRYQmQL8ZrZGXbEJMujwtf4fsQL6vrg==", "engines": { "node": ">=18.0.0" }, @@ -4241,9 +4195,9 @@ } }, "node_modules/@react-email/tailwind": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@react-email/tailwind/-/tailwind-0.1.0.tgz", - "integrity": "sha512-qysVUEY+M3SKUvu35XDpzn7yokhqFOT3tPU6Mj/pgc62TL5tQFj6msEbBtwoKs2qO3WZvai0DIHdLhaOxBQSow==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@react-email/tailwind/-/tailwind-1.0.0.tgz", + "integrity": "sha512-LV0SflR0aI5Sjxyp8upyPL8Ctwj+7aqwTgCDO9yZuOI6KpXbBGaYz8bSofe8oaVc/BmymZ5O3+/7FjQexbW+Yg==", "engines": { "node": ">=18.0.0" }, @@ -4567,9 +4521,9 @@ "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==" }, "node_modules/@swc/core": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.39.tgz", - "integrity": "sha512-jns6VFeOT49uoTKLWIEfiQqJAlyqldNAt80kAr8f7a5YjX0zgnG3RBiLMpksx4Ka4SlK4O6TJ/lumIM3Trp82g==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.42.tgz", + "integrity": "sha512-iQrRk3SKndQZ4ptJv1rzeQSiCYQIhMjiO97QXOlCcCoaazOLKPnLnXzU4Kv0FuBFyYfG2FE94BoR0XI2BN02qw==", "devOptional": true, "hasInstallScript": true, "dependencies": { @@ -4584,16 +4538,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.7.39", - "@swc/core-darwin-x64": "1.7.39", - "@swc/core-linux-arm-gnueabihf": "1.7.39", - "@swc/core-linux-arm64-gnu": "1.7.39", - "@swc/core-linux-arm64-musl": "1.7.39", - "@swc/core-linux-x64-gnu": "1.7.39", - "@swc/core-linux-x64-musl": "1.7.39", - "@swc/core-win32-arm64-msvc": "1.7.39", - "@swc/core-win32-ia32-msvc": "1.7.39", - "@swc/core-win32-x64-msvc": "1.7.39" + "@swc/core-darwin-arm64": "1.7.42", + "@swc/core-darwin-x64": "1.7.42", + "@swc/core-linux-arm-gnueabihf": "1.7.42", + "@swc/core-linux-arm64-gnu": "1.7.42", + "@swc/core-linux-arm64-musl": "1.7.42", + "@swc/core-linux-x64-gnu": "1.7.42", + "@swc/core-linux-x64-musl": "1.7.42", + "@swc/core-win32-arm64-msvc": "1.7.42", + "@swc/core-win32-ia32-msvc": "1.7.42", + "@swc/core-win32-x64-msvc": "1.7.42" }, "peerDependencies": { "@swc/helpers": "*" @@ -4605,9 +4559,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.39.tgz", - "integrity": "sha512-o2nbEL6scMBMCTvY9OnbyVXtepLuNbdblV9oNJEFia5v5eGj9WMrnRQiylH3Wp/G2NYkW7V1/ZVW+kfvIeYe9A==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.42.tgz", + "integrity": "sha512-fWhaCs2+8GDRIcjExVDEIfbptVrxDqG8oHkESnXgymmvqTWzWei5SOnPNMS8Q+MYsn/b++Y2bDxkcwmq35Bvxg==", "cpu": [ "arm64" ], @@ -4621,9 +4575,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.39.tgz", - "integrity": "sha512-qMlv3XPgtPi/Fe11VhiPDHSLiYYk2dFYl747oGsHZPq+6tIdDQjIhijXPcsUHIXYDyG7lNpODPL8cP/X1sc9MA==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.42.tgz", + "integrity": "sha512-ZaVHD2bijrlkCyD7NDzLmSK849Jgcx+6DdL4x1dScoz1slJ8GTvLtEu0JOUaaScQwA+cVlhmrmlmi9ssjbRLGQ==", "cpu": [ "x64" ], @@ -4637,9 +4591,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.39.tgz", - "integrity": "sha512-NP+JIkBs1ZKnpa3Lk2W1kBJMwHfNOxCUJXuTa2ckjFsuZ8OUu2gwdeLFkTHbR43dxGwH5UzSmuGocXeMowra/Q==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.42.tgz", + "integrity": "sha512-iF0BJj7hVTbY/vmbvyzVTh/0W80+Q4fbOYschdUM3Bsud39TA+lSaPOefOHywkNH58EQ1z3EAxYcJOWNES7GFQ==", "cpu": [ "arm" ], @@ -4653,9 +4607,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.39.tgz", - "integrity": "sha512-cPc+/HehyHyHcvAsk3ML/9wYcpWVIWax3YBaA+ScecJpSE04l/oBHPfdqKUPslqZ+Gcw0OWnIBGJT/fBZW2ayw==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.42.tgz", + "integrity": "sha512-xGu8j+DOLYTLkVmsfZPJbNPW1EkiWgSucT0nOlz77bLxImukt/0+HVm2hOwHSKuArQ8C3cjahAMY3b/s4VH2ww==", "cpu": [ "arm64" ], @@ -4669,9 +4623,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.39.tgz", - "integrity": "sha512-8RxgBC6ubFem66bk9XJ0vclu3exJ6eD7x7CwDhp5AD/tulZslTYXM7oNPjEtje3xxabXuj/bEUMNvHZhQRFdqA==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.42.tgz", + "integrity": "sha512-qtW3JNO7i1yHEko59xxz+jY38+tYmB96JGzj6XzygMbYJYZDYbrOpXQvKbMGNG3YeTDan7Fp2jD0dlKf7NgDPA==", "cpu": [ "arm64" ], @@ -4685,9 +4639,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.39.tgz", - "integrity": "sha512-3gtCPEJuXLQEolo9xsXtuPDocmXQx12vewEyFFSMSjOfakuPOBmOQMa0sVL8Wwius8C1eZVeD1fgk0omMqeC+Q==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.42.tgz", + "integrity": "sha512-F9WY1TN+hhhtiEzZjRQziNLt36M5YprMeOBHjsLVNqwgflzleSI7ulgnlQECS8c8zESaXj3ksGduAoJYtPC1cA==", "cpu": [ "x64" ], @@ -4701,9 +4655,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.39.tgz", - "integrity": "sha512-mg39pW5x/eqqpZDdtjZJxrUvQNSvJF4O8wCl37fbuFUqOtXs4TxsjZ0aolt876HXxxhsQl7rS+N4KioEMSgTZw==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.42.tgz", + "integrity": "sha512-7YMdOaYKLMQ8JGfnmRDwidpLFs/6ka+80zekeM0iCVO48yLrJR36G0QGXzMjKsXI0BPhq+mboZRRENK4JfQnEA==", "cpu": [ "x64" ], @@ -4717,9 +4671,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.39.tgz", - "integrity": "sha512-NZwuS0mNJowH3e9bMttr7B1fB8bW5svW/yyySigv9qmV5VcQRNz1kMlCvrCLYRsa93JnARuiaBI6FazSeG8mpA==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.42.tgz", + "integrity": "sha512-C5CYWaIZEyqPl5W/EwcJ/mLBJFHVoUEa/IwWi0b4q2fCXcSCktQGwKXOQ+d67GneiZoiq0HasgcdMmMpGS9YRQ==", "cpu": [ "arm64" ], @@ -4733,9 +4687,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.39.tgz", - "integrity": "sha512-qFmvv5UExbJPXhhvCVDBnjK5Duqxr048dlVB6ZCgGzbRxuarOlawCzzLK4N172230pzlAWGLgn9CWl3+N6zfHA==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.42.tgz", + "integrity": "sha512-3j47seZ5pO62mbrqvPe1iwhe2BXnM5q7iB+n2xgA38PCGYt0mnaJafqmpCXm/uYZOCMqSNynaoOWCMMZm4sqtA==", "cpu": [ "ia32" ], @@ -4749,9 +4703,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.39.tgz", - "integrity": "sha512-o+5IMqgOtj9+BEOp16atTfBgCogVak9svhBpwsbcJQp67bQbxGYhAPPDW/hZ2rpSSF7UdzbY9wudoX9G4trcuQ==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.42.tgz", + "integrity": "sha512-FXl9MdeUogZLGDcLr6QIRdDVkpG0dkN4MLM4dwQ5kcAk+XfKPrQibX6M2kcfhsCx+jtBqtK7hRFReRXPWJZGbA==", "cpu": [ "x64" ], @@ -4779,9 +4733,9 @@ } }, "node_modules/@swc/types": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.13.tgz", - "integrity": "sha512-JL7eeCk6zWCbiYQg2xQSdLXQJl8Qoc9rXmG2cEKvHe3CKwMHwHGpfOb8frzNLmbycOo6I51qxnLnn9ESf4I20Q==", + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.14.tgz", + "integrity": "sha512-PbSmTiYCN+GMrvfjrMo9bdY+f2COnwbdnoMw7rqU/PI5jXpKjxOGZ0qqZCImxnT81NkNsKnmEpvu+hRXLBeCJg==", "devOptional": true, "dependencies": { "@swc/counter": "^0.1.3" @@ -4940,9 +4894,9 @@ "dev": true }, "node_modules/@types/cors": { - "version": "2.8.14", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.14.tgz", - "integrity": "sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ==", + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "dependencies": { "@types/node": "*" } @@ -5011,9 +4965,9 @@ } }, "node_modules/@types/fluent-ffmpeg": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/@types/fluent-ffmpeg/-/fluent-ffmpeg-2.1.26.tgz", - "integrity": "sha512-0JVF3wdQG+pN0ImwWD0bNgJiKF2OHg/7CDBHw5UIbRTvlnkgGHK6V5doE54ltvhud4o31/dEiHm23CAlxFiUQg==", + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/@types/fluent-ffmpeg/-/fluent-ffmpeg-2.1.27.tgz", + "integrity": "sha512-QiDWjihpUhriISNoBi2hJBRUUmoj/BMTYcfz+F+ZM9hHWBYABFAE6hjP/TbCZC0GWwlpa3FzvHH9RzFeRusZ7A==", "dev": true, "dependencies": { "@types/node": "*" @@ -5053,9 +5007,9 @@ "dev": true }, "node_modules/@types/lodash": { - "version": "4.17.12", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.12.tgz", - "integrity": "sha512-sviUmCE8AYdaF/KIHLDJBQgeYzPBI0vf/17NaYehBJfYD1j6/L95Slh07NlyK2iNyBNaEkb3En2jRt+a8y3xZQ==", + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz", + "integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==", "dev": true }, "node_modules/@types/luxon": { @@ -5356,16 +5310,16 @@ "integrity": "sha512-c/hzNDBh7eRF+KbCf+OoZxKbnkpaK/cKp9iLQWqB7muXtM+MtL9SUUH8vCFcLn6dH1Qm05jiexK0ofWY7TfOhQ==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.11.0.tgz", - "integrity": "sha512-KhGn2LjW1PJT2A/GfDpiyOfS4a8xHQv2myUagTM5+zsormOmBlYsnQ6pobJ8XxJmh6hnHwa2Mbe3fPrDJoDhbA==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.12.2.tgz", + "integrity": "sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.11.0", - "@typescript-eslint/type-utils": "8.11.0", - "@typescript-eslint/utils": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0", + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/type-utils": "8.12.2", + "@typescript-eslint/utils": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -5389,15 +5343,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.11.0.tgz", - "integrity": "sha512-lmt73NeHdy1Q/2ul295Qy3uninSqi6wQI18XwSpm8w0ZbQXUpjCAWP1Vlv/obudoBiIjJVjlztjQ+d/Md98Yxg==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz", + "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.11.0", - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/typescript-estree": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0", + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "debug": "^4.3.4" }, "engines": { @@ -5417,13 +5371,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.11.0.tgz", - "integrity": "sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz", + "integrity": "sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0" + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5434,13 +5388,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.11.0.tgz", - "integrity": "sha512-ItiMfJS6pQU0NIKAaybBKkuVzo6IdnAhPFZA/2Mba/uBjuPQPet/8+zh5GtLHwmuFRShZx+8lhIs7/QeDHflOg==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.12.2.tgz", + "integrity": "sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "8.11.0", - "@typescript-eslint/utils": "8.11.0", + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/utils": "8.12.2", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -5458,9 +5412,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.11.0.tgz", - "integrity": "sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.12.2.tgz", + "integrity": "sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5471,13 +5425,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.11.0.tgz", - "integrity": "sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.12.2.tgz", + "integrity": "sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -5523,15 +5477,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.11.0.tgz", - "integrity": "sha512-CYiX6WZcbXNJV7UNB4PLDIBtSdRmRI/nb0FMyqHPTQD1rMjA0foPLaPUV39C/MxkTd/QKSeX+Gb34PPsDVC35g==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.12.2.tgz", + "integrity": "sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.11.0", - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/typescript-estree": "8.11.0" + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5545,12 +5499,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.11.0.tgz", - "integrity": "sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.12.2.tgz", + "integrity": "sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.11.0", + "@typescript-eslint/types": "8.12.2", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -5562,20 +5516,20 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.3.tgz", - "integrity": "sha512-2OJ3c7UPoFSmBZwqD2VEkUw6A/tzPF0LmW0ZZhhB8PFxuc+9IBG/FaSM+RLEenc7ljzFvGN+G0nGQoZnh7sy2A==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.4.tgz", + "integrity": "sha512-FPKQuJfR6VTfcNMcGpqInmtJuVXFSCd9HQltYncfR01AzXhLucMEtQ5SinPdZxsT5x/5BK7I5qFJ5/ApGCmyTQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^0.2.3", - "debug": "^4.3.6", + "debug": "^4.3.7", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^5.0.6", "istanbul-reports": "^3.1.7", - "magic-string": "^0.30.11", - "magicast": "^0.3.4", + "magic-string": "^0.30.12", + "magicast": "^0.3.5", "std-env": "^3.7.0", "test-exclude": "^7.0.1", "tinyrainbow": "^1.2.0" @@ -5584,8 +5538,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "2.1.3", - "vitest": "2.1.3" + "@vitest/browser": "2.1.4", + "vitest": "2.1.4" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -5603,14 +5557,14 @@ } }, "node_modules/@vitest/expect": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.3.tgz", - "integrity": "sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.4.tgz", + "integrity": "sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==", "dev": true, "dependencies": { - "@vitest/spy": "2.1.3", - "@vitest/utils": "2.1.3", - "chai": "^5.1.1", + "@vitest/spy": "2.1.4", + "@vitest/utils": "2.1.4", + "chai": "^5.1.2", "tinyrainbow": "^1.2.0" }, "funding": { @@ -5618,21 +5572,20 @@ } }, "node_modules/@vitest/mocker": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.3.tgz", - "integrity": "sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.4.tgz", + "integrity": "sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==", "dev": true, "dependencies": { - "@vitest/spy": "2.1.3", + "@vitest/spy": "2.1.4", "estree-walker": "^3.0.3", - "magic-string": "^0.30.11" + "magic-string": "^0.30.12" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/spy": "2.1.3", - "msw": "^2.3.5", + "msw": "^2.4.9", "vite": "^5.0.0" }, "peerDependenciesMeta": { @@ -5645,18 +5598,18 @@ } }, "node_modules/@vitest/mocker/node_modules/magic-string": { - "version": "0.30.11", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", - "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "version": "0.30.12", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", + "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/@vitest/pretty-format": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.3.tgz", - "integrity": "sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.4.tgz", + "integrity": "sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==", "dev": true, "dependencies": { "tinyrainbow": "^1.2.0" @@ -5666,12 +5619,12 @@ } }, "node_modules/@vitest/runner": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.3.tgz", - "integrity": "sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.4.tgz", + "integrity": "sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==", "dev": true, "dependencies": { - "@vitest/utils": "2.1.3", + "@vitest/utils": "2.1.4", "pathe": "^1.1.2" }, "funding": { @@ -5679,13 +5632,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.3.tgz", - "integrity": "sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.4.tgz", + "integrity": "sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==", "dev": true, "dependencies": { - "@vitest/pretty-format": "2.1.3", - "magic-string": "^0.30.11", + "@vitest/pretty-format": "2.1.4", + "magic-string": "^0.30.12", "pathe": "^1.1.2" }, "funding": { @@ -5693,34 +5646,34 @@ } }, "node_modules/@vitest/snapshot/node_modules/magic-string": { - "version": "0.30.11", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", - "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "version": "0.30.12", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", + "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/@vitest/spy": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.3.tgz", - "integrity": "sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.4.tgz", + "integrity": "sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==", "dev": true, "dependencies": { - "tinyspy": "^3.0.0" + "tinyspy": "^3.0.2" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.3.tgz", - "integrity": "sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.4.tgz", + "integrity": "sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==", "dev": true, "dependencies": { - "@vitest/pretty-format": "2.1.3", - "loupe": "^3.1.1", + "@vitest/pretty-format": "2.1.4", + "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" }, "funding": { @@ -6709,9 +6662,9 @@ ] }, "node_modules/chai": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", - "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", "dev": true, "dependencies": { "assertion-error": "^2.0.1", @@ -7146,9 +7099,9 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "engines": { "node": ">= 0.6" } @@ -7165,14 +7118,6 @@ "node": ">= 0.8.0" } }, - "node_modules/cookie-parser/node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", @@ -7751,16 +7696,16 @@ } }, "node_modules/engine.io": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", - "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", + "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", @@ -7771,9 +7716,9 @@ } }, "node_modules/engine.io-parser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", - "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", "engines": { "node": ">=10.0.0" } @@ -8269,6 +8214,15 @@ "!win32" ] }, + "node_modules/expect-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", + "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/express": { "version": "4.21.1", "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", @@ -9929,16 +9883,31 @@ } }, "node_modules/magicast": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz", - "integrity": "sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", "dev": true, "dependencies": { - "@babel/parser": "^7.24.4", - "@babel/types": "^7.24.0", + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" } }, + "node_modules/magicast/node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -10183,9 +10152,9 @@ "dev": true }, "node_modules/mock-fs": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-5.4.0.tgz", - "integrity": "sha512-3ROPnEMgBOkusBMYQUW2rnT3wZwsgfOKzJDLvx/TZ7FL1WmWvwSwn3j4aDR5fLDGtgcc1WF0Z1y0di7c9L4FKw==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-5.4.1.tgz", + "integrity": "sha512-sz/Q8K1gXXXHR+qr0GZg2ysxCRr323kuN10O7CtQjraJsFDJ4SJ+0I5MzALz7aRp9lHk8Cc/YdsT95h9Ka1aFw==", "dev": true, "engines": { "node": ">=12.0.0" @@ -10453,11 +10422,11 @@ } }, "node_modules/next": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/next/-/next-14.2.3.tgz", - "integrity": "sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.10.tgz", + "integrity": "sha512-sDDExXnh33cY3RkS9JuFEKaS4HmlWmDKP1VJioucCG6z5KuA008DPsDZOzi8UfqEk3Ii+2NCQSJrfbEWtZZfww==", "dependencies": { - "@next/env": "14.2.3", + "@next/env": "14.2.10", "@swc/helpers": "0.5.5", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", @@ -10472,15 +10441,15 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.2.3", - "@next/swc-darwin-x64": "14.2.3", - "@next/swc-linux-arm64-gnu": "14.2.3", - "@next/swc-linux-arm64-musl": "14.2.3", - "@next/swc-linux-x64-gnu": "14.2.3", - "@next/swc-linux-x64-musl": "14.2.3", - "@next/swc-win32-arm64-msvc": "14.2.3", - "@next/swc-win32-ia32-msvc": "14.2.3", - "@next/swc-win32-x64-msvc": "14.2.3" + "@next/swc-darwin-arm64": "14.2.10", + "@next/swc-darwin-x64": "14.2.10", + "@next/swc-linux-arm64-gnu": "14.2.10", + "@next/swc-linux-arm64-musl": "14.2.10", + "@next/swc-linux-x64-gnu": "14.2.10", + "@next/swc-linux-x64-musl": "14.2.10", + "@next/swc-win32-arm64-msvc": "14.2.10", + "@next/swc-win32-ia32-msvc": "14.2.10", + "@next/swc-win32-x64-msvc": "14.2.10" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -10578,9 +10547,9 @@ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" }, "node_modules/nodemailer": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.15.tgz", - "integrity": "sha512-AHf04ySLC6CIfuRtRiEYtGEXgRfa6INgWGluDhnxTZhHSKvrBu7lc1VVchQ0d8nPc4cFaZoPq8vkyNoZr0TpGQ==", + "version": "6.9.16", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.16.tgz", + "integrity": "sha512-psAuZdTIRN08HKVd/E8ObdV6NO7NTBY3KsC30F7M4H1OnmLCUNaS56FpYxyb26zWLSyYF9Ozch9KYHhHegsiOQ==", "engines": { "node": ">=6.0.0" } @@ -11660,24 +11629,24 @@ } }, "node_modules/react-email": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/react-email/-/react-email-3.0.1.tgz", - "integrity": "sha512-G4Bkx2ULIScy/0Z8nnWywHt0W1iTkaYCdh9rWNuQ3eVZ6B3ttTUDE9uUy3VNQ8dtQbmG0cpt8+XmImw7mMBW6Q==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/react-email/-/react-email-3.0.2.tgz", + "integrity": "sha512-R7Doynb6NbnDvHx+9dWxkiWN2eaq9hj4MxRdkS94cVD/WDaIzESSLm62GtAAyLJ65xA2ROJydFlcYsDq4hGi4Q==", "dependencies": { "@babel/core": "7.24.5", "@babel/parser": "7.24.5", "chalk": "4.1.2", - "chokidar": "3.6.0", + "chokidar": "^4.0.1", "commander": "11.1.0", "debounce": "2.0.0", "esbuild": "0.19.11", "glob": "10.3.4", "log-symbols": "4.1.0", "mime-types": "2.1.35", - "next": "14.2.3", + "next": "14.2.10", "normalize-path": "3.0.0", "ora": "5.4.1", - "socket.io": "4.7.5" + "socket.io": "4.8.0" }, "bin": { "email": "dist/cli/index.js" @@ -12039,6 +12008,20 @@ "balanced-match": "^1.0.0" } }, + "node_modules/react-email/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/react-email/node_modules/commander": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", @@ -12119,6 +12102,18 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/react-email/node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/react-promise-suspense": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/react-promise-suspense/-/react-promise-suspense-0.3.4.tgz", @@ -13043,15 +13038,15 @@ "integrity": "sha512-YiuPbxpCj4hD9Qs06hGAz/OZhQ0eDuALN0lRWJez0eD/RevzKqGdUx1IOMUnXgpr+sXZLq3g8ERwbAH0bCb8vg==" }, "node_modules/socket.io": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", - "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz", + "integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.5.2", + "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" }, @@ -13830,9 +13825,9 @@ "dev": true }, "node_modules/tinyexec": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.0.tgz", - "integrity": "sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", + "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", "dev": true }, "node_modules/tinypool": { @@ -13873,14 +13868,6 @@ "node": ">=0.6.0" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -14050,9 +14037,9 @@ } }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/tweetnacl": { "version": "0.14.5", @@ -14591,13 +14578,13 @@ } }, "node_modules/vite-node": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.3.tgz", - "integrity": "sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.4.tgz", + "integrity": "sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==", "dev": true, "dependencies": { "cac": "^6.7.14", - "debug": "^4.3.6", + "debug": "^4.3.7", "pathe": "^1.1.2", "vite": "^5.0.0" }, @@ -14631,29 +14618,30 @@ } }, "node_modules/vitest": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.3.tgz", - "integrity": "sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==", - "dev": true, - "dependencies": { - "@vitest/expect": "2.1.3", - "@vitest/mocker": "2.1.3", - "@vitest/pretty-format": "^2.1.3", - "@vitest/runner": "2.1.3", - "@vitest/snapshot": "2.1.3", - "@vitest/spy": "2.1.3", - "@vitest/utils": "2.1.3", - "chai": "^5.1.1", - "debug": "^4.3.6", - "magic-string": "^0.30.11", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.4.tgz", + "integrity": "sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==", + "dev": true, + "dependencies": { + "@vitest/expect": "2.1.4", + "@vitest/mocker": "2.1.4", + "@vitest/pretty-format": "^2.1.4", + "@vitest/runner": "2.1.4", + "@vitest/snapshot": "2.1.4", + "@vitest/spy": "2.1.4", + "@vitest/utils": "2.1.4", + "chai": "^5.1.2", + "debug": "^4.3.7", + "expect-type": "^1.1.0", + "magic-string": "^0.30.12", "pathe": "^1.1.2", "std-env": "^3.7.0", "tinybench": "^2.9.0", - "tinyexec": "^0.3.0", - "tinypool": "^1.0.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.1.3", + "vite-node": "2.1.4", "why-is-node-running": "^2.3.0" }, "bin": { @@ -14668,8 +14656,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.3", - "@vitest/ui": "2.1.3", + "@vitest/browser": "2.1.4", + "@vitest/ui": "2.1.4", "happy-dom": "*", "jsdom": "*" }, @@ -15323,14 +15311,14 @@ } }, "@babel/helper-string-parser": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz", - "integrity": "sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==" + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==" }, "@babel/helper-validator-identifier": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz", - "integrity": "sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==" + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==" }, "@babel/helper-validator-option": { "version": "7.24.6", @@ -15460,13 +15448,12 @@ } }, "@babel/types": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz", - "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "requires": { - "@babel/helper-string-parser": "^7.24.6", - "@babel/helper-validator-identifier": "^7.24.6", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" } }, "@balena/dockerignore": { @@ -16212,20 +16199,20 @@ "optional": true }, "@nestjs/bull-shared": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@nestjs/bull-shared/-/bull-shared-10.2.1.tgz", - "integrity": "sha512-zvnTvSq6OJ92omcsFUwaUmPbM3PRgWkIusHPB5TE3IFS7nNdM3OwF+kfe56sgKjMtQQMe/56lok0S04OtPMX5Q==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@nestjs/bull-shared/-/bull-shared-10.2.2.tgz", + "integrity": "sha512-bMIEILYYovQWfdz6fCSTgqb/zuKyGmNSc7guB56MiZVW84JloUHb8330nNh3VWaamJKGtUzawbEoG2VR3uVeOg==", "requires": { - "tslib": "2.6.3" + "tslib": "2.8.0" } }, "@nestjs/bullmq": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@nestjs/bullmq/-/bullmq-10.2.1.tgz", - "integrity": "sha512-nDR0hDabmtXt5gsb5R786BJsGIJoWh/79sVmRETXf4S45+fvdqG1XkCKAeHF9TO9USodw9m+XBNKysTnkY41gw==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@nestjs/bullmq/-/bullmq-10.2.2.tgz", + "integrity": "sha512-1RXhR7+XK6uXaw9uNH5hP9bcW5Vzkpc4lX7t7sUC23N9XH2CMH6uUm0I14T5KkvMKkj0VXj0GY+Ulh3pCtdwbA==", "requires": { - "@nestjs/bull-shared": "^10.2.1", - "tslib": "2.6.3" + "@nestjs/bull-shared": "^10.2.2", + "tslib": "2.8.0" } }, "@nestjs/cli": { @@ -16342,42 +16329,6 @@ "tslib": "2.7.0" }, "dependencies": { - "cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==" - }, - "engine.io": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", - "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", - "requires": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.7.2", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.2.1", - "ws": "~8.17.1" - } - }, - "socket.io": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz", - "integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==", - "requires": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "cors": "~2.8.5", - "debug": "~4.3.2", - "engine.io": "~6.6.0", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.4" - } - }, "tslib": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", @@ -16402,22 +16353,22 @@ } }, "@nestjs/schematics": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.2.2.tgz", - "integrity": "sha512-D4pJ46E8llCA7WPr3cV6sfRqDlvnTjQWnF1fLyKYD3Ldl+KPtlLyIcxaqlLTB0YR9ItKNKIZTJzUehRxR7UUsQ==", + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.2.3.tgz", + "integrity": "sha512-4e8gxaCk7DhBxVUly2PjYL4xC2ifDFexCqq1/u4TtivLGXotVk0wHdYuPYe1tHTHuR1lsOkRbfOCpkdTnigLVg==", "dev": true, "requires": { - "@angular-devkit/core": "17.3.10", - "@angular-devkit/schematics": "17.3.10", + "@angular-devkit/core": "17.3.11", + "@angular-devkit/schematics": "17.3.11", "comment-json": "4.2.5", "jsonc-parser": "3.3.1", "pluralize": "8.0.0" }, "dependencies": { "@angular-devkit/core": { - "version": "17.3.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.10.tgz", - "integrity": "sha512-czdl54yxU5DOAGy/uUPNjJruoBDTgwi/V+eOgLNybYhgrc+TsY0f7uJ11yEk/pz5sCov7xIiS7RdRv96waS7vg==", + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.11.tgz", + "integrity": "sha512-vTNDYNsLIWpYk2I969LMQFH29GTsLzxNk/0cLw5q56ARF0v5sIWfHYwGTS88jdDqIpuuettcSczbxeA7EuAmqQ==", "dev": true, "requires": { "ajv": "8.12.0", @@ -16437,12 +16388,12 @@ } }, "@angular-devkit/schematics": { - "version": "17.3.10", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.10.tgz", - "integrity": "sha512-FHcNa1ktYRd0SKExCsNJpR75RffsyuPIV8kvBXzXnLHmXMqvl25G2te3yYJ9yYqy9OLy/58HZznZTxWRyUdHOg==", + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.11.tgz", + "integrity": "sha512-I5wviiIqiFwar9Pdk30Lujk8FczEEc18i22A5c6Z9lbmhPQdTroDnEQdsfXjy404wPe8H62s0I15o4pmMGfTYQ==", "dev": true, "requires": { - "@angular-devkit/core": "17.3.10", + "@angular-devkit/core": "17.3.11", "jsonc-parser": "3.2.1", "magic-string": "0.30.8", "ora": "5.4.1", @@ -16527,62 +16478,62 @@ } }, "@next/env": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz", - "integrity": "sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==" + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.10.tgz", + "integrity": "sha512-dZIu93Bf5LUtluBXIv4woQw2cZVZ2DJTjax5/5DOs3lzEOeKLy7GxRSr4caK9/SCPdaW6bCgpye6+n4Dh9oJPw==" }, "@next/swc-darwin-arm64": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz", - "integrity": "sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.10.tgz", + "integrity": "sha512-V3z10NV+cvMAfxQUMhKgfQnPbjw+Ew3cnr64b0lr8MDiBJs3eLnM6RpGC46nhfMZsiXgQngCJKWGTC/yDcgrDQ==", "optional": true }, "@next/swc-darwin-x64": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz", - "integrity": "sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.10.tgz", + "integrity": "sha512-Y0TC+FXbFUQ2MQgimJ/7Ina2mXIKhE7F+GUe1SgnzRmwFY3hX2z8nyVCxE82I2RicspdkZnSWMn4oTjIKz4uzA==", "optional": true }, "@next/swc-linux-arm64-gnu": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz", - "integrity": "sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.10.tgz", + "integrity": "sha512-ZfQ7yOy5zyskSj9rFpa0Yd7gkrBnJTkYVSya95hX3zeBG9E55Z6OTNPn1j2BTFWvOVVj65C3T+qsjOyVI9DQpA==", "optional": true }, "@next/swc-linux-arm64-musl": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz", - "integrity": "sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.10.tgz", + "integrity": "sha512-n2i5o3y2jpBfXFRxDREr342BGIQCJbdAUi/K4q6Env3aSx8erM9VuKXHw5KNROK9ejFSPf0LhoSkU/ZiNdacpQ==", "optional": true }, "@next/swc-linux-x64-gnu": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz", - "integrity": "sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.10.tgz", + "integrity": "sha512-GXvajAWh2woTT0GKEDlkVhFNxhJS/XdDmrVHrPOA83pLzlGPQnixqxD8u3bBB9oATBKB//5e4vpACnx5Vaxdqg==", "optional": true }, "@next/swc-linux-x64-musl": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz", - "integrity": "sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.10.tgz", + "integrity": "sha512-opFFN5B0SnO+HTz4Wq4HaylXGFV+iHrVxd3YvREUX9K+xfc4ePbRrxqOuPOFjtSuiVouwe6uLeDtabjEIbkmDA==", "optional": true }, "@next/swc-win32-arm64-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz", - "integrity": "sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.10.tgz", + "integrity": "sha512-9NUzZuR8WiXTvv+EiU/MXdcQ1XUvFixbLIMNQiVHuzs7ZIFrJDLJDaOF1KaqttoTujpcxljM/RNAOmw1GhPPQQ==", "optional": true }, "@next/swc-win32-ia32-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz", - "integrity": "sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.10.tgz", + "integrity": "sha512-fr3aEbSd1GeW3YUMBkWAu4hcdjZ6g4NBl1uku4gAn661tcxd1bHs1THWYzdsbTRLcCKLjrDZlNp6j2HTfrw+Bg==", "optional": true }, "@next/swc-win32-x64-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz", - "integrity": "sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.10.tgz", + "integrity": "sha512-UjeVoRGKNL2zfbcQ6fscmgjBAS/inHBh63mjIlfPg/NG8Yn2ztqylXt5qilYb6hoHIwaU2ogHknHWWmahJjgZQ==", "optional": true }, "@nodelib/fs.scandir": { @@ -17499,9 +17450,9 @@ "requires": {} }, "@react-email/button": { - "version": "0.0.17", - "resolved": "https://registry.npmjs.org/@react-email/button/-/button-0.0.17.tgz", - "integrity": "sha512-ioHdsk+BpGS/PqjU6JS7tUrVy9yvbUx92Z+Cem2+MbYp55oEwQ9VHf7u4f5NoM0gdhfKSehBwRdYlHt/frEMcg==", + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@react-email/button/-/button-0.0.18.tgz", + "integrity": "sha512-uNUnpeDzz1o9HAky47JSTsUN/Ih0A3Az165AAOgAy8XOVzQJPrltUBRzHkScSVJTwRqKLASkie1yZbtNGIcRdA==", "requires": {} }, "@react-email/code-block": { @@ -17525,12 +17476,12 @@ "requires": {} }, "@react-email/components": { - "version": "0.0.25", - "resolved": "https://registry.npmjs.org/@react-email/components/-/components-0.0.25.tgz", - "integrity": "sha512-lnfVVrThEcET5NPoeaXvrz9UxtWpGRcut2a07dLbyKgNbP7vj/cXTI5TuHtanCvhCddFpMDnElNRghDOfPzwUg==", + "version": "0.0.26", + "resolved": "https://registry.npmjs.org/@react-email/components/-/components-0.0.26.tgz", + "integrity": "sha512-FqxCGnQiI4zztEBAXPfjovIQ9e1l7NJNMgE8hSaH7slWySFn/PpPRQFYpxyCFNr9DqPVHtKYtpo8xvUYx2LdTg==", "requires": { "@react-email/body": "0.0.10", - "@react-email/button": "0.0.17", + "@react-email/button": "0.0.18", "@react-email/code-block": "0.0.9", "@react-email/code-inline": "0.0.4", "@react-email/column": "0.0.12", @@ -17541,13 +17492,13 @@ "@react-email/hr": "0.0.10", "@react-email/html": "0.0.10", "@react-email/img": "0.0.10", - "@react-email/link": "0.0.10", + "@react-email/link": "0.0.11", "@react-email/markdown": "0.0.12", "@react-email/preview": "0.0.11", - "@react-email/render": "1.0.1", - "@react-email/row": "0.0.10", - "@react-email/section": "0.0.14", - "@react-email/tailwind": "0.1.0", + "@react-email/render": "1.0.2", + "@react-email/row": "0.0.11", + "@react-email/section": "0.0.15", + "@react-email/tailwind": "1.0.0", "@react-email/text": "0.0.10" } }, @@ -17594,9 +17545,9 @@ "requires": {} }, "@react-email/link": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/@react-email/link/-/link-0.0.10.tgz", - "integrity": "sha512-tva3wvAWSR10lMJa9fVA09yRn7pbEki0ZZpHE6GD1jKbFhmzt38VgLO9B797/prqoDZdAr4rVK7LJFcdPx3GwA==", + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@react-email/link/-/link-0.0.11.tgz", + "integrity": "sha512-o1/BgPn2Fi+bN4Nh+P64t4tulaOyPhkBNSpNmiYL1Ar+ilw8q0BmUAqM+lvHy8Qr/4K7BjkgFoc4GoYkoEjOig==", "requires": {} }, "@react-email/markdown": { @@ -17614,9 +17565,9 @@ "requires": {} }, "@react-email/render": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@react-email/render/-/render-1.0.1.tgz", - "integrity": "sha512-W3gTrcmLOVYnG80QuUp22ReIT/xfLsVJ+n7ghSlG2BITB8evNABn1AO2rGQoXuK84zKtDAlxCdm3hRyIpZdGSA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@react-email/render/-/render-1.0.2.tgz", + "integrity": "sha512-q82eBd39TepzA/xjlm8szqJlrQk/gh7mgtxXMGlJ4dcdx89go1m9YBDpZY98SFy+2r2KAOd5A1mxvUbsPwoATg==", "requires": { "html-to-text": "9.0.5", "js-beautify": "^1.14.11", @@ -17624,21 +17575,21 @@ } }, "@react-email/row": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/@react-email/row/-/row-0.0.10.tgz", - "integrity": "sha512-jPyEhG3gsLX+Eb9U+A30fh0gK6hXJwF4ghJ+ZtFQtlKAKqHX+eCpWlqB3Xschd/ARJLod8WAswg0FB+JD9d0/A==", + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@react-email/row/-/row-0.0.11.tgz", + "integrity": "sha512-ra09h7BMoGa14ds3vh7KVuj1N3astTstEC1YbMdCiHcx/nxylglNaT7qJXU74ZTzyHiGabyiNuyabTS+HLoMCA==", "requires": {} }, "@react-email/section": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/@react-email/section/-/section-0.0.14.tgz", - "integrity": "sha512-+fYWLb4tPU1A/+GE5J1+SEMA7/wR3V30lQ+OR9t2kAJqNrARDbMx0bLnYnR1QL5TiFRz0pCF05SQUobk6gHEDQ==", + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/@react-email/section/-/section-0.0.15.tgz", + "integrity": "sha512-xfM3Qy5eU7fbkwvktlTeQgad7uo+1Z7YVh1aowSZaRBvKbkEXgoH/XssRYQmQL8ZrZGXbEJMujwtf4fsQL6vrg==", "requires": {} }, "@react-email/tailwind": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@react-email/tailwind/-/tailwind-0.1.0.tgz", - "integrity": "sha512-qysVUEY+M3SKUvu35XDpzn7yokhqFOT3tPU6Mj/pgc62TL5tQFj6msEbBtwoKs2qO3WZvai0DIHdLhaOxBQSow==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@react-email/tailwind/-/tailwind-1.0.0.tgz", + "integrity": "sha512-LV0SflR0aI5Sjxyp8upyPL8Ctwj+7aqwTgCDO9yZuOI6KpXbBGaYz8bSofe8oaVc/BmymZ5O3+/7FjQexbW+Yg==", "requires": {} }, "@react-email/text": { @@ -17832,92 +17783,92 @@ "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==" }, "@swc/core": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.39.tgz", - "integrity": "sha512-jns6VFeOT49uoTKLWIEfiQqJAlyqldNAt80kAr8f7a5YjX0zgnG3RBiLMpksx4Ka4SlK4O6TJ/lumIM3Trp82g==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.42.tgz", + "integrity": "sha512-iQrRk3SKndQZ4ptJv1rzeQSiCYQIhMjiO97QXOlCcCoaazOLKPnLnXzU4Kv0FuBFyYfG2FE94BoR0XI2BN02qw==", "devOptional": true, "requires": { - "@swc/core-darwin-arm64": "1.7.39", - "@swc/core-darwin-x64": "1.7.39", - "@swc/core-linux-arm-gnueabihf": "1.7.39", - "@swc/core-linux-arm64-gnu": "1.7.39", - "@swc/core-linux-arm64-musl": "1.7.39", - "@swc/core-linux-x64-gnu": "1.7.39", - "@swc/core-linux-x64-musl": "1.7.39", - "@swc/core-win32-arm64-msvc": "1.7.39", - "@swc/core-win32-ia32-msvc": "1.7.39", - "@swc/core-win32-x64-msvc": "1.7.39", + "@swc/core-darwin-arm64": "1.7.42", + "@swc/core-darwin-x64": "1.7.42", + "@swc/core-linux-arm-gnueabihf": "1.7.42", + "@swc/core-linux-arm64-gnu": "1.7.42", + "@swc/core-linux-arm64-musl": "1.7.42", + "@swc/core-linux-x64-gnu": "1.7.42", + "@swc/core-linux-x64-musl": "1.7.42", + "@swc/core-win32-arm64-msvc": "1.7.42", + "@swc/core-win32-ia32-msvc": "1.7.42", + "@swc/core-win32-x64-msvc": "1.7.42", "@swc/counter": "^0.1.3", "@swc/types": "^0.1.13" } }, "@swc/core-darwin-arm64": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.39.tgz", - "integrity": "sha512-o2nbEL6scMBMCTvY9OnbyVXtepLuNbdblV9oNJEFia5v5eGj9WMrnRQiylH3Wp/G2NYkW7V1/ZVW+kfvIeYe9A==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.42.tgz", + "integrity": "sha512-fWhaCs2+8GDRIcjExVDEIfbptVrxDqG8oHkESnXgymmvqTWzWei5SOnPNMS8Q+MYsn/b++Y2bDxkcwmq35Bvxg==", "dev": true, "optional": true }, "@swc/core-darwin-x64": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.39.tgz", - "integrity": "sha512-qMlv3XPgtPi/Fe11VhiPDHSLiYYk2dFYl747oGsHZPq+6tIdDQjIhijXPcsUHIXYDyG7lNpODPL8cP/X1sc9MA==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.42.tgz", + "integrity": "sha512-ZaVHD2bijrlkCyD7NDzLmSK849Jgcx+6DdL4x1dScoz1slJ8GTvLtEu0JOUaaScQwA+cVlhmrmlmi9ssjbRLGQ==", "dev": true, "optional": true }, "@swc/core-linux-arm-gnueabihf": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.39.tgz", - "integrity": "sha512-NP+JIkBs1ZKnpa3Lk2W1kBJMwHfNOxCUJXuTa2ckjFsuZ8OUu2gwdeLFkTHbR43dxGwH5UzSmuGocXeMowra/Q==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.42.tgz", + "integrity": "sha512-iF0BJj7hVTbY/vmbvyzVTh/0W80+Q4fbOYschdUM3Bsud39TA+lSaPOefOHywkNH58EQ1z3EAxYcJOWNES7GFQ==", "dev": true, "optional": true }, "@swc/core-linux-arm64-gnu": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.39.tgz", - "integrity": "sha512-cPc+/HehyHyHcvAsk3ML/9wYcpWVIWax3YBaA+ScecJpSE04l/oBHPfdqKUPslqZ+Gcw0OWnIBGJT/fBZW2ayw==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.42.tgz", + "integrity": "sha512-xGu8j+DOLYTLkVmsfZPJbNPW1EkiWgSucT0nOlz77bLxImukt/0+HVm2hOwHSKuArQ8C3cjahAMY3b/s4VH2ww==", "dev": true, "optional": true }, "@swc/core-linux-arm64-musl": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.39.tgz", - "integrity": "sha512-8RxgBC6ubFem66bk9XJ0vclu3exJ6eD7x7CwDhp5AD/tulZslTYXM7oNPjEtje3xxabXuj/bEUMNvHZhQRFdqA==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.42.tgz", + "integrity": "sha512-qtW3JNO7i1yHEko59xxz+jY38+tYmB96JGzj6XzygMbYJYZDYbrOpXQvKbMGNG3YeTDan7Fp2jD0dlKf7NgDPA==", "dev": true, "optional": true }, "@swc/core-linux-x64-gnu": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.39.tgz", - "integrity": "sha512-3gtCPEJuXLQEolo9xsXtuPDocmXQx12vewEyFFSMSjOfakuPOBmOQMa0sVL8Wwius8C1eZVeD1fgk0omMqeC+Q==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.42.tgz", + "integrity": "sha512-F9WY1TN+hhhtiEzZjRQziNLt36M5YprMeOBHjsLVNqwgflzleSI7ulgnlQECS8c8zESaXj3ksGduAoJYtPC1cA==", "dev": true, "optional": true }, "@swc/core-linux-x64-musl": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.39.tgz", - "integrity": "sha512-mg39pW5x/eqqpZDdtjZJxrUvQNSvJF4O8wCl37fbuFUqOtXs4TxsjZ0aolt876HXxxhsQl7rS+N4KioEMSgTZw==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.42.tgz", + "integrity": "sha512-7YMdOaYKLMQ8JGfnmRDwidpLFs/6ka+80zekeM0iCVO48yLrJR36G0QGXzMjKsXI0BPhq+mboZRRENK4JfQnEA==", "dev": true, "optional": true }, "@swc/core-win32-arm64-msvc": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.39.tgz", - "integrity": "sha512-NZwuS0mNJowH3e9bMttr7B1fB8bW5svW/yyySigv9qmV5VcQRNz1kMlCvrCLYRsa93JnARuiaBI6FazSeG8mpA==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.42.tgz", + "integrity": "sha512-C5CYWaIZEyqPl5W/EwcJ/mLBJFHVoUEa/IwWi0b4q2fCXcSCktQGwKXOQ+d67GneiZoiq0HasgcdMmMpGS9YRQ==", "dev": true, "optional": true }, "@swc/core-win32-ia32-msvc": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.39.tgz", - "integrity": "sha512-qFmvv5UExbJPXhhvCVDBnjK5Duqxr048dlVB6ZCgGzbRxuarOlawCzzLK4N172230pzlAWGLgn9CWl3+N6zfHA==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.42.tgz", + "integrity": "sha512-3j47seZ5pO62mbrqvPe1iwhe2BXnM5q7iB+n2xgA38PCGYt0mnaJafqmpCXm/uYZOCMqSNynaoOWCMMZm4sqtA==", "dev": true, "optional": true }, "@swc/core-win32-x64-msvc": { - "version": "1.7.39", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.39.tgz", - "integrity": "sha512-o+5IMqgOtj9+BEOp16atTfBgCogVak9svhBpwsbcJQp67bQbxGYhAPPDW/hZ2rpSSF7UdzbY9wudoX9G4trcuQ==", + "version": "1.7.42", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.42.tgz", + "integrity": "sha512-FXl9MdeUogZLGDcLr6QIRdDVkpG0dkN4MLM4dwQ5kcAk+XfKPrQibX6M2kcfhsCx+jtBqtK7hRFReRXPWJZGbA==", "dev": true, "optional": true }, @@ -17936,9 +17887,9 @@ } }, "@swc/types": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.13.tgz", - "integrity": "sha512-JL7eeCk6zWCbiYQg2xQSdLXQJl8Qoc9rXmG2cEKvHe3CKwMHwHGpfOb8frzNLmbycOo6I51qxnLnn9ESf4I20Q==", + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.14.tgz", + "integrity": "sha512-PbSmTiYCN+GMrvfjrMo9bdY+f2COnwbdnoMw7rqU/PI5jXpKjxOGZ0qqZCImxnT81NkNsKnmEpvu+hRXLBeCJg==", "devOptional": true, "requires": { "@swc/counter": "^0.1.3" @@ -18088,9 +18039,9 @@ "dev": true }, "@types/cors": { - "version": "2.8.14", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.14.tgz", - "integrity": "sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ==", + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "requires": { "@types/node": "*" } @@ -18159,9 +18110,9 @@ } }, "@types/fluent-ffmpeg": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/@types/fluent-ffmpeg/-/fluent-ffmpeg-2.1.26.tgz", - "integrity": "sha512-0JVF3wdQG+pN0ImwWD0bNgJiKF2OHg/7CDBHw5UIbRTvlnkgGHK6V5doE54ltvhud4o31/dEiHm23CAlxFiUQg==", + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/@types/fluent-ffmpeg/-/fluent-ffmpeg-2.1.27.tgz", + "integrity": "sha512-QiDWjihpUhriISNoBi2hJBRUUmoj/BMTYcfz+F+ZM9hHWBYABFAE6hjP/TbCZC0GWwlpa3FzvHH9RzFeRusZ7A==", "dev": true, "requires": { "@types/node": "*" @@ -18201,9 +18152,9 @@ "dev": true }, "@types/lodash": { - "version": "4.17.12", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.12.tgz", - "integrity": "sha512-sviUmCE8AYdaF/KIHLDJBQgeYzPBI0vf/17NaYehBJfYD1j6/L95Slh07NlyK2iNyBNaEkb3En2jRt+a8y3xZQ==", + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz", + "integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==", "dev": true }, "@types/luxon": { @@ -18490,16 +18441,16 @@ "integrity": "sha512-c/hzNDBh7eRF+KbCf+OoZxKbnkpaK/cKp9iLQWqB7muXtM+MtL9SUUH8vCFcLn6dH1Qm05jiexK0ofWY7TfOhQ==" }, "@typescript-eslint/eslint-plugin": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.11.0.tgz", - "integrity": "sha512-KhGn2LjW1PJT2A/GfDpiyOfS4a8xHQv2myUagTM5+zsormOmBlYsnQ6pobJ8XxJmh6hnHwa2Mbe3fPrDJoDhbA==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.12.2.tgz", + "integrity": "sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.11.0", - "@typescript-eslint/type-utils": "8.11.0", - "@typescript-eslint/utils": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0", + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/type-utils": "8.12.2", + "@typescript-eslint/utils": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -18507,54 +18458,54 @@ } }, "@typescript-eslint/parser": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.11.0.tgz", - "integrity": "sha512-lmt73NeHdy1Q/2ul295Qy3uninSqi6wQI18XwSpm8w0ZbQXUpjCAWP1Vlv/obudoBiIjJVjlztjQ+d/Md98Yxg==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz", + "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "8.11.0", - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/typescript-estree": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0", + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.11.0.tgz", - "integrity": "sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz", + "integrity": "sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==", "dev": true, "requires": { - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0" + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2" } }, "@typescript-eslint/type-utils": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.11.0.tgz", - "integrity": "sha512-ItiMfJS6pQU0NIKAaybBKkuVzo6IdnAhPFZA/2Mba/uBjuPQPet/8+zh5GtLHwmuFRShZx+8lhIs7/QeDHflOg==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.12.2.tgz", + "integrity": "sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "8.11.0", - "@typescript-eslint/utils": "8.11.0", + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/utils": "8.12.2", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" } }, "@typescript-eslint/types": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.11.0.tgz", - "integrity": "sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.12.2.tgz", + "integrity": "sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.11.0.tgz", - "integrity": "sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.12.2.tgz", + "integrity": "sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==", "dev": true, "requires": { - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -18584,42 +18535,42 @@ } }, "@typescript-eslint/utils": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.11.0.tgz", - "integrity": "sha512-CYiX6WZcbXNJV7UNB4PLDIBtSdRmRI/nb0FMyqHPTQD1rMjA0foPLaPUV39C/MxkTd/QKSeX+Gb34PPsDVC35g==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.12.2.tgz", + "integrity": "sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.11.0", - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/typescript-estree": "8.11.0" + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2" } }, "@typescript-eslint/visitor-keys": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.11.0.tgz", - "integrity": "sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.12.2.tgz", + "integrity": "sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==", "dev": true, "requires": { - "@typescript-eslint/types": "8.11.0", + "@typescript-eslint/types": "8.12.2", "eslint-visitor-keys": "^3.4.3" } }, "@vitest/coverage-v8": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.3.tgz", - "integrity": "sha512-2OJ3c7UPoFSmBZwqD2VEkUw6A/tzPF0LmW0ZZhhB8PFxuc+9IBG/FaSM+RLEenc7ljzFvGN+G0nGQoZnh7sy2A==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.4.tgz", + "integrity": "sha512-FPKQuJfR6VTfcNMcGpqInmtJuVXFSCd9HQltYncfR01AzXhLucMEtQ5SinPdZxsT5x/5BK7I5qFJ5/ApGCmyTQ==", "dev": true, "requires": { "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^0.2.3", - "debug": "^4.3.6", + "debug": "^4.3.7", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^5.0.6", "istanbul-reports": "^3.1.7", - "magic-string": "^0.30.11", - "magicast": "^0.3.4", + "magic-string": "^0.30.12", + "magicast": "^0.3.5", "std-env": "^3.7.0", "test-exclude": "^7.0.1", "tinyrainbow": "^1.2.0" @@ -18637,32 +18588,32 @@ } }, "@vitest/expect": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.3.tgz", - "integrity": "sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.4.tgz", + "integrity": "sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==", "dev": true, "requires": { - "@vitest/spy": "2.1.3", - "@vitest/utils": "2.1.3", - "chai": "^5.1.1", + "@vitest/spy": "2.1.4", + "@vitest/utils": "2.1.4", + "chai": "^5.1.2", "tinyrainbow": "^1.2.0" } }, "@vitest/mocker": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.3.tgz", - "integrity": "sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.4.tgz", + "integrity": "sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==", "dev": true, "requires": { - "@vitest/spy": "2.1.3", + "@vitest/spy": "2.1.4", "estree-walker": "^3.0.3", - "magic-string": "^0.30.11" + "magic-string": "^0.30.12" }, "dependencies": { "magic-string": { - "version": "0.30.11", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", - "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "version": "0.30.12", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", + "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", "dev": true, "requires": { "@jridgewell/sourcemap-codec": "^1.5.0" @@ -18671,39 +18622,39 @@ } }, "@vitest/pretty-format": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.3.tgz", - "integrity": "sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.4.tgz", + "integrity": "sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==", "dev": true, "requires": { "tinyrainbow": "^1.2.0" } }, "@vitest/runner": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.3.tgz", - "integrity": "sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.4.tgz", + "integrity": "sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==", "dev": true, "requires": { - "@vitest/utils": "2.1.3", + "@vitest/utils": "2.1.4", "pathe": "^1.1.2" } }, "@vitest/snapshot": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.3.tgz", - "integrity": "sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.4.tgz", + "integrity": "sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==", "dev": true, "requires": { - "@vitest/pretty-format": "2.1.3", - "magic-string": "^0.30.11", + "@vitest/pretty-format": "2.1.4", + "magic-string": "^0.30.12", "pathe": "^1.1.2" }, "dependencies": { "magic-string": { - "version": "0.30.11", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", - "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "version": "0.30.12", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", + "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", "dev": true, "requires": { "@jridgewell/sourcemap-codec": "^1.5.0" @@ -18712,22 +18663,22 @@ } }, "@vitest/spy": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.3.tgz", - "integrity": "sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.4.tgz", + "integrity": "sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==", "dev": true, "requires": { - "tinyspy": "^3.0.0" + "tinyspy": "^3.0.2" } }, "@vitest/utils": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.3.tgz", - "integrity": "sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.4.tgz", + "integrity": "sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==", "dev": true, "requires": { - "@vitest/pretty-format": "2.1.3", - "loupe": "^3.1.1", + "@vitest/pretty-format": "2.1.4", + "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" } }, @@ -19480,9 +19431,9 @@ "integrity": "sha512-p407+D1tIkDvsEAPS22lJxLQQaG8OTBEqo0KhzfABGk0TU4juBNDSfH0hyAp/HRyx+M8L17z/ltyhxh27FTfQg==" }, "chai": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", - "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", "dev": true, "requires": { "assertion-error": "^2.0.1", @@ -19802,9 +19753,9 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==" }, "cookie-parser": { "version": "1.4.7", @@ -19813,13 +19764,6 @@ "requires": { "cookie": "0.7.2", "cookie-signature": "1.0.6" - }, - "dependencies": { - "cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==" - } } }, "cookie-signature": { @@ -20243,16 +20187,16 @@ } }, "engine.io": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", - "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", + "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", "requires": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", @@ -20260,9 +20204,9 @@ } }, "engine.io-parser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", - "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==" + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==" }, "enhanced-resolve": { "version": "5.17.1", @@ -20604,6 +20548,12 @@ "integrity": "sha512-qRVEPQxtoerXF+izJ0O7jGAr5o0Uyvnyu7ao5DTKzF+V7Fv3SurE0l43oCeZPFKo/Ld4V7vEylhFCm4IHVZKWA==", "optional": true }, + "expect-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", + "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", + "dev": true + }, "express": { "version": "4.21.1", "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", @@ -21861,14 +21811,25 @@ } }, "magicast": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz", - "integrity": "sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", "dev": true, "requires": { - "@babel/parser": "^7.24.4", - "@babel/types": "^7.24.0", + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" + }, + "dependencies": { + "@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "dev": true, + "requires": { + "@babel/types": "^7.26.0" + } + } } }, "make-dir": { @@ -22043,9 +22004,9 @@ "dev": true }, "mock-fs": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-5.4.0.tgz", - "integrity": "sha512-3ROPnEMgBOkusBMYQUW2rnT3wZwsgfOKzJDLvx/TZ7FL1WmWvwSwn3j4aDR5fLDGtgcc1WF0Z1y0di7c9L4FKw==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-5.4.1.tgz", + "integrity": "sha512-sz/Q8K1gXXXHR+qr0GZg2ysxCRr323kuN10O7CtQjraJsFDJ4SJ+0I5MzALz7aRp9lHk8Cc/YdsT95h9Ka1aFw==", "dev": true }, "module-details-from-path": { @@ -22253,20 +22214,20 @@ } }, "next": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/next/-/next-14.2.3.tgz", - "integrity": "sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==", - "requires": { - "@next/env": "14.2.3", - "@next/swc-darwin-arm64": "14.2.3", - "@next/swc-darwin-x64": "14.2.3", - "@next/swc-linux-arm64-gnu": "14.2.3", - "@next/swc-linux-arm64-musl": "14.2.3", - "@next/swc-linux-x64-gnu": "14.2.3", - "@next/swc-linux-x64-musl": "14.2.3", - "@next/swc-win32-arm64-msvc": "14.2.3", - "@next/swc-win32-ia32-msvc": "14.2.3", - "@next/swc-win32-x64-msvc": "14.2.3", + "version": "14.2.10", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.10.tgz", + "integrity": "sha512-sDDExXnh33cY3RkS9JuFEKaS4HmlWmDKP1VJioucCG6z5KuA008DPsDZOzi8UfqEk3Ii+2NCQSJrfbEWtZZfww==", + "requires": { + "@next/env": "14.2.10", + "@next/swc-darwin-arm64": "14.2.10", + "@next/swc-darwin-x64": "14.2.10", + "@next/swc-linux-arm64-gnu": "14.2.10", + "@next/swc-linux-arm64-musl": "14.2.10", + "@next/swc-linux-x64-gnu": "14.2.10", + "@next/swc-linux-x64-musl": "14.2.10", + "@next/swc-win32-arm64-msvc": "14.2.10", + "@next/swc-win32-ia32-msvc": "14.2.10", + "@next/swc-win32-x64-msvc": "14.2.10", "@swc/helpers": "0.5.5", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", @@ -22321,9 +22282,9 @@ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" }, "nodemailer": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.15.tgz", - "integrity": "sha512-AHf04ySLC6CIfuRtRiEYtGEXgRfa6INgWGluDhnxTZhHSKvrBu7lc1VVchQ0d8nPc4cFaZoPq8vkyNoZr0TpGQ==" + "version": "6.9.16", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.16.tgz", + "integrity": "sha512-psAuZdTIRN08HKVd/E8ObdV6NO7NTBY3KsC30F7M4H1OnmLCUNaS56FpYxyb26zWLSyYF9Ozch9KYHhHegsiOQ==" }, "nopt": { "version": "5.0.0", @@ -23073,24 +23034,24 @@ } }, "react-email": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/react-email/-/react-email-3.0.1.tgz", - "integrity": "sha512-G4Bkx2ULIScy/0Z8nnWywHt0W1iTkaYCdh9rWNuQ3eVZ6B3ttTUDE9uUy3VNQ8dtQbmG0cpt8+XmImw7mMBW6Q==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/react-email/-/react-email-3.0.2.tgz", + "integrity": "sha512-R7Doynb6NbnDvHx+9dWxkiWN2eaq9hj4MxRdkS94cVD/WDaIzESSLm62GtAAyLJ65xA2ROJydFlcYsDq4hGi4Q==", "requires": { "@babel/core": "7.24.5", "@babel/parser": "7.24.5", "chalk": "4.1.2", - "chokidar": "3.6.0", + "chokidar": "^4.0.1", "commander": "11.1.0", "debounce": "2.0.0", "esbuild": "0.19.11", "glob": "10.3.4", "log-symbols": "4.1.0", "mime-types": "2.1.35", - "next": "14.2.3", + "next": "14.2.10", "normalize-path": "3.0.0", "ora": "5.4.1", - "socket.io": "4.7.5" + "socket.io": "4.8.0" }, "dependencies": { "@esbuild/aix-ppc64": { @@ -23239,6 +23200,14 @@ "balanced-match": "^1.0.0" } }, + "chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "requires": { + "readdirp": "^4.0.1" + } + }, "commander": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", @@ -23293,6 +23262,11 @@ "requires": { "brace-expansion": "^2.0.1" } + }, + "readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==" } } }, @@ -23996,15 +23970,15 @@ "integrity": "sha512-YiuPbxpCj4hD9Qs06hGAz/OZhQ0eDuALN0lRWJez0eD/RevzKqGdUx1IOMUnXgpr+sXZLq3g8ERwbAH0bCb8vg==" }, "socket.io": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", - "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz", + "integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==", "requires": { "accepts": "~1.3.4", "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.5.2", + "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" } @@ -24591,9 +24565,9 @@ "dev": true }, "tinyexec": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.0.tgz", - "integrity": "sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", + "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", "dev": true }, "tinypool": { @@ -24622,11 +24596,6 @@ "os-tmpdir": "~1.0.2" } }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -24737,9 +24706,9 @@ } }, "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "tweetnacl": { "version": "0.14.5", @@ -25016,13 +24985,13 @@ } }, "vite-node": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.3.tgz", - "integrity": "sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.4.tgz", + "integrity": "sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==", "dev": true, "requires": { "cac": "^6.7.14", - "debug": "^4.3.6", + "debug": "^4.3.7", "pathe": "^1.1.2", "vite": "^5.0.0" } @@ -25039,29 +25008,30 @@ } }, "vitest": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.3.tgz", - "integrity": "sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==", - "dev": true, - "requires": { - "@vitest/expect": "2.1.3", - "@vitest/mocker": "2.1.3", - "@vitest/pretty-format": "^2.1.3", - "@vitest/runner": "2.1.3", - "@vitest/snapshot": "2.1.3", - "@vitest/spy": "2.1.3", - "@vitest/utils": "2.1.3", - "chai": "^5.1.1", - "debug": "^4.3.6", - "magic-string": "^0.30.11", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.4.tgz", + "integrity": "sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==", + "dev": true, + "requires": { + "@vitest/expect": "2.1.4", + "@vitest/mocker": "2.1.4", + "@vitest/pretty-format": "^2.1.4", + "@vitest/runner": "2.1.4", + "@vitest/snapshot": "2.1.4", + "@vitest/spy": "2.1.4", + "@vitest/utils": "2.1.4", + "chai": "^5.1.2", + "debug": "^4.3.7", + "expect-type": "^1.1.0", + "magic-string": "^0.30.12", "pathe": "^1.1.2", "std-env": "^3.7.0", "tinybench": "^2.9.0", - "tinyexec": "^0.3.0", - "tinypool": "^1.0.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.1.3", + "vite-node": "2.1.4", "why-is-node-running": "^2.3.0" }, "dependencies": { diff --git a/server/package.json b/server/package.json index e83b88ca66e79..91eee75a755f7 100644 --- a/server/package.json +++ b/server/package.json @@ -48,7 +48,7 @@ "@opentelemetry/context-async-hooks": "^1.24.0", "@opentelemetry/exporter-prometheus": "^0.54.0", "@opentelemetry/sdk-node": "^0.54.0", - "@react-email/components": "^0.0.25", + "@react-email/components": "^0.0.26", "@socket.io/redis-adapter": "^8.3.0", "archiver": "^7.0.0", "async-lock": "^1.4.0", diff --git a/web/package-lock.json b/web/package-lock.json index a24de1cd75832..f2185f7bba682 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -80,7 +80,7 @@ "@oazapfts/runtime": "^1.0.2" }, "devDependencies": { - "@types/node": "^22.8.1", + "@types/node": "^22.8.5", "typescript": "^5.3.3" } }, @@ -138,19 +138,21 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -170,12 +172,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.2" + "@babel/types": "^7.26.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -197,14 +200,14 @@ } }, "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -769,9 +772,9 @@ } }, "node_modules/@faker-js/faker": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.0.3.tgz", - "integrity": "sha512-lWrrK4QNlFSU+13PL9jMbMKLJYXDFu3tQfayBsMXX7KL/GiQeqfB1CzHkqD5UHBUtPAuPo6XwGbMFNdVMZObRA==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.1.0.tgz", + "integrity": "sha512-GJvX9iM9PBtKScJVlXQ0tWpihK3i0pha/XAhzQa1hPK/ILLa1Wq3I63Ij7lRtqTwmdTxRCyrUhLC5Sly9SLbug==", "dev": true, "funding": [ { @@ -1635,30 +1638,30 @@ } }, "node_modules/@photo-sphere-viewer/core": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/core/-/core-5.11.0.tgz", - "integrity": "sha512-SjEVBBMNj5v3aSLglpTd88q+cyDw0Lke7mK3kN3p+KsQK8X0OG7GsbtI7sGj81zSCbHmV3c0DgUaXMv+xdGFaw==", + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/core/-/core-5.11.1.tgz", + "integrity": "sha512-bxWnoQGYjXfmHGee4OSkoYLZmdgqvJWMn7wmpK0V0Vf46Fqu+TJ4Yt8+dY2PgpM89HoKzNr15Dzt6jqOfjkFxQ==", "license": "MIT", "dependencies": { "three": "^0.169.0" } }, "node_modules/@photo-sphere-viewer/equirectangular-video-adapter": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/equirectangular-video-adapter/-/equirectangular-video-adapter-5.11.0.tgz", - "integrity": "sha512-xs5+vT5jYjBtEsguuJe6CVJNGxtwopb3+Zs4z/VJg0oNm2mTZF2TQu2RkSlRJZTE6a/IfZ7Zv1fJcN3Yiv7AVg==", + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/equirectangular-video-adapter/-/equirectangular-video-adapter-5.11.1.tgz", + "integrity": "sha512-fkWuVeArtZSWd0z282/J82YSc+oernQaE/cpo0soVaStaNbS1V35iSnPlaBKw40qX6tucJWYw15QwM8xgPC2IQ==", "license": "MIT", "peerDependencies": { - "@photo-sphere-viewer/core": "5.11.0" + "@photo-sphere-viewer/core": "5.11.1" } }, "node_modules/@photo-sphere-viewer/video-plugin": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/video-plugin/-/video-plugin-5.11.0.tgz", - "integrity": "sha512-6ApAKvwDRgVZOk4N/3SJ14IFpQ6V0QDDtknXxLI5JqU1yAvBcyb7goa5XDbyTWXYUaPKH06Fz+8UruWRzCsBXw==", + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/video-plugin/-/video-plugin-5.11.1.tgz", + "integrity": "sha512-02spWwv9bjyI6inNdZsczX/qdMICVV9B8lWX/J4iNBaiUCHqPKmk8CeZbRyC/Uh3OHSusSJHyW0FDEOf6qjjww==", "license": "MIT", "peerDependencies": { - "@photo-sphere-viewer/core": "5.11.0" + "@photo-sphere-viewer/core": "5.11.1" } }, "node_modules/@pkgjs/parseargs": { @@ -2124,9 +2127,9 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.6.2.tgz", - "integrity": "sha512-P6GJD4yqc9jZLbe98j/EkyQDTPgqftohZF5FBkHY5BUERZmcf4HeO2k0XaefEg329ux2p21i1A1DmyQ1kKw2Jw==", + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.6.3.tgz", + "integrity": "sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==", "dev": true, "license": "MIT", "dependencies": { @@ -2383,17 +2386,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.11.0.tgz", - "integrity": "sha512-KhGn2LjW1PJT2A/GfDpiyOfS4a8xHQv2myUagTM5+zsormOmBlYsnQ6pobJ8XxJmh6hnHwa2Mbe3fPrDJoDhbA==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.12.2.tgz", + "integrity": "sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.11.0", - "@typescript-eslint/type-utils": "8.11.0", - "@typescript-eslint/utils": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0", + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/type-utils": "8.12.2", + "@typescript-eslint/utils": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -2417,16 +2420,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.11.0.tgz", - "integrity": "sha512-lmt73NeHdy1Q/2ul295Qy3uninSqi6wQI18XwSpm8w0ZbQXUpjCAWP1Vlv/obudoBiIjJVjlztjQ+d/Md98Yxg==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz", + "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "8.11.0", - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/typescript-estree": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0", + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "debug": "^4.3.4" }, "engines": { @@ -2446,14 +2449,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.11.0.tgz", - "integrity": "sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz", + "integrity": "sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0" + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2464,14 +2467,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.11.0.tgz", - "integrity": "sha512-ItiMfJS6pQU0NIKAaybBKkuVzo6IdnAhPFZA/2Mba/uBjuPQPet/8+zh5GtLHwmuFRShZx+8lhIs7/QeDHflOg==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.12.2.tgz", + "integrity": "sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.11.0", - "@typescript-eslint/utils": "8.11.0", + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/utils": "8.12.2", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -2489,9 +2492,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.11.0.tgz", - "integrity": "sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.12.2.tgz", + "integrity": "sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==", "dev": true, "license": "MIT", "engines": { @@ -2503,14 +2506,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.11.0.tgz", - "integrity": "sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.12.2.tgz", + "integrity": "sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/visitor-keys": "8.11.0", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -2558,16 +2561,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.11.0.tgz", - "integrity": "sha512-CYiX6WZcbXNJV7UNB4PLDIBtSdRmRI/nb0FMyqHPTQD1rMjA0foPLaPUV39C/MxkTd/QKSeX+Gb34PPsDVC35g==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.12.2.tgz", + "integrity": "sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.11.0", - "@typescript-eslint/types": "8.11.0", - "@typescript-eslint/typescript-estree": "8.11.0" + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2581,13 +2584,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.11.0.tgz", - "integrity": "sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.12.2.tgz", + "integrity": "sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.11.0", + "@typescript-eslint/types": "8.12.2", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -2599,21 +2602,21 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.3.tgz", - "integrity": "sha512-2OJ3c7UPoFSmBZwqD2VEkUw6A/tzPF0LmW0ZZhhB8PFxuc+9IBG/FaSM+RLEenc7ljzFvGN+G0nGQoZnh7sy2A==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.4.tgz", + "integrity": "sha512-FPKQuJfR6VTfcNMcGpqInmtJuVXFSCd9HQltYncfR01AzXhLucMEtQ5SinPdZxsT5x/5BK7I5qFJ5/ApGCmyTQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^0.2.3", - "debug": "^4.3.6", + "debug": "^4.3.7", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^5.0.6", "istanbul-reports": "^3.1.7", - "magic-string": "^0.30.11", - "magicast": "^0.3.4", + "magic-string": "^0.30.12", + "magicast": "^0.3.5", "std-env": "^3.7.0", "test-exclude": "^7.0.1", "tinyrainbow": "^1.2.0" @@ -2622,8 +2625,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "2.1.3", - "vitest": "2.1.3" + "@vitest/browser": "2.1.4", + "vitest": "2.1.4" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -2632,15 +2635,15 @@ } }, "node_modules/@vitest/expect": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.3.tgz", - "integrity": "sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.4.tgz", + "integrity": "sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.3", - "@vitest/utils": "2.1.3", - "chai": "^5.1.1", + "@vitest/spy": "2.1.4", + "@vitest/utils": "2.1.4", + "chai": "^5.1.2", "tinyrainbow": "^1.2.0" }, "funding": { @@ -2648,22 +2651,21 @@ } }, "node_modules/@vitest/mocker": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.3.tgz", - "integrity": "sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.4.tgz", + "integrity": "sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.3", + "@vitest/spy": "2.1.4", "estree-walker": "^3.0.3", - "magic-string": "^0.30.11" + "magic-string": "^0.30.12" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/spy": "2.1.3", - "msw": "^2.3.5", + "msw": "^2.4.9", "vite": "^5.0.0" }, "peerDependenciesMeta": { @@ -2676,9 +2678,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.3.tgz", - "integrity": "sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.4.tgz", + "integrity": "sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==", "dev": true, "license": "MIT", "dependencies": { @@ -2689,13 +2691,13 @@ } }, "node_modules/@vitest/runner": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.3.tgz", - "integrity": "sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.4.tgz", + "integrity": "sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "2.1.3", + "@vitest/utils": "2.1.4", "pathe": "^1.1.2" }, "funding": { @@ -2703,14 +2705,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.3.tgz", - "integrity": "sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.4.tgz", + "integrity": "sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.3", - "magic-string": "^0.30.11", + "@vitest/pretty-format": "2.1.4", + "magic-string": "^0.30.12", "pathe": "^1.1.2" }, "funding": { @@ -2718,27 +2720,27 @@ } }, "node_modules/@vitest/spy": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.3.tgz", - "integrity": "sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.4.tgz", + "integrity": "sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==", "dev": true, "license": "MIT", "dependencies": { - "tinyspy": "^3.0.0" + "tinyspy": "^3.0.2" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.3.tgz", - "integrity": "sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.4.tgz", + "integrity": "sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.3", - "loupe": "^3.1.1", + "@vitest/pretty-format": "2.1.4", + "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" }, "funding": { @@ -3131,9 +3133,9 @@ "license": "CC-BY-4.0" }, "node_modules/chai": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", - "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", "dev": true, "license": "MIT", "dependencies": { @@ -3645,7 +3647,6 @@ "version": "6.5.4", "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.4.tgz", "integrity": "sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==", - "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", @@ -3658,7 +3659,6 @@ "version": "5.2.3", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", - "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -4241,6 +4241,16 @@ "es5-ext": "~0.10.14" } }, + "node_modules/expect-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", + "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/ext": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", @@ -5336,13 +5346,14 @@ } }, "node_modules/magicast": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz", - "integrity": "sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/parser": "^7.24.4", - "@babel/types": "^7.24.0", + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" } }, @@ -6847,7 +6858,6 @@ "version": "4.7.5", "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.5.tgz", "integrity": "sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==", - "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", @@ -7161,9 +7171,9 @@ } }, "node_modules/svelte": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.1.5.tgz", - "integrity": "sha512-AyYondx6wS0g8mmBMfwJVnOYYBswjBv6L4bc99awfbET2KozWvVwxe8NSN7fhx7Pgr7pOfOXIv7K8+Impc0OoQ==", + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.1.8.tgz", + "integrity": "sha512-MCZVSNNqlgwKUSEZEsq2nILhzI70qv1jJy9fG9nf3I8CyJhJ2vxtPybDuP5HdB7Q9Az0WliFmqUeLEQdnY1j+g==", "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.3.0", @@ -8032,17 +8042,18 @@ "license": "MIT" }, "node_modules/tinyexec": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.0.tgz", - "integrity": "sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", + "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", "dev": true, "license": "MIT" }, "node_modules/tinypool": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.0.tgz", - "integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz", + "integrity": "sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==", "dev": true, + "license": "MIT", "engines": { "node": "^18.0.0 || >=20.0.0" } @@ -8071,15 +8082,6 @@ "node": ">=14.0.0" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -8379,14 +8381,14 @@ } }, "node_modules/vite-node": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.3.tgz", - "integrity": "sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.4.tgz", + "integrity": "sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==", "dev": true, "license": "MIT", "dependencies": { "cac": "^6.7.14", - "debug": "^4.3.6", + "debug": "^4.3.7", "pathe": "^1.1.2", "vite": "^5.0.0" }, @@ -8420,30 +8422,31 @@ } }, "node_modules/vitest": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.3.tgz", - "integrity": "sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.4.tgz", + "integrity": "sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "2.1.3", - "@vitest/mocker": "2.1.3", - "@vitest/pretty-format": "^2.1.3", - "@vitest/runner": "2.1.3", - "@vitest/snapshot": "2.1.3", - "@vitest/spy": "2.1.3", - "@vitest/utils": "2.1.3", - "chai": "^5.1.1", - "debug": "^4.3.6", - "magic-string": "^0.30.11", + "@vitest/expect": "2.1.4", + "@vitest/mocker": "2.1.4", + "@vitest/pretty-format": "^2.1.4", + "@vitest/runner": "2.1.4", + "@vitest/snapshot": "2.1.4", + "@vitest/spy": "2.1.4", + "@vitest/utils": "2.1.4", + "chai": "^5.1.2", + "debug": "^4.3.7", + "expect-type": "^1.1.0", + "magic-string": "^0.30.12", "pathe": "^1.1.2", "std-env": "^3.7.0", "tinybench": "^2.9.0", - "tinyexec": "^0.3.0", - "tinypool": "^1.0.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.1.3", + "vite-node": "2.1.4", "why-is-node-running": "^2.3.0" }, "bin": { @@ -8458,8 +8461,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.3", - "@vitest/ui": "2.1.3", + "@vitest/browser": "2.1.4", + "@vitest/ui": "2.1.4", "happy-dom": "*", "jsdom": "*" }, From 7134d26a199f529ab50498feb6abc027916658b3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Nov 2024 21:24:36 +0000 Subject: [PATCH 12/21] chore(deps): update base-image to v20241105 (major) (#13826) --- e2e/src/immich-admin/specs/immich-admin.e2e-spec.ts | 11 +++++++---- server/Dockerfile | 4 ++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/e2e/src/immich-admin/specs/immich-admin.e2e-spec.ts b/e2e/src/immich-admin/specs/immich-admin.e2e-spec.ts index d025b7a338185..cf0558883a0d9 100644 --- a/e2e/src/immich-admin/specs/immich-admin.e2e-spec.ts +++ b/e2e/src/immich-admin/specs/immich-admin.e2e-spec.ts @@ -9,9 +9,11 @@ describe(`immich-admin`, () => { describe('list-users', () => { it('should list the admin user', async () => { - const { stdout, stderr, exitCode } = await immichAdmin(['list-users']).promise; + const { stdout, exitCode } = await immichAdmin(['list-users']).promise; expect(exitCode).toBe(0); - expect(stderr).toBe(''); + + // TODO: Vitest needs upgrade to Node 22.x to fix the failed check + // expect(stderr).toBe(''); expect(stdout).toContain("email: 'admin@immich.cloud'"); expect(stdout).toContain("name: 'Immich Admin'"); }); @@ -29,9 +31,10 @@ describe(`immich-admin`, () => { } }); - const { stderr, stdout, exitCode } = await promise; + const { stdout, exitCode } = await promise; expect(exitCode).toBe(0); - expect(stderr).toBe(''); + // TODO: Vitest needs upgrade to Node 22.x to fix the failed check + // expect(stderr).toBe(''); expect(stdout).toContain('The admin password has been updated to:'); }); }); diff --git a/server/Dockerfile b/server/Dockerfile index f0223cdc5d14a..896a2de300e77 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -1,5 +1,5 @@ # dev build -FROM ghcr.io/immich-app/base-server-dev:20241029@sha256:31c2d6cba42253680ff7738dffa66e97dfe5b1c7faf23b29d07ab456e9c1e2b9 AS dev +FROM ghcr.io/immich-app/base-server-dev:20241105@sha256:99eec44db9e281e30eb9c50161cfb8e810f06e4338896b900fb5cafd09e82cd5 AS dev RUN apt-get install --no-install-recommends -yqq tini WORKDIR /usr/src/app @@ -42,7 +42,7 @@ RUN npm run build # prod build -FROM ghcr.io/immich-app/base-server-prod:20241029@sha256:669cc57091e3d2924b9e3001acb4998ed9c9585370017adcdf7beed21d249aae +FROM ghcr.io/immich-app/base-server-prod:20241105@sha256:dbe566f5c53f36640da910ca86a7c5575a26e9b9f6bc8d90ae0a53b8bc3a1f73 WORKDIR /usr/src/app ENV NODE_ENV=production \ From 442d4e5e1cdb373106024afb9ec385813bff3c1f Mon Sep 17 00:00:00 2001 From: Matthew Momjian <50788000+mmomjian@users.noreply.github.com> Date: Tue, 5 Nov 2024 22:19:12 -0500 Subject: [PATCH 13/21] docs: fail2ban community project (#13943) fail2ban --- docs/src/components/community-guides.tsx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/src/components/community-guides.tsx b/docs/src/components/community-guides.tsx index 7f4206c97baf1..17fe56231754e 100644 --- a/docs/src/components/community-guides.tsx +++ b/docs/src/components/community-guides.tsx @@ -35,19 +35,24 @@ const guides: CommunityGuidesProps[] = [ }, { title: 'Google Photos import + albums', - description: 'Import your Google Photos files into Immich and add your albums', + description: 'Import your Google Photos files into Immich and add your albums.', url: 'https://github.com/immich-app/immich/discussions/1340', }, { title: 'Access Immich with custom domain', - description: 'Access your local Immich installation over the internet using your own domain', + description: 'Access your local Immich installation over the internet using your own domain.', url: 'https://github.com/ppr88/immich-guides/blob/main/open-immich-custom-domain.md', }, { title: 'Nginx caching map server', - description: 'Increase privacy by using nginx as a caching proxy in front of a map tile server', + description: 'Increase privacy by using nginx as a caching proxy in front of a map tile server.', url: 'https://github.com/pcouy/pcouy.github.io/blob/main/_posts/2024-08-30-proxying-a-map-tile-server-for-increased-privacy.md', }, + { + title: 'fail2ban setup instructions', + description: 'How to configure an existing fail2ban installation to block incorrect login attempts.', + url: 'https://github.com/immich-app/immich/discussions/3243#discussioncomment-6681948', + }, ]; function CommunityGuide({ title, description, url }: CommunityGuidesProps): JSX.Element { From 9fd425dd5c75f33f2a99215b9e9ac5573a95b35c Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 6 Nov 2024 08:37:39 -0600 Subject: [PATCH 14/21] chore(mobile): translation update (#13942) --- mobile/assets/i18n/cs-CZ.json | 8 +- mobile/assets/i18n/de-DE.json | 2 +- mobile/assets/i18n/el-GR.json | 820 +++++++++++++++++----------------- mobile/assets/i18n/es-ES.json | 74 +-- mobile/assets/i18n/fr-FR.json | 108 ++--- mobile/assets/i18n/he-IL.json | 44 +- mobile/assets/i18n/hu-HU.json | 324 +++++++------- mobile/assets/i18n/ja-JP.json | 44 +- mobile/assets/i18n/ko-KR.json | 34 +- mobile/assets/i18n/nb-NO.json | 42 +- mobile/assets/i18n/pl-PL.json | 22 +- mobile/assets/i18n/pt-PT.json | 50 +-- mobile/assets/i18n/ru-RU.json | 314 ++++++------- mobile/assets/i18n/sv-SE.json | 42 +- mobile/assets/i18n/uk-UA.json | 48 +- mobile/assets/i18n/vi-VN.json | 2 +- 16 files changed, 989 insertions(+), 989 deletions(-) diff --git a/mobile/assets/i18n/cs-CZ.json b/mobile/assets/i18n/cs-CZ.json index 6a2c70a2a91a3..6e3462b26f7f3 100644 --- a/mobile/assets/i18n/cs-CZ.json +++ b/mobile/assets/i18n/cs-CZ.json @@ -44,9 +44,9 @@ "app_bar_signout_dialog_content": "Určitě se chcete odhlásit?", "app_bar_signout_dialog_ok": "Ano", "app_bar_signout_dialog_title": "Odhlásit se", - "archived": "Archivované", + "archived": "Archiv", "archive_page_no_archived_assets": "Nebyla nalezena žádná archivovaná média", - "archive_page_title": "Archív ({})", + "archive_page_title": "Archiv ({})", "asset_action_delete_err_read_only": "Nelze odstranit položky pouze pro čtení, přeskakuji", "asset_action_share_err_offline": "Nelze načíst offline položky, přeskakuji", "asset_list_group_by_sub_title": "Seskupit podle", @@ -172,7 +172,7 @@ "control_bottom_app_bar_add_to_album": "Přidat do alba", "control_bottom_app_bar_album_info": "{} položek", "control_bottom_app_bar_album_info_shared": "{} položky – sdílené", - "control_bottom_app_bar_archive": "Archív", + "control_bottom_app_bar_archive": "Archivovat", "control_bottom_app_bar_create_new_album": "Vytvořit nové album", "control_bottom_app_bar_delete": "Smazat", "control_bottom_app_bar_delete_from_immich": "Smazat ze serveru Immich", @@ -285,7 +285,7 @@ "invalid_date_format": "Chybný formát data", "library": "Knihovna", "library_page_albums": "Alba", - "library_page_archive": "Archív", + "library_page_archive": "Archivovat", "library_page_device_albums": "Alba v zařízení", "library_page_favorites": "Oblíbené", "library_page_new_album": "Nové album", diff --git a/mobile/assets/i18n/de-DE.json b/mobile/assets/i18n/de-DE.json index b3452889fdecb..d84487973982f 100644 --- a/mobile/assets/i18n/de-DE.json +++ b/mobile/assets/i18n/de-DE.json @@ -414,7 +414,7 @@ "recently_added_page_title": "Zuletzt hinzugefügt", "save_to_gallery": "In Galerie speichern", "scaffold_body_error_occurred": "Ein Fehler ist aufgetreten", - "search_albums": "Suche Alben", + "search_albums": "nach Album suchen", "search_bar_hint": "Durchsuche deine Fotos", "search_filter_apply": "Filter anwenden", "search_filter_camera": "Kamera", diff --git a/mobile/assets/i18n/el-GR.json b/mobile/assets/i18n/el-GR.json index 5d8d077fab29f..dac5667cc1277 100644 --- a/mobile/assets/i18n/el-GR.json +++ b/mobile/assets/i18n/el-GR.json @@ -1,19 +1,19 @@ { - "action_common_back": "Back", + "action_common_back": "Πίσω", "action_common_cancel": "Ακύρωση", - "action_common_clear": "Clear", - "action_common_confirm": "Confirm", - "action_common_save": "Save", - "action_common_select": "Select", + "action_common_clear": "Εκκαθάριση", + "action_common_confirm": "Επιβεβαίωση", + "action_common_save": "Αποθήκευση", + "action_common_select": "Επιλογή", "action_common_update": "Ενημέρωση", - "add_a_name": "Add a name", + "add_a_name": "Πρόσθεση ονόματος", "add_to_album_bottom_sheet_added": "Προστέθηκε στο {album}", "add_to_album_bottom_sheet_already_exists": "Ήδη στο {album}", "advanced_settings_log_level_title": "Επίπεδο καταγραφής: {}", "advanced_settings_prefer_remote_subtitle": "Μερικές συσκευές αργούν πολύ να φορτώσουν μικρογραφίες από αρχεία στη συσκευή. Ενεργοποιήστε αυτήν τη ρύθμιση για να φορτώνονται αντί αυτού απομακρυσμένες εικόνες.", "advanced_settings_prefer_remote_title": "Προτίμηση απομακρυσμένων εικόνων.", - "advanced_settings_proxy_headers_subtitle": "Define proxy headers Immich should send with each network request", - "advanced_settings_proxy_headers_title": "Proxy Headers", + "advanced_settings_proxy_headers_subtitle": "Καθορισμός κεφαλίδων διακομιστή μεσολάβησης που το Immich πρέπει να στέλνει με κάθε αίτημα δικτύου", + "advanced_settings_proxy_headers_title": "Κεφαλίδες διακομιστή μεσολάβησης", "advanced_settings_self_signed_ssl_subtitle": "Παρακάμπτει τον έλεγχο πιστοποιητικού SSL του διακομιστή. Απαραίτητο για αυτο-υπογεγραμμένα πιστοποιητικά.", "advanced_settings_self_signed_ssl_title": "Να επιτρέπονται αυτο-υπογεγραμμένα πιστοποιητικά SSL", "advanced_settings_tile_subtitle": "Ρυθμίσεις προχωρημένου χρήστη", @@ -22,13 +22,13 @@ "advanced_settings_troubleshooting_title": "Αντιμετώπιση προβλημάτων", "album_info_card_backup_album_excluded": "ΕΞΑΙΡΟΥΜΕΝΟ", "album_info_card_backup_album_included": "ΣΥΜΠΕΡΙΛΑΜΒΑΝΟΜΕΝΟ", - "albums": "Albums", + "albums": "Άλμπουμ", "album_thumbnail_card_item": "1 αντικείμενο", "album_thumbnail_card_items": "{} αντικείμενα", "album_thumbnail_card_shared": "· Κοινόχρηστο", "album_thumbnail_owned": "Δικό μου", "album_thumbnail_shared_by": "Κοινοποιημένο από {}", - "album_viewer_appbar_delete_confirm": "Are you sure you want to delete this album from your account?", + "album_viewer_appbar_delete_confirm": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το άλμπουμ από τον λογαριασμό σας;", "album_viewer_appbar_share_delete": "Διαγραφή άλμπουμ", "album_viewer_appbar_share_err_delete": "Αποτυχία διαγραφής άλμπουμ", "album_viewer_appbar_share_err_leave": "Αποτυχία αποχώρησης από άλμπουμ", @@ -38,34 +38,34 @@ "album_viewer_appbar_share_remove": "Αφαίρεση από άλμπουμ", "album_viewer_appbar_share_to": "Κοινοποίηση σε", "album_viewer_page_share_add_users": "Προσθήκη χρηστών", - "all": "All", + "all": "Όλα", "all_people_page_title": "Άτομα", "all_videos_page_title": "Βίντεο", "app_bar_signout_dialog_content": "Είστε βέβαιοι ότι θέλετε να αποσυνδεθείτε;", "app_bar_signout_dialog_ok": "Ναι", "app_bar_signout_dialog_title": "Αποσύνδεση", - "archived": "Archived", + "archived": "Αρχειοθετήθηκε", "archive_page_no_archived_assets": "Δε βρέθηκαν αρχειοθετημένα στοιχεία", "archive_page_title": "Αρχειοθέτηση ({})", - "asset_action_delete_err_read_only": "Cannot delete read only asset(s), skipping", - "asset_action_share_err_offline": "Cannot fetch offline asset(s), skipping", - "asset_list_group_by_sub_title": "Group by", + "asset_action_delete_err_read_only": "Δεν είναι δυνατή η διαγραφή στοιχείων μόνο για ανάγνωση, παραλείπεται", + "asset_action_share_err_offline": "Δεν είναι δυνατή η ανάκτηση στοιχείων εκτός σύνδεσης, παραλείπεται", + "asset_list_group_by_sub_title": "Ομαδοποίηση κατά", "asset_list_layout_settings_dynamic_layout_title": "Δυναμική διάταξη", "asset_list_layout_settings_group_automatically": "Αυτόματα", "asset_list_layout_settings_group_by": "Ομαδοποίηση στοιχείων ανά", "asset_list_layout_settings_group_by_month": "Μήνας", "asset_list_layout_settings_group_by_month_day": "Μήνας + ημέρα", - "asset_list_layout_sub_title": "Layout", + "asset_list_layout_sub_title": "Διάταξη", "asset_list_settings_subtitle": "Ρυθμίσεις διάταξης πλέγματος φωτογραφιών", "asset_list_settings_title": "Πλέγμα φωτογραφιών", - "asset_restored_successfully": "Asset restored successfully", - "assets_deleted_permanently": "{} asset(s) deleted permanently", - "assets_deleted_permanently_from_server": "{} asset(s) deleted permanently from the Immich server", - "assets_removed_permanently_from_device": "{} asset(s) removed permanently from your device", - "assets_restored_successfully": "{} asset(s) restored successfully", - "assets_trashed": "{} asset(s) trashed", - "assets_trashed_from_server": "{} asset(s) trashed from the Immich server", - "asset_viewer_settings_title": "Asset Viewer", + "asset_restored_successfully": "Το στοιχείο αποκαταστάθηκε με επιτυχία", + "assets_deleted_permanently": "{} στοιχείο(α) διαγράφηκαν οριστικά", + "assets_deleted_permanently_from_server": "{} στοιχείο(α) διαγράφηκαν οριστικά από τον διακομιστή Immich", + "assets_removed_permanently_from_device": "{} στοιχεία καταργήθηκαν οριστικά από τη συσκευή σας", + "assets_restored_successfully": "{} στοιχεία αποκαταστάθηκαν με επιτυχία", + "assets_trashed": "{} στοιχεία μεταφέρθηκαν στον κάδο απορριμμάτων", + "assets_trashed_from_server": "{} στοιχεία μεταφέρθηκαν στον κάδο απορριμμάτων από τον διακομιστή Immich", + "asset_viewer_settings_title": "Προβολή Στοιχείων", "backup_album_selection_page_albums_device": "Άλμπουμ στη συσκευή ({})", "backup_album_selection_page_albums_tap": "Πάτημα για συμπερίληψη, διπλό πάτημα για εξαίρεση", "backup_album_selection_page_assets_scatter": "Τα στοιχεία μπορεί να διασκορπιστούν σε πολλά άλμπουμ. Έτσι, τα άλμπουμ μπορούν να περιληφθούν ή να εξαιρεθούν κατά τη διαδικασία δημιουργίας αντιγράφων ασφαλείας.", @@ -130,7 +130,7 @@ "backup_manual_in_progress": "Μεταφόρτωση σε εξέλιξη. Δοκιμάστε αργότερα", "backup_manual_success": "Επιτυχία", "backup_manual_title": "Κατάσταση μεταφόρτωσης", - "backup_options_page_title": "Backup options", + "backup_options_page_title": "Επιλογές αντιγράφων ασφαλείας", "cache_settings_album_thumbnails": "Μικρογραφίες σελίδας βιβλιοθήκης ({} στοιχεία)", "cache_settings_clear_cache_button": "Εκκαθάριση προσωρινής μνήμης", "cache_settings_clear_cache_button_title": "Καθαρίζει τη προσωρινή μνήμη της εφαρμογής. Αυτό θα επηρεάσει σημαντικά την απόδοση της εφαρμογής μέχρι να αναδημιουργηθεί η προσωρινή μνήμη.", @@ -154,21 +154,21 @@ "change_password_form_new_password": "Νέος Κωδικός", "change_password_form_password_mismatch": "Οι κωδικοί δεν ταιριάζουν", "change_password_form_reenter_new_password": "Επανεισαγωγή Νέου Κωδικού", - "client_cert_dialog_msg_confirm": "OK", - "client_cert_enter_password": "Enter Password", - "client_cert_import": "Import", - "client_cert_import_success_msg": "Client certificate is imported", - "client_cert_invalid_msg": "Invalid certificate file or wrong password", - "client_cert_remove": "Remove", - "client_cert_remove_msg": "Client certificate is removed", - "client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login", - "client_cert_title": "SSL Client Certificate", + "client_cert_dialog_msg_confirm": "ΟΚ", + "client_cert_enter_password": "Εισαγάγετε κωδικό πρόσβασης", + "client_cert_import": "Εισαγωγή", + "client_cert_import_success_msg": "Το πιστοποιητικό πελάτη εισάγεται", + "client_cert_invalid_msg": "Μη έγκυρο αρχείο πιστοποιητικού ή λάθος κωδικός πρόσβασης", + "client_cert_remove": "Αφαίρεση", + "client_cert_remove_msg": "Το πιστοποιητικό πελάτη καταργήθηκε", + "client_cert_subtitle": "Υποστηρίζει μόνο τη μορφή PKCS12 (.p12, .pfx). Η Εισαγωγή/Αφαίρεση πιστοποιητικού είναι διαθέσιμη μόνο πριν από τη σύνδεση", + "client_cert_title": "Πιστοποιητικό πελάτη SSL", "common_add_to_album": "Προσθήκη στο άλμπουμ", "common_change_password": "Αλλαγή Κωδικού", "common_create_new_album": "Δημιουργία νέου άλμπουμ", "common_server_error": "Ελέγξτε τη σύνδεσή σας, βεβαιωθείτε ότι ο διακομιστής είναι προσβάσιμος και ότι οι εκδόσεις της εφαρμογής/διακομιστή είναι συμβατές.", "common_shared": "Κοινόχρηστο", - "contextual_search": "Sunrise on the beach", + "contextual_search": "Ανατολή στην παραλία", "control_bottom_app_bar_add_to_album": "Προσθήκη στο άλμπουμ", "control_bottom_app_bar_album_info": "{} αντικείμενα", "control_bottom_app_bar_album_info_shared": "{} αντικείμενα · Κοινόχρηστα", @@ -177,8 +177,8 @@ "control_bottom_app_bar_delete": "Διαγραφή", "control_bottom_app_bar_delete_from_immich": "Διαγραφή από το Immich", "control_bottom_app_bar_delete_from_local": "Διαγραφή από τη συσκευή", - "control_bottom_app_bar_download": "Download", - "control_bottom_app_bar_edit": "Edit", + "control_bottom_app_bar_download": "Λήψη", + "control_bottom_app_bar_edit": "Επεξεργασία", "control_bottom_app_bar_edit_location": "Επεξεργασία Τοποθεσίας", "control_bottom_app_bar_edit_time": "Επεξεργασία Ημερομηνίας & Ώρας", "control_bottom_app_bar_favorite": "Προσθήκη στα αγαπημένα", @@ -189,14 +189,14 @@ "control_bottom_app_bar_unarchive": "Αναίρεση αρχειοθέτησης", "control_bottom_app_bar_unfavorite": "Κατάργηση από τα αγαπημένα", "control_bottom_app_bar_upload": "Μεταφόρτωση", - "create_album": "Create album", + "create_album": "Δημιουργία άλμπουμ", "create_album_page_untitled": "Χωρίς τίτλο", - "create_new": "CREATE NEW", + "create_new": "ΔΗΜΙΟΥΡΓΙΑ ΝΕΟΥ", "create_shared_album_page_create": "Δημιουργία", "create_shared_album_page_share": "Κοινοποίηση", "create_shared_album_page_share_add_assets": "ΠΡΟΣΘΗΚΗ ΣΤΟΙΧΕΙΩΝ", "create_shared_album_page_share_select_photos": "Επιλέξτε Φωτογραφίες", - "crop": "Crop", + "crop": "Αποκοπή", "curated_location_page_title": "Τοποθεσίες", "curated_object_page_title": "Πράγματα", "daily_title_text_date": "Ε, MMM dd", @@ -208,174 +208,174 @@ "delete_dialog_alert_remote": "Αυτά τα αντικείμενα θα διαγραφούν οριστικά από τον διακομιστή Immich", "delete_dialog_cancel": "Ακύρωση", "delete_dialog_ok": "Διαγραφή", - "delete_dialog_ok_force": "Delete Anyway", + "delete_dialog_ok_force": "Διαγραφή όπως και να έχει", "delete_dialog_title": "Οριστική Διαγραφή", - "delete_local_dialog_ok_backed_up_only": "Delete Backed Up Only", - "delete_local_dialog_ok_force": "Delete Anyway", + "delete_local_dialog_ok_backed_up_only": "Διαγραφή μόνο των αντιγράφων ασφαλείας", + "delete_local_dialog_ok_force": "Διαγραφή όπως και να έχει", "delete_shared_link_dialog_content": "Σίγουρα θέλετε να διαγράψετε αυτόν τον κοινοποιημένο σύνδεσμο;", "delete_shared_link_dialog_title": "Διαγραφή Κοινοποιημένου Συνδέσμου", "description_input_hint_text": "Προσθήκη περιγραφής...", "description_input_submit_error": "Σφάλμα κατά την ενημέρωση της περιγραφής, ελέγξτε το αρχείο καταγραφής για περισσότερες λεπτομέρειες", - "download_canceled": "Download canceled", - "download_complete": "Download complete", - "download_enqueue": "Download enqueued", - "download_error": "Download Error", - "download_failed": "Download failed", - "download_filename": "file: {}", - "download_finished": "Download finished", - "downloading": "Downloading...", - "downloading_media": "Downloading media", - "download_notfound": "Download not found", - "download_paused": "Download paused", - "download_started": "Download started", - "download_sucess": "Download success", - "download_sucess_android": "The media has been downloaded to DCIM/Immich", - "download_waiting_to_retry": "Waiting to retry", + "download_canceled": "Η λήψη ακυρώθηκε", + "download_complete": "Η λήψη ολοκληρώθηκε", + "download_enqueue": "Η λήψη τέθηκε σε ουρά", + "download_error": "Σφάλμα λήψης", + "download_failed": "Η λήψη απέτυχε", + "download_filename": "αρχείο: {}", + "download_finished": "Η λήψη ολοκληρώθηκε", + "downloading": "Λήψη...", + "downloading_media": "Λήψη πολυμέσων", + "download_notfound": "Το αρχείο δεν βρέθηκε", + "download_paused": "Η λήψη διακόπηκε", + "download_started": "Η λήψη ξεκίνησε", + "download_sucess": "Επιτυχία λήψης", + "download_sucess_android": "Το μέσο έχει ληφθεί στο DCIM/Immich", + "download_waiting_to_retry": "Αναμονή για επανάληψη", "edit_date_time_dialog_date_time": "Ημερομηνία και Ώρα", "edit_date_time_dialog_timezone": "Ζώνη ώρας", - "edit_image_title": "Edit", + "edit_image_title": "Επεξεργασία", "edit_location_dialog_title": "Τοποθεσία", - "error_saving_image": "Error: {}", + "error_saving_image": "Σφάλμα: {}", "exif_bottom_sheet_description": "Προσθήκη Περιγραφής...", "exif_bottom_sheet_details": "ΛΕΠΤΟΜΕΡΕΙΕΣ", "exif_bottom_sheet_location": "ΤΟΠΟΘΕΣΙΑ", "exif_bottom_sheet_location_add": "Προσθήκη τοποθεσίας", - "exif_bottom_sheet_people": "PEOPLE", - "exif_bottom_sheet_person_add_person": "Add name", + "exif_bottom_sheet_people": "ΑΝΘΡΩΠΟΙ", + "exif_bottom_sheet_person_add_person": "Προσθήκη ονόματος", "experimental_settings_new_asset_list_subtitle": "Σε εξέλιξη", "experimental_settings_new_asset_list_title": "Ενεργοποίηση πειραματικού πλέγματος φωτογραφιών", "experimental_settings_subtitle": "Χρησιμοποιείτε με δική σας ευθύνη!", "experimental_settings_title": "Πειραματικό", - "favorites": "Favorites", + "favorites": "Αγαπημένα", "favorites_page_no_favorites": "Δεν βρέθηκαν αγαπημένα στοιχεία", "favorites_page_title": "Αγαπημένα", - "filename_search": "File name or extension", - "filter": "Filter", - "haptic_feedback_switch": "Enable haptic feedback", - "haptic_feedback_title": "Haptic Feedback", - "header_settings_add_header_tip": "Add Header", - "header_settings_field_validator_msg": "Value cannot be empty", - "header_settings_header_name_input": "Header name", - "header_settings_header_value_input": "Header value", - "header_settings_page_title": "Proxy Headers", - "headers_settings_tile_subtitle": "Define proxy headers the app should send with each network request", - "headers_settings_tile_title": "Custom proxy headers", + "filename_search": "Όνομα αρχείου ή επέκταση", + "filter": "Φίλτρο", + "haptic_feedback_switch": "Ενεργοποίηση απτικής ανάδρασης", + "haptic_feedback_title": "Απτική Ανάδραση", + "header_settings_add_header_tip": "Προσθήκη Κεφαλίδας", + "header_settings_field_validator_msg": "Η τιμή δεν μπορεί να είναι κενή", + "header_settings_header_name_input": "Όνομα κεφαλίδας", + "header_settings_header_value_input": "Τιμή κεφαλίδας", + "header_settings_page_title": "Κεφαλίδες διακομιστή μεσολάβησης", + "headers_settings_tile_subtitle": "Καθορίστε τις κεφαλίδες διακομιστή μεσολάβησης που θα πρέπει να στέλνει η εφαρμογή με κάθε αίτημα δικτύου", + "headers_settings_tile_title": "Προσαρμοσμένες κεφαλίδες διακομιστή μεσολάβησης", "home_page_add_to_album_conflicts": "Προστέθηκαν {added} στοιχεία στο άλμπουμ {album}. {failed} στοιχεία υπάρχουν ήδη στο άλμπουμ.", "home_page_add_to_album_err_local": "Δεν είναι ακόμη δυνατή η προσθήκη τοπικών στοιχείων σε άλμπουμ, παράβλεψη", "home_page_add_to_album_success": "Προστέθηκαν {added} στοιχεία στο άλμπουμ {album}.", - "home_page_album_err_partner": "Can not add partner assets to an album yet, skipping", - "home_page_archive_err_local": "Can not archive local assets yet, skipping", - "home_page_archive_err_partner": "Can not archive partner assets, skipping", - "home_page_building_timeline": "Building the timeline", - "home_page_delete_err_partner": "Can not delete partner assets, skipping", - "home_page_delete_remote_err_local": "Local assets in delete remote selection, skipping", - "home_page_favorite_err_local": "Can not favorite local assets yet, skipping", - "home_page_favorite_err_partner": "Can not favorite partner assets yet, skipping", - "home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).", - "home_page_share_err_local": "Can not share local assets via link, skipping", - "home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping", - "ignore_icloud_photos": "Ignore iCloud photos", - "ignore_icloud_photos_description": "Photos that are stored on iCloud will not be uploaded to the Immich server", - "image_saved_successfully": "Image saved", - "image_viewer_page_state_provider_download_error": "Download Error", - "image_viewer_page_state_provider_download_started": "Download Started", - "image_viewer_page_state_provider_download_success": "Download Success", - "image_viewer_page_state_provider_share_error": "Share Error", - "invalid_date": "Invalid date", - "invalid_date_format": "Invalid date format", - "library": "Library", - "library_page_albums": "Albums", - "library_page_archive": "Archive", - "library_page_device_albums": "Albums on Device", - "library_page_favorites": "Favorites", - "library_page_new_album": "New album", - "library_page_sharing": "Sharing", - "library_page_sort_asset_count": "Number of assets", - "library_page_sort_created": "Created date", - "library_page_sort_last_modified": "Last modified", - "library_page_sort_most_oldest_photo": "Oldest photo", - "library_page_sort_most_recent_photo": "Most recent photo", - "library_page_sort_title": "Album title", - "location_picker_choose_on_map": "Choose on map", - "location_picker_latitude": "Latitude", - "location_picker_latitude_error": "Enter a valid latitude", - "location_picker_latitude_hint": "Enter your latitude here", - "location_picker_longitude": "Longitude", - "location_picker_longitude_error": "Enter a valid longitude", - "location_picker_longitude_hint": "Enter your longitude here", + "home_page_album_err_partner": "Δεν είναι δυνατή η προσθήκη στοιχείων συντρόφου σε ένα άλμπουμ ακόμα, παραλείπεται", + "home_page_archive_err_local": "Δεν είναι δυνατή η αρχειοθέτηση τοπικών στοιχείων ακόμα, παραλείπεται", + "home_page_archive_err_partner": "Δεν είναι δυνατή η αρχειοθέτηση στοιχείων συντρόφου, παραλείπεται", + "home_page_building_timeline": "Χτίζεται το χρονοδιάγραμμα", + "home_page_delete_err_partner": "Δεν είναι δυνατή η διαγραφή στοιχείων συντρόφου, παραλείπεται", + "home_page_delete_remote_err_local": "Τοπικά στοιχεία στη διαγραφή απομακρυσμένης επιλογής, παραλείπεται", + "home_page_favorite_err_local": "Δεν μπορώ ακόμα να αγαπήσω τα τοπικά στοιχεία, παραλείπεται", + "home_page_favorite_err_partner": "Δεν είναι ακόμα δυνατή η πρόσθεση στοιχείων συντρόφου στα αγαπημένα, παραλείπεται", + "home_page_first_time_notice": "Εάν αυτή είναι η πρώτη φορά που χρησιμοποιείτε την εφαρμογή, βεβαιωθείτε ότι έχετε επιλέξει ένα άλμπουμ αντίγραφου ασφαλείας, ώστε το χρονοδιάγραμμα να μπορεί να συμπληρώσει φωτογραφίες και βίντεο στα άλμπουμ.", + "home_page_share_err_local": "Δεν είναι δυνατή η κοινή χρήση τοπικών στοιχείων μέσω συνδέσμου, παραλείπεται", + "home_page_upload_err_limit": "Μπορείτε να ανεβάσετε μόνο 30 στοιχεία κάθε φορά, παραλείπεται", + "ignore_icloud_photos": "Αγνοήστε τις φωτογραφίες iCloud", + "ignore_icloud_photos_description": "Οι φωτογραφίες που είναι αποθηκευμένες στο iCloud δεν θα μεταφορτωθούν στον διακομιστή Immich", + "image_saved_successfully": "Η εικόνα αποθηκεύτηκε", + "image_viewer_page_state_provider_download_error": "Σφάλμα Λήψης", + "image_viewer_page_state_provider_download_started": "Ξεκίνησε Λήψη", + "image_viewer_page_state_provider_download_success": "Επιτυχία Λήψης", + "image_viewer_page_state_provider_share_error": "Σφάλμα Κοινής Χρήσης", + "invalid_date": "Μη έγκυρη ημερομηνία", + "invalid_date_format": "Μη έγκυρη μορφή ημερομηνίας", + "library": "Βιβλιοθήκη", + "library_page_albums": "Άλμπουμ", + "library_page_archive": "Αρχείο", + "library_page_device_albums": "Άλμπουμ στη Συσκευή", + "library_page_favorites": "Αγαπημένα", + "library_page_new_album": "Νέο άλμπουμ", + "library_page_sharing": "Κοινή Χρήση", + "library_page_sort_asset_count": "Αριθμός στοιχείων", + "library_page_sort_created": "Ημερομηνία δημιουργίας", + "library_page_sort_last_modified": "Τελευταία τροποποίηση", + "library_page_sort_most_oldest_photo": "Πιο παλιά φωτογραφία", + "library_page_sort_most_recent_photo": "Πιο πρόσφατη φωτογραφία", + "library_page_sort_title": "Τίτλος άλμπουμ", + "location_picker_choose_on_map": "Επιλέξτε στο χάρτη", + "location_picker_latitude": "Γεωγραφικό πλάτος", + "location_picker_latitude_error": "Εισαγάγετε ένα έγκυρο γεωγραφικό πλάτος", + "location_picker_latitude_hint": "Εισαγάγετε το γεωγραφικό πλάτος σας εδώ", + "location_picker_longitude": "Γεωγραφικό μήκος", + "location_picker_longitude_error": "Εισαγάγετε ένα έγκυρο γεωγραφικό μήκος", + "location_picker_longitude_hint": "Εισαγάγετε εδώ το γεωγραφικό σας μήκος", "login_disabled": "Η σύνδεση έχει απενεργοποιηθεί", - "login_form_api_exception": "API exception. Please check the server URL and try again.", - "login_form_back_button_text": "Back", - "login_form_button_text": "Login", - "login_form_email_hint": "youremail@email.com", - "login_form_endpoint_hint": "http://your-server-ip:port/api", - "login_form_endpoint_url": "Server Endpoint URL", - "login_form_err_http": "Please specify http:// or https://", - "login_form_err_invalid_email": "Invalid Email", - "login_form_err_invalid_url": "Invalid URL", - "login_form_err_leading_whitespace": "Leading whitespace", - "login_form_err_trailing_whitespace": "Trailing whitespace", - "login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL", - "login_form_failed_get_oauth_server_disable": "OAuth feature is not available on this server", - "login_form_failed_login": "Error logging you in, check server URL, email and password", - "login_form_handshake_exception": "There was an Handshake Exception with the server. Enable self-signed certificate support in the settings if you are using a self-signed certificate.", + "login_form_api_exception": "Εξαίρεση API. Ελέγξτε τη διεύθυνση URL του διακομιστή και δοκιμάστε ξανά.", + "login_form_back_button_text": "Πίσω", + "login_form_button_text": "Σύνδεση", + "login_form_email_hint": "to-email-sou@email.com", + "login_form_endpoint_hint": "http://ip-tou-server-sou:porta/api", + "login_form_endpoint_url": "URL τελικού σημείου διακομιστή", + "login_form_err_http": "Προσδιορίστε http:// ή https://", + "login_form_err_invalid_email": "Μη έγκυρο email", + "login_form_err_invalid_url": "Μη έγκυρη διεύθυνση URL", + "login_form_err_leading_whitespace": "Κενό διάστημα στην αρχή", + "login_form_err_trailing_whitespace": "Κενό διάστημα στο τέλος", + "login_form_failed_get_oauth_server_config": "Σφάλμα καταγραφής χρησιμοποιώντας το OAuth, ελέγξτε τη διεύθυνση URL του διακομιστή", + "login_form_failed_get_oauth_server_disable": "Η δυνατότητα OAuth δεν είναι διαθέσιμη σε αυτόν τον διακομιστή", + "login_form_failed_login": "Σφάλμα κατά τη σύνδεσή σας, ελέγξτε τη διεύθυνση URL του διακομιστή, το email και τον κωδικό πρόσβασης", + "login_form_handshake_exception": "Υπήρξε σφάλμα χειραψίας με τον διακομιστή. Ενεργοποιήστε την υποστήριξη αυτο-υπογεγραμμένου πιστοποιητικού στις ρυθμίσεις εάν χρησιμοποιείτε αυτο-υπογεγραμμένο πιστοποιητικό.", "login_form_label_email": "Email", - "login_form_label_password": "Password", - "login_form_next_button": "Next", - "login_form_password_hint": "password", - "login_form_save_login": "Stay logged in", - "login_form_server_empty": "Enter a server URL.", - "login_form_server_error": "Could not connect to server.", - "login_password_changed_error": "There was an error updating your password", - "login_password_changed_success": "Password updated successfully", - "map_assets_in_bound": "{} photo", - "map_assets_in_bounds": "{} photos", - "map_cannot_get_user_location": "Cannot get user's location", - "map_location_dialog_cancel": "Cancel", - "map_location_dialog_yes": "Yes", - "map_location_picker_page_use_location": "Use this location", - "map_location_service_disabled_content": "Location service needs to be enabled to display assets from your current location. Do you want to enable it now?", - "map_location_service_disabled_title": "Location Service disabled", - "map_no_assets_in_bounds": "No photos in this area", - "map_no_location_permission_content": "Location permission is needed to display assets from your current location. Do you want to allow it now?", - "map_no_location_permission_title": "Location Permission denied", - "map_settings_dark_mode": "Dark mode", - "map_settings_date_range_option_all": "All", - "map_settings_date_range_option_day": "Past 24 hours", - "map_settings_date_range_option_days": "Past {} days", - "map_settings_date_range_option_year": "Past year", - "map_settings_date_range_option_years": "Past {} years", - "map_settings_dialog_cancel": "Cancel", - "map_settings_dialog_save": "Save", - "map_settings_dialog_title": "Map Settings", - "map_settings_include_show_archived": "Include Archived", - "map_settings_include_show_partners": "Include Partners", - "map_settings_only_relative_range": "Date range", - "map_settings_only_show_favorites": "Show Favorite Only", - "map_settings_theme_settings": "Map Theme", - "map_zoom_to_see_photos": "Zoom out to see photos", - "memories_all_caught_up": "All caught up", - "memories_check_back_tomorrow": "Check back tomorrow for more memories", - "memories_start_over": "Start Over", - "memories_swipe_to_close": "Swipe up to close", - "memories_year_ago": "A year ago", - "memories_years_ago": "{} years ago", - "monthly_title_text_date_format": "MMMM y", - "motion_photos_page_title": "Motion Photos", - "multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping", - "multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping", - "my_albums": "My albums", - "no_assets_to_show": "No assets to show", - "no_name": "No name", - "notification_permission_dialog_cancel": "Cancel", - "notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.", - "notification_permission_dialog_settings": "Settings", - "notification_permission_list_tile_content": "Grant permission to enable notifications.", - "notification_permission_list_tile_enable_button": "Enable Notifications", - "notification_permission_list_tile_title": "Notification Permission", - "on_this_device": "On this device", - "partner_list_user_photos": "{user}'s photos", - "partner_list_view_all": "View all", + "login_form_label_password": "Κωδικός Πρόσβασης", + "login_form_next_button": "Επόμενος", + "login_form_password_hint": "κωδικός πρόσβασης", + "login_form_save_login": "Μείνετε συνδεδεμένοι", + "login_form_server_empty": "Εισαγάγετε μια διεύθυνση URL διακομιστή.", + "login_form_server_error": "Δεν ήταν δυνατή η σύνδεση με τον διακομιστή.", + "login_password_changed_error": "Παρουσιάστηκε σφάλμα κατά την ενημέρωση του κωδικού πρόσβασής σας", + "login_password_changed_success": "Ο κωδικός πρόσβασης ενημερώθηκε με επιτυχία", + "map_assets_in_bound": "{} φωτογραφία", + "map_assets_in_bounds": "{} φωτογραφίες", + "map_cannot_get_user_location": "Δεν είναι δυνατή η λήψη της τοποθεσίας του χρήστη", + "map_location_dialog_cancel": "Ακύρωση", + "map_location_dialog_yes": "Ναι", + "map_location_picker_page_use_location": "Χρησιμοποιήστε αυτήν την τοποθεσία", + "map_location_service_disabled_content": "Η υπηρεσία τοποθεσίας πρέπει να είναι ενεργοποιημένη για την εμφάνιση στοιχείων από την τρέχουσα τοποθεσία σας. Θέλετε να το ενεργοποιήσετε τώρα;", + "map_location_service_disabled_title": "Η υπηρεσία τοποθεσίας απενεργοποιήθηκε", + "map_no_assets_in_bounds": "Δεν υπάρχουν φωτογραφίες σε αυτήν την περιοχή", + "map_no_location_permission_content": "Απαιτείται άδεια τοποθεσίας για την εμφάνιση στοιχείων από την τρέχουσα τοποθεσία σας. Θέλετε να το επιτρέψετε τώρα;", + "map_no_location_permission_title": "Η άδεια τοποθεσίας απορρίφθηκε", + "map_settings_dark_mode": "Σκοτεινή λειτουργία", + "map_settings_date_range_option_all": "Όλοι", + "map_settings_date_range_option_day": "Προηγούμενες 24 ώρες", + "map_settings_date_range_option_days": "Προηγούμενες {} ημέρες", + "map_settings_date_range_option_year": "Προηγούμενο έτος", + "map_settings_date_range_option_years": "Προηγούμενα {} έτη", + "map_settings_dialog_cancel": "Ακύρωση", + "map_settings_dialog_save": "Αποθήκευση", + "map_settings_dialog_title": "Ρυθμίσεις Χάρτη", + "map_settings_include_show_archived": "Συμπεριλάβετε Αρχειοθετημένα", + "map_settings_include_show_partners": "Συμπεριλάβετε Συντρόφους", + "map_settings_only_relative_range": "Εύρος ημερομηνιών", + "map_settings_only_show_favorites": "Εμφάνιση μόνο αγαπημένων", + "map_settings_theme_settings": "Θέμα χάρτη", + "map_zoom_to_see_photos": "Σμικρύνετε για να δείτε φωτογραφίες", + "memories_all_caught_up": "Συγχρονισμένα", + "memories_check_back_tomorrow": "Ελέγξτε ξανά αύριο για περισσότερες αναμνήσεις", + "memories_start_over": "Ξεκινήστε από την αρχή", + "memories_swipe_to_close": "Σύρετε προς τα πάνω για να κλείσετε", + "memories_year_ago": "Πριν ένα χρόνο", + "memories_years_ago": "Πριν από {} χρόνια", + "monthly_title_text_date_format": "ΜΜΜΜ y", + "motion_photos_page_title": "Κινούμενες Φωτογραφίες", + "multiselect_grid_edit_date_time_err_read_only": "Δεν είναι δυνατή η επεξεργασία της ημερομηνίας των στοιχείων μόνο για ανάγνωση, παραλείπεται", + "multiselect_grid_edit_gps_err_read_only": "Δεν είναι δυνατή η επεξεργασία της τοποθεσίας των στοιχείων μόνο για ανάγνωση, παραλείπεται", + "my_albums": "Τα άλμπουμ μου", + "no_assets_to_show": "Δεν υπάρχουν στοιχεία προς εμφάνιση", + "no_name": "Κανένα όνομα", + "notification_permission_dialog_cancel": "Ακύρωση", + "notification_permission_dialog_content": "Για να ενεργοποιήσετε τις ειδοποιήσεις, μεταβείτε στις Ρυθμίσεις και επιλέξτε να επιτρέπεται.", + "notification_permission_dialog_settings": "Ρυθμίσεις", + "notification_permission_list_tile_content": "Παραχωρήστε άδεια για ενεργοποίηση ειδοποιήσεων.", + "notification_permission_list_tile_enable_button": "Ενεργοποίηση Ειδοποιήσεων", + "notification_permission_list_tile_title": "Άδεια Ειδοποίησης", + "on_this_device": "Σε αυτή τη συσκευή", + "partner_list_user_photos": "Φωτογραφίες του/της {user}", + "partner_list_view_all": "Προβολή όλων", "partner_page_add_partner": "Προσθήκη συντρόφου", "partner_page_empty_message": "Οι φωτογραφίες σας δεν διαμοιράζονται ακόμα με κανέναν.", "partner_page_no_more_users": "Δεν υπάρχουν άλλοι χρήστες για προσθήκη", @@ -385,241 +385,241 @@ "partner_page_stop_sharing_content": "Ο/Η {} δεν θα μπορεί πλέον να δει τις φωτογραφίες σας.", "partner_page_stop_sharing_title": "Θέλετε να σταματήσετε να μοιράζεστε τις φωτογραφίες σας;", "partner_page_title": "Σύντροφος", - "partners": "Partners", - "people": "People", + "partners": "Σύντροφοι", + "people": "Ανθρωποι", "permission_onboarding_back": "Πίσω", - "permission_onboarding_continue_anyway": "Continue anyway", - "permission_onboarding_get_started": "Get started", - "permission_onboarding_go_to_settings": "Go to settings", - "permission_onboarding_grant_permission": "Grant permission", - "permission_onboarding_log_out": "Log out", - "permission_onboarding_permission_denied": "Permission denied. To use Immich, grant photo and video permissions in Settings.", - "permission_onboarding_permission_granted": "Permission granted! You are all set.", - "permission_onboarding_permission_limited": "Permission limited. To let Immich backup and manage your entire gallery collection, grant photo and video permissions in Settings.", - "permission_onboarding_request": "Immich requires permission to view your photos and videos.", - "places": "Places", - "preferences_settings_title": "Preferences", - "profile_drawer_app_logs": "Logs", - "profile_drawer_client_out_of_date_major": "Mobile App is out of date. Please update to the latest major version.", - "profile_drawer_client_out_of_date_minor": "Mobile App is out of date. Please update to the latest minor version.", - "profile_drawer_client_server_up_to_date": "Client and Server are up-to-date", - "profile_drawer_documentation": "Documentation", + "permission_onboarding_continue_anyway": "Συνέχεια", + "permission_onboarding_get_started": "Ξεκινήστε", + "permission_onboarding_go_to_settings": "Μεταβείτε στις ρυθμίσεις", + "permission_onboarding_grant_permission": "Χορήγηση άδειας", + "permission_onboarding_log_out": "Αποσυνδεθείτε", + "permission_onboarding_permission_denied": "Η άδεια απορρίφθηκε. Για να χρησιμοποιήσετε το Immich, παραχωρήστε δικαιώματα φωτογραφίας και βίντεο στις Ρυθμίσεις.", + "permission_onboarding_permission_granted": "Δόθηκε άδεια! Είστε έτοιμοι.", + "permission_onboarding_permission_limited": "Περιορισμένη άδεια. Για να επιτρέψετε στο Immich να δημιουργεί αντίγραφα ασφαλείας και να διαχειρίζεται ολόκληρη τη συλλογή σας, παραχωρήστε άδειες φωτογραφιών και βίντεο στις Ρυθμίσεις.", + "permission_onboarding_request": "Το Immich απαιτεί άδεια πρόσβασεις στις φωτογραφίες και τα βίντεό σας.", + "places": "Μέρη", + "preferences_settings_title": "Προτιμήσεις", + "profile_drawer_app_logs": "Καταγραφές", + "profile_drawer_client_out_of_date_major": "Παρακαλώ ενημερώστε την εφαρμογή στην πιο πρόσφατη κύρια έκδοση.", + "profile_drawer_client_out_of_date_minor": "Παρακαλώ ενημερώστε την εφαρμογή στην πιο πρόσφατη δευτερεύουσα έκδοση.", + "profile_drawer_client_server_up_to_date": "Ο πελάτης και ο διακομιστής είναι ενημερωμένοι", + "profile_drawer_documentation": "Απόδειξη με έγγραφα", "profile_drawer_github": "GitHub", - "profile_drawer_server_out_of_date_major": "Server is out of date. Please update to the latest major version.", - "profile_drawer_server_out_of_date_minor": "Server is out of date. Please update to the latest minor version.", - "profile_drawer_settings": "Settings", - "profile_drawer_sign_out": "Sign Out", - "profile_drawer_trash": "Trash", - "recently_added": "Recently added", - "recently_added_page_title": "Recently Added", - "save_to_gallery": "Save to gallery", - "scaffold_body_error_occurred": "Error occurred", - "search_albums": "Search albums", - "search_bar_hint": "Search your photos", - "search_filter_apply": "Apply filter", - "search_filter_camera": "Camera", - "search_filter_camera_make": "Make", - "search_filter_camera_model": "Model", - "search_filter_camera_title": "Select camera type", - "search_filter_date": "Date", - "search_filter_date_interval": "{start} to {end}", - "search_filter_date_title": "Select a date range", - "search_filter_display_option_archive": "Archive", - "search_filter_display_option_favorite": "Favorite", - "search_filter_display_option_not_in_album": "Not in album", - "search_filter_display_options": "Display Options", - "search_filter_display_options_title": "Display options", - "search_filter_location": "Location", - "search_filter_location_city": "City", - "search_filter_location_country": "Country", - "search_filter_location_state": "State", - "search_filter_location_title": "Select location", - "search_filter_media_type": "Media Type", - "search_filter_media_type_all": "All", - "search_filter_media_type_image": "Image", - "search_filter_media_type_title": "Select media type", - "search_filter_media_type_video": "Video", - "search_filter_people": "People", - "search_filter_people_title": "Select people", - "search_page_categories": "Categories", - "search_page_favorites": "Favorites", - "search_page_motion_photos": "Motion Photos", - "search_page_no_objects": "No Objects Info Available", - "search_page_no_places": "No Places Info Available", + "profile_drawer_server_out_of_date_major": "Παρακαλώ ενημερώστε τον διακομιστή στην πιο πρόσφατη κύρια έκδοση.", + "profile_drawer_server_out_of_date_minor": "Παρακαλώ ενημερώστε τον διακομιστή στην πιο πρόσφατη δευτερεύουσα έκδοση.", + "profile_drawer_settings": "Ρυθμίσεις", + "profile_drawer_sign_out": "Αποσύνδεση", + "profile_drawer_trash": "Σκουπίδια", + "recently_added": "Προστέθηκαν πρόσφατα", + "recently_added_page_title": "Προστέθηκαν Πρόσφατα", + "save_to_gallery": "Αποθήκευση στη συλλογή", + "scaffold_body_error_occurred": "Παρουσιάστηκε σφάλμα", + "search_albums": "Αναζήτηση άλμπουμ", + "search_bar_hint": "Αναζητήστε τις φωτογραφίες σας", + "search_filter_apply": "Εφαρμογή φίλτρου", + "search_filter_camera": "Κάμερα", + "search_filter_camera_make": "Μάρκα", + "search_filter_camera_model": "Μοντέλο", + "search_filter_camera_title": "Επιλέξτε τύπο κάμερας", + "search_filter_date": "Ημερομηνία", + "search_filter_date_interval": "{start} έως {end}", + "search_filter_date_title": "Επιλέξτε εύρος ημερομηνιών", + "search_filter_display_option_archive": "Αρχείο", + "search_filter_display_option_favorite": "Αγαπημένο", + "search_filter_display_option_not_in_album": "Όχι στο άλμπουμ", + "search_filter_display_options": "Επιλογές εμφάνισης", + "search_filter_display_options_title": "Επιλογές εμφάνισης", + "search_filter_location": "Τοποθεσία", + "search_filter_location_city": "Πόλη", + "search_filter_location_country": "Χώρα", + "search_filter_location_state": "Πολιτεία", + "search_filter_location_title": "Επιλέξτε τοποθεσία", + "search_filter_media_type": "Τύπος Μέσου", + "search_filter_media_type_all": "Όλα", + "search_filter_media_type_image": "Εικόνα", + "search_filter_media_type_title": "Επιλέξτε τύπο μέσου", + "search_filter_media_type_video": "Βίντεο", + "search_filter_people": "Ανθρωποι", + "search_filter_people_title": "Επιλέξτε άτομα", + "search_page_categories": "Κατηγορίες", + "search_page_favorites": "Αγαπημένα", + "search_page_motion_photos": "Κινούμενες Φωτογραφίες", + "search_page_no_objects": "Μη διαθέσιμες πληροφορίες αντικειμένων", + "search_page_no_places": "Μη διαθέσιμες πληροφορίες για μέρη", "search_page_people": "Άτομα", - "search_page_person_add_name_dialog_cancel": "Cancel", - "search_page_person_add_name_dialog_hint": "Name", - "search_page_person_add_name_dialog_save": "Save", - "search_page_person_add_name_dialog_title": "Add a name", - "search_page_person_add_name_subtitle": "Find them fast by name with search", - "search_page_person_add_name_title": "Add a name", - "search_page_person_edit_name": "Edit name", - "search_page_places": "Places", - "search_page_recently_added": "Recently added", - "search_page_screenshots": "Screenshots", - "search_page_selfies": "Selfies", - "search_page_things": "Things", - "search_page_videos": "Videos", - "search_page_view_all_button": "View all", - "search_page_your_activity": "Your activity", - "search_page_your_map": "Your Map", - "search_result_page_new_search_hint": "New Search", - "search_suggestion_list_smart_search_hint_1": "Smart search is enabled by default, to search for metadata use the syntax ", - "search_suggestion_list_smart_search_hint_2": "m:your-search-term", - "select_additional_user_for_sharing_page_suggestions": "Suggestions", - "select_user_for_sharing_page_err_album": "Failed to create album", - "select_user_for_sharing_page_share_suggestions": "Suggestions", - "server_info_box_app_version": "App Version", + "search_page_person_add_name_dialog_cancel": "Ακύρωση", + "search_page_person_add_name_dialog_hint": "Όνομα", + "search_page_person_add_name_dialog_save": "Αποθήκευση", + "search_page_person_add_name_dialog_title": "Προσθέστε όνομα", + "search_page_person_add_name_subtitle": "Βρείτε τα γρήγορα ονομαστικά με αναζήτηση", + "search_page_person_add_name_title": "Προσθέστε ένα όνομα", + "search_page_person_edit_name": "Επεξεργασία ονόματος", + "search_page_places": "Μέρη", + "search_page_recently_added": "Προστέθηκε πρόσφατα", + "search_page_screenshots": "Στιγμιότυπα οθόνης", + "search_page_selfies": "Σέλφι", + "search_page_things": "Πράγματα", + "search_page_videos": "Βίντεο", + "search_page_view_all_button": "Προβολή όλων", + "search_page_your_activity": "Η δραστηριότητά σας", + "search_page_your_map": "Ο χάρτης σας", + "search_result_page_new_search_hint": "Νέα Αναζήτηση", + "search_suggestion_list_smart_search_hint_1": "Η έξυπνη αναζήτηση είναι ενεργοποιημένη από προεπιλογή, για αναζήτηση μεταδεδομένων χρησιμοποιήστε το συντακτικό", + "search_suggestion_list_smart_search_hint_2": "m:όρος-αναζήτησης", + "select_additional_user_for_sharing_page_suggestions": "Προτάσεις", + "select_user_for_sharing_page_err_album": "Αποτυχία δημιουργίας άλπουμ", + "select_user_for_sharing_page_share_suggestions": "Προτάσεις", + "server_info_box_app_version": "Έκδοση εφαρμογής", "server_info_box_latest_release": "Τελευταία Έκδοση", - "server_info_box_server_url": "Server URL", - "server_info_box_server_version": "Server Version", - "setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).", - "setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).", - "setting_image_viewer_original_title": "Load original image", - "setting_image_viewer_preview_subtitle": "Enable to load a medium-resolution image. Disable to either directly load the original or only use the thumbnail.", - "setting_image_viewer_preview_title": "Load preview image", - "setting_image_viewer_title": "Images", - "setting_languages_apply": "Apply", - "setting_languages_title": "Languages", - "setting_notifications_notify_failures_grace_period": "Notify background backup failures: {}", - "setting_notifications_notify_hours": "{} hours", - "setting_notifications_notify_immediately": "immediately", - "setting_notifications_notify_minutes": "{} minutes", - "setting_notifications_notify_never": "never", - "setting_notifications_notify_seconds": "{} seconds", - "setting_notifications_single_progress_subtitle": "Detailed upload progress information per asset", - "setting_notifications_single_progress_title": "Show background backup detail progress", - "setting_notifications_subtitle": "Adjust your notification preferences", - "setting_notifications_title": "Notifications", - "setting_notifications_total_progress_subtitle": "Overall upload progress (done/total assets)", - "setting_notifications_total_progress_title": "Show background backup total progress", - "setting_pages_app_bar_settings": "Settings", - "settings_require_restart": "Please restart Immich to apply this setting", - "setting_video_viewer_looping_subtitle": "Enable to automatically loop a video in the detail viewer.", - "setting_video_viewer_looping_title": "Looping", - "setting_video_viewer_title": "Videos", - "share_add": "Add", - "share_add_photos": "Add photos", - "share_add_title": "Add a title", - "share_assets_selected": "{} selected", - "share_create_album": "Create album", + "server_info_box_server_url": "URL διακομιστή", + "server_info_box_server_version": "Έκδοση Διακομιστή", + "setting_image_viewer_help": "Το πρόγραμμα προβολής λεπτομερειών φορτώνει πρώτα τη μικρογραφία, στη συνέχεια φορτώνει την προεπισκόπηση μεσαίου μεγέθους (αν είναι ενεργοποιημένη), τέλος φορτώνει το πρωτότυπο (αν είναι ενεργοποιημένο).", + "setting_image_viewer_original_subtitle": "Ενεργοποιήστε τη φόρτωση της πρωτότυπης εικόνας πλήρους ανάλυσης (μεγάλη!). Απενεργοποιήστε για να μειώσετε τη χρήση δεδομένων (τόσο στο δίκτυο όσο και στην κρυφή μνήμη της συσκευής).", + "setting_image_viewer_original_title": "Φόρτωση πρωτότυπης εικόνας", + "setting_image_viewer_preview_subtitle": "Ενεργοποιήστε τη φόρτωση μιας εικόνας μέσης ανάλυσης. Απενεργοποιήστε είτε για να φορτώνεται απευθείας το πρωτότυπο είτε για να χρησιμοποιείται μόνο η μικρογραφία.", + "setting_image_viewer_preview_title": "Φόρτωση εικόνας προεπισκόπησης", + "setting_image_viewer_title": "Εικόνες", + "setting_languages_apply": "Εφαρμόζω", + "setting_languages_title": "Γλώσσες", + "setting_notifications_notify_failures_grace_period": "Ειδοποίηση αποτυχιών δημιουργίας αντιγράφων ασφαλείας στο παρασκήνιο: {}", + "setting_notifications_notify_hours": "{} ώρες", + "setting_notifications_notify_immediately": "αμέσως", + "setting_notifications_notify_minutes": "{} λεπτά", + "setting_notifications_notify_never": "ποτέ", + "setting_notifications_notify_seconds": "{} δευτερόλεπτα", + "setting_notifications_single_progress_subtitle": "Λεπτομερείς πληροφορίες προόδου μεταφόρτωσης ανά στοιχείο", + "setting_notifications_single_progress_title": "Εμφάνιση προόδου λεπτομερειών δημιουργίας αντιγράφων ασφαλείας παρασκηνίου", + "setting_notifications_subtitle": "Προσαρμόστε τις προτιμήσεις ειδοποίησης", + "setting_notifications_title": "Ειδοποιήσεις", + "setting_notifications_total_progress_subtitle": "Συνολική πρόοδος μεταφόρτωσης (ολοκληρώθηκε/σύνολο στοιχείων)", + "setting_notifications_total_progress_title": "Εμφάνιση συνολικής προόδου δημιουργίας αντιγράφων ασφαλείας παρασκηνίου", + "setting_pages_app_bar_settings": "Ρυθμίσεις", + "settings_require_restart": "Επανεκκινήστε το Immich για να εφαρμόσετε αυτήν τη ρύθμιση", + "setting_video_viewer_looping_subtitle": "Ενεργοποιήστε για το αυτόματη συνεχής επανάληψη βίντεο στο πρόγραμμα προβολής λεπτομερειών.", + "setting_video_viewer_looping_title": "Συνεχής Επανάληψη", + "setting_video_viewer_title": "Βίντεο", + "share_add": "Πρόσθεση", + "share_add_photos": "Προσθήκη φωτογραφιών", + "share_add_title": "Προσθέστε έναν ίτλο", + "share_assets_selected": "{} επιλεγμένα", + "share_create_album": "Δημιουργία άλμπουμ", "shared_album_activities_input_disable": "Το σχόλιο είναι απενεργοποιημένο", - "shared_album_activities_input_hint": "Say something", - "shared_album_activity_remove_content": "Do you want to delete this activity?", - "shared_album_activity_remove_title": "Delete Activity", + "shared_album_activities_input_hint": "Πες κάτι", + "shared_album_activity_remove_content": "Θέλετε να διαγράψετε αυτήν τη δραστηριότητα;", + "shared_album_activity_remove_title": "Διαγραφή Δραστηριότητας", "shared_album_activity_setting_subtitle": "Επέτρεψε σε άλλους να απαντάνε", - "shared_album_activity_setting_title": "Comments & likes", - "shared_album_section_people_action_error": "Error leaving/removing from album", - "shared_album_section_people_action_leave": "Remove user from album", - "shared_album_section_people_action_remove_user": "Remove user from album", - "shared_album_section_people_owner_label": "Owner", - "shared_album_section_people_title": "PEOPLE", - "share_dialog_preparing": "Preparing...", - "shared_link_app_bar_title": "Shared Links", - "shared_link_clipboard_copied_massage": "Copied to clipboard", - "shared_link_clipboard_text": "Link: {}\nPassword: {}", - "shared_link_create_app_bar_title": "Create link to share", - "shared_link_create_error": "Error while creating shared link", - "shared_link_create_info": "Let anyone with the link see the selected photo(s)", - "shared_link_create_submit_button": "Create link", - "shared_link_edit_allow_download": "Allow public user to download", - "shared_link_edit_allow_upload": "Allow public user to upload", - "shared_link_edit_app_bar_title": "Edit link", - "shared_link_edit_change_expiry": "Change expiration time", - "shared_link_edit_description": "Description", - "shared_link_edit_description_hint": "Enter the share description", + "shared_album_activity_setting_title": "Σχόλια & likes", + "shared_album_section_people_action_error": "Σφάλμα αποχώρησης/κατάργησης από το άλμπουμ", + "shared_album_section_people_action_leave": "Αποχώρηση χρήστη από το άλμπουμ", + "shared_album_section_people_action_remove_user": "Κατάργηση χρήστη από το άλμπουμ", + "shared_album_section_people_owner_label": "Ιδιοκτήτης", + "shared_album_section_people_title": "ΑΝΘΡΩΠΟΙ", + "share_dialog_preparing": "Προετοιμασία...", + "shared_link_app_bar_title": "Κοινόχρηστοι Σύνδεσμοι", + "shared_link_clipboard_copied_massage": "Αντιγράφηκε στο πρόχειρο", + "shared_link_clipboard_text": "Σύνδεσμος: {}\nΚωδικός πρόσβασης: {}", + "shared_link_create_app_bar_title": "Δημιουργία συνδέσμου για κοινή χρήση", + "shared_link_create_error": "Σφάλμα κατά τη δημιουργία κοινόχρηστου συνδέσμου", + "shared_link_create_info": "Να επιτρέπεται σε οποιονδήποτε έχει τον σύνδεσμο να δει τις επιλεγμένες φωτογραφίες", + "shared_link_create_submit_button": "Δημιουργία συνδέσμου", + "shared_link_edit_allow_download": "Να επιτρέπεται η λήψη απο δημόσιο χρήστη", + "shared_link_edit_allow_upload": "Να επιτρέπεται η μεταφόρτωση απο δημόσιο χρήστη", + "shared_link_edit_app_bar_title": "Επεξεργασία συνδέσμου", + "shared_link_edit_change_expiry": "Αλλαγή χρόνου λήξης", + "shared_link_edit_description": "Περιγραφή", + "shared_link_edit_description_hint": "Εισαγάγετε την περιγραφή της κοινής χρήσης", "shared_link_edit_expire_after": "Λήξη μετά από", - "shared_link_edit_expire_after_option_day": "1 day", - "shared_link_edit_expire_after_option_days": "{} days", - "shared_link_edit_expire_after_option_hour": "1 hour", - "shared_link_edit_expire_after_option_hours": "{} hours", - "shared_link_edit_expire_after_option_minute": "1 minute", - "shared_link_edit_expire_after_option_minutes": "{} minutes", - "shared_link_edit_expire_after_option_months": "{} months", - "shared_link_edit_expire_after_option_never": "Never", - "shared_link_edit_expire_after_option_year": "{} year", - "shared_link_edit_password": "Password", - "shared_link_edit_password_hint": "Enter the share password", - "shared_link_edit_show_meta": "Show metadata", - "shared_link_edit_submit_button": "Update link", - "shared_link_empty": "You don't have any shared links", - "shared_link_error_server_url_fetch": "Cannot fetch the server url", - "shared_link_expired": "Expired", - "shared_link_expires_day": "Expires in {} day", - "shared_link_expires_days": "Expires in {} days", - "shared_link_expires_hour": "Expires in {} hour", - "shared_link_expires_hours": "Expires in {} hours", - "shared_link_expires_minute": "Expires in {} minute", - "shared_link_expires_minutes": "Expires in {} minutes", - "shared_link_expires_never": "Expires ∞", - "shared_link_expires_second": "Expires in {} second", - "shared_link_expires_seconds": "Expires in {} seconds", - "shared_link_individual_shared": "Individual shared", - "shared_link_info_chip_download": "Download", + "shared_link_edit_expire_after_option_day": "1 ημέρα", + "shared_link_edit_expire_after_option_days": "{} ημέρες", + "shared_link_edit_expire_after_option_hour": "1 ώρα", + "shared_link_edit_expire_after_option_hours": "{} ώρες", + "shared_link_edit_expire_after_option_minute": "1 λεπτό", + "shared_link_edit_expire_after_option_minutes": "{} λεπτά", + "shared_link_edit_expire_after_option_months": "{} μήνες", + "shared_link_edit_expire_after_option_never": "Ποτέ", + "shared_link_edit_expire_after_option_year": "{} έτος", + "shared_link_edit_password": "Κωδικός πρόσβασης", + "shared_link_edit_password_hint": "Εισαγάγετε τον κωδικό πρόσβασης κοινής χρήσης", + "shared_link_edit_show_meta": "Εμφάνιση μεταδεδομένων", + "shared_link_edit_submit_button": "Ενημέρωση συνδέσμου", + "shared_link_empty": "Δεν έχετε κοινόχρηστους συνδέσμους", + "shared_link_error_server_url_fetch": "Δεν είναι δυνατή η ανάκτηση του URL του διακομιστή", + "shared_link_expired": "Έληξε", + "shared_link_expires_day": "Λήγει σε {} ημέρα", + "shared_link_expires_days": "Λήγει σε {} ημέρες", + "shared_link_expires_hour": "Λήγει σε {} ώρα", + "shared_link_expires_hours": "Λήγει σε {} ώρες", + "shared_link_expires_minute": "Λήγει σε {} λεπτό", + "shared_link_expires_minutes": "Λήγει σε {} λεπτά", + "shared_link_expires_never": "Λήγει ∞", + "shared_link_expires_second": "Λήγει σε {} δευτερόλεπτο", + "shared_link_expires_seconds": "Λήγει σε {} δευτερόλεπτα", + "shared_link_individual_shared": "Μεμονωμένο κοινό", + "shared_link_info_chip_download": "Λήψη", "shared_link_info_chip_metadata": "EXIF", - "shared_link_info_chip_upload": "Upload", - "shared_link_manage_links": "Manage Shared links", - "shared_link_public_album": "Public album", - "shared_links": "Shared links", - "share_done": "Done", - "shared_with_me": "Shared with me", - "share_invite": "Invite to album", - "sharing_page_album": "Shared albums", - "sharing_page_description": "Create shared albums to share photos and videos with people in your network.", - "sharing_page_empty_list": "EMPTY LIST", - "sharing_silver_appbar_create_shared_album": "New shared album", - "sharing_silver_appbar_shared_links": "Shared links", - "sharing_silver_appbar_share_partner": "Share with partner", - "sync": "Sync", - "sync_albums": "Sync albums", - "sync_albums_manual_subtitle": "Sync all uploaded videos and photos to the selected backup albums", - "sync_upload_album_setting_subtitle": "Create and upload your photos and videos to the selected albums on Immich", - "tab_controller_nav_library": "Library", - "tab_controller_nav_photos": "Photos", - "tab_controller_nav_search": "Search", - "tab_controller_nav_sharing": "Sharing", - "theme_setting_asset_list_storage_indicator_title": "Show storage indicator on asset tiles", - "theme_setting_asset_list_tiles_per_row_title": "Number of assets per row ({})", - "theme_setting_colorful_interface_subtitle": "Apply primary color to background surfaces.", - "theme_setting_colorful_interface_title": "Colorful interface", - "theme_setting_dark_mode_switch": "Dark mode", - "theme_setting_image_viewer_quality_subtitle": "Adjust the quality of the detail image viewer", - "theme_setting_image_viewer_quality_title": "Image viewer quality", - "theme_setting_primary_color_subtitle": "Pick a color for primary actions and accents.", - "theme_setting_primary_color_title": "Primary color", - "theme_setting_system_primary_color_title": "Use system color", - "theme_setting_system_theme_switch": "Automatic (Follow system setting)", - "theme_setting_theme_subtitle": "Choose the app's theme setting", - "theme_setting_theme_title": "Theme", - "theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load", - "theme_setting_three_stage_loading_title": "Enable three-stage loading", - "translated_text_options": "Options", - "trash": "Trash", - "trash_emptied": "Emptied trash", - "trash_page_delete": "Delete", - "trash_page_delete_all": "Delete All", - "trash_page_empty_trash_btn": "Empty trash", - "trash_page_empty_trash_dialog_content": "Do you want to empty your trashed assets? These items will be permanently removed from Immich", - "trash_page_empty_trash_dialog_ok": "Ok", - "trash_page_info": "Trashed items will be permanently deleted after {} days", - "trash_page_no_assets": "No trashed assets", - "trash_page_restore": "Restore", - "trash_page_restore_all": "Restore All", - "trash_page_select_assets_btn": "Select assets", - "trash_page_select_btn": "Select", - "trash_page_title": "Trash ({})", + "shared_link_info_chip_upload": "Μεταφόρτωση", + "shared_link_manage_links": "Διαχείριση Κοινόχρηστων Συνδέσμων", + "shared_link_public_album": "Δημόσιο άλμπουμ", + "shared_links": "Κοινόχρηστοι σύνδεσμοι", + "share_done": "Τέλος", + "shared_with_me": "Μοιρασμένα μαζί μου", + "share_invite": "Πρόσκληση σε άλμπουμ", + "sharing_page_album": "Κοινόχρηστα άλμπουμ", + "sharing_page_description": "Δημιουργήστε κοινόχρηστα άλμπουμ για να μοιράζεστε φωτογραφίες και βίντεο με άτομα στο δίκτυό σας.", + "sharing_page_empty_list": "ΚΕΝΗ ΛΙΣΤΑ", + "sharing_silver_appbar_create_shared_album": "Νέο κοινόχρηστο άλμπουμ", + "sharing_silver_appbar_shared_links": "Κοινόχρηστοι σύνδεσμοι", + "sharing_silver_appbar_share_partner": "Μοιραστείτε με τον συνεργάτη", + "sync": "Συγχρονισμός", + "sync_albums": "Συγχρονισμός άλμπουμ", + "sync_albums_manual_subtitle": "Συγχρονίστε όλα τα μεταφορτωμένα βίντεο και φωτογραφίες με τα επιλεγμένα εφεδρικά άλμπουμ", + "sync_upload_album_setting_subtitle": "Δημιουργήστε και ανεβάστε τις φωτογραφίες και τα βίντεό σας στα επιλεγμένα άλμπουμ στο Immich", + "tab_controller_nav_library": "Βιβλιοθήκη", + "tab_controller_nav_photos": "Φωτογραφίες", + "tab_controller_nav_search": "Αναζήτηση", + "tab_controller_nav_sharing": "Κοινή Χρήση", + "theme_setting_asset_list_storage_indicator_title": "Εμφάνιση ένδειξης αποθήκευσης σε πλακίδια στοιχείων", + "theme_setting_asset_list_tiles_per_row_title": "Αριθμός στοιχείων ανά σειρά ({})", + "theme_setting_colorful_interface_subtitle": "Εφαρμόστε βασικό χρώμα σε επιφάνειες φόντου.", + "theme_setting_colorful_interface_title": "Πολύχρωμη διεπαφή", + "theme_setting_dark_mode_switch": "Σκοτεινή λειτουργία", + "theme_setting_image_viewer_quality_subtitle": "Προσαρμόστε την ποιότητα του προγράμματος προβολής εικόνας λεπτομερειών", + "theme_setting_image_viewer_quality_title": "Ποιότητα προβολής εικόνων", + "theme_setting_primary_color_subtitle": "Επιλέξτε ένα χρώμα για κύριες ενέργειες και τόνους.", + "theme_setting_primary_color_title": "Πρωταρχικό χρώμα", + "theme_setting_system_primary_color_title": "Χρησιμοποιήστε το χρώμα συστήματος", + "theme_setting_system_theme_switch": "Αυτόματο (Ακολουθήστε τη ρύθμιση συστήματος)", + "theme_setting_theme_subtitle": "Επιλέξτε τη ρύθμιση θέματος της εφαρμογής", + "theme_setting_theme_title": "Θέμα", + "theme_setting_three_stage_loading_subtitle": "Η φόρτωση τριών σταδίων μπορεί να αυξήσει την απόδοση φόρτωσης, αλλά προκαλεί σημαντικά υψηλότερο φόρτο δικτύου", + "theme_setting_three_stage_loading_title": "Ενεργοποιήστε τη φόρτωση τριών σταδίων", + "translated_text_options": "Επιλογές", + "trash": "Σκουπίδια", + "trash_emptied": "Αδειάστηκαν τα σκουπίδια", + "trash_page_delete": "Διαγραφή", + "trash_page_delete_all": "Διαγραφή όλων", + "trash_page_empty_trash_btn": "Αδειάστε τα σκουπίδια", + "trash_page_empty_trash_dialog_content": "Θέλετε να αδειάσετε τα περιουσιακά σας στοιχεία στον κάδο απορριμμάτων; Αυτά τα στοιχεία θα καταργηθούν οριστικά από το Immich", + "trash_page_empty_trash_dialog_ok": "Εντάξει", + "trash_page_info": "Τα στοιχεία που έχουν απορριφθεί θα διαγραφούν οριστικά μετά από {} ημέρες", + "trash_page_no_assets": "Δεν υπάρχουν περιουσιακά στοιχεία που έχουν απορριφθεί", + "trash_page_restore": "Επαναφορά", + "trash_page_restore_all": "Επαναφορά Όλων", + "trash_page_select_assets_btn": "Επιλέξτε στοιχεία", + "trash_page_select_btn": "Επιλογή", + "trash_page_title": "Κάδος Απορριμμάτων ({})", "upload_dialog_cancel": "Ακύρωση", "upload_dialog_info": "Θέλετε να αντιγράψετε (κάνετε backup) τα επιλεγμένo(α) στοιχείο(α) στο διακομιστή;", "upload_dialog_ok": "Ανέβασμα", "upload_dialog_title": "Ανέβασμα στοιχείου", - "version_announcement_overlay_ack": "Acknowledge", - "version_announcement_overlay_release_notes": "release notes", - "version_announcement_overlay_text_1": "Hi friend, there is a new release of", - "version_announcement_overlay_text_2": "please take your time to visit the ", - "version_announcement_overlay_text_3": " and ensure your docker-compose and .env setup is up-to-date to prevent any misconfigurations, especially if you use WatchTower or any mechanism that handles updating your server application automatically.", - "version_announcement_overlay_title": "New Server Version Available \uD83C\uDF89", - "videos": "Videos", - "viewer_remove_from_stack": "Remove from Stack", - "viewer_stack_use_as_main_asset": "Use as Main Asset", - "viewer_unstack": "Un-Stack" + "version_announcement_overlay_ack": "Κατάλαβα", + "version_announcement_overlay_release_notes": "σημειώσεις έκδοσης", + "version_announcement_overlay_text_1": "Γειά σας, υπάρχει μια νέα έκδοση του", + "version_announcement_overlay_text_2": "παρακαλώ αφιερώστε χρόνο να επισκεφθείτε το", + "version_announcement_overlay_text_3": " και βεβαιωθείτε ότι το docker-compose και το .env σας είναι ενημερωμένη για την αποφυγή τυχόν εσφαλμένων διαμορφώσεων, ειδικά εάν χρησιμοποιείτε το WatchTower ή οποιονδήποτε μηχανισμό που χειρίζεται την αυτόματη ενημέρωση του διακομιστή σας.", + "version_announcement_overlay_title": "Διαθέσιμη νέα έκδοση διακομιστή \uD83C\uDF89", + "videos": "Βίντεο", + "viewer_remove_from_stack": "Κατάργηση από τη Στοίβα", + "viewer_stack_use_as_main_asset": "Χρήση ως Κύριο Στοιχείο", + "viewer_unstack": "Αποστοίβαξε" } \ No newline at end of file diff --git a/mobile/assets/i18n/es-ES.json b/mobile/assets/i18n/es-ES.json index 88db7f9068eff..5f7f8a12b17df 100644 --- a/mobile/assets/i18n/es-ES.json +++ b/mobile/assets/i18n/es-ES.json @@ -6,7 +6,7 @@ "action_common_save": "Guardar", "action_common_select": "Seleccionar", "action_common_update": "Actualizar", - "add_a_name": "Add a name", + "add_a_name": "Añadir nombre", "add_to_album_bottom_sheet_added": "Agregado a {album}", "add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}", "advanced_settings_log_level_title": "Nivel de registro: {}", @@ -22,7 +22,7 @@ "advanced_settings_troubleshooting_title": "Solución de problemas", "album_info_card_backup_album_excluded": "EXCLUIDOS", "album_info_card_backup_album_included": "INCLUIDOS", - "albums": "Albums", + "albums": "Álbumes", "album_thumbnail_card_item": "1 elemento", "album_thumbnail_card_items": "{} elementos", "album_thumbnail_card_shared": "Compartido", @@ -38,13 +38,13 @@ "album_viewer_appbar_share_remove": "Eliminar del álbum ", "album_viewer_appbar_share_to": "Compartir Con", "album_viewer_page_share_add_users": "Agregar usuarios", - "all": "All", + "all": "Todos", "all_people_page_title": "Personas", "all_videos_page_title": "Videos", "app_bar_signout_dialog_content": "¿Estás seguro que quieres cerrar sesión?", "app_bar_signout_dialog_ok": "Sí", "app_bar_signout_dialog_title": "Cerrar sesión", - "archived": "Archived", + "archived": "Archivado", "archive_page_no_archived_assets": "No se encontraron elementos archivados", "archive_page_title": "Archivo ({})", "asset_action_delete_err_read_only": "No se pueden borrar el archivo(s) de solo lectura, omitiendo", @@ -58,13 +58,13 @@ "asset_list_layout_sub_title": "Disposición", "asset_list_settings_subtitle": "Configuraciones del diseño de la cuadrícula de fotos", "asset_list_settings_title": "Cuadrícula de fotos", - "asset_restored_successfully": "Asset restored successfully", + "asset_restored_successfully": "Elementos restaurados exitosamente", "assets_deleted_permanently": "\n{} elementos(s) eliminado(s) permanentemente", "assets_deleted_permanently_from_server": "{} asset(s) deleted permanently from the Immich server", - "assets_removed_permanently_from_device": "{} asset(s) removed permanently from your device", - "assets_restored_successfully": "{} asset(s) restored successfully", + "assets_removed_permanently_from_device": "{} elemento(s) eliminado(s) permanentemente de su dispositivo", + "assets_restored_successfully": "{} elemento(s) restaurado(s) exitosamente", "assets_trashed": "{} elemento(s) eliminado(s)", - "assets_trashed_from_server": "{} asset(s) trashed from the Immich server", + "assets_trashed_from_server": "{} elemento(s) movido a la papelera en Immich", "asset_viewer_settings_title": "Visor de Archivos", "backup_album_selection_page_albums_device": "Álbumes en el dispositivo ({})", "backup_album_selection_page_albums_tap": "Toque para incluir, doble toque para excluir", @@ -189,9 +189,9 @@ "control_bottom_app_bar_unarchive": "Desarchivar", "control_bottom_app_bar_unfavorite": "Retirar favorito", "control_bottom_app_bar_upload": "Subir", - "create_album": "Create album", + "create_album": "Crear álbum", "create_album_page_untitled": "Sin título", - "create_new": "CREATE NEW", + "create_new": "Crear nuevo", "create_shared_album_page_create": "Crear", "create_shared_album_page_share": "Compartir", "create_shared_album_page_share_add_assets": "AGREGAR ELEMENTOS", @@ -216,21 +216,21 @@ "delete_shared_link_dialog_title": "Eliminar enlace compartido", "description_input_hint_text": "Agregar descripción...", "description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles", - "download_canceled": "Download canceled", - "download_complete": "Download complete", - "download_enqueue": "Download enqueued", + "download_canceled": "Descarga cancelada", + "download_complete": "Descarga completada", + "download_enqueue": "Descarga en cola", "download_error": "Error al descargar", - "download_failed": "Download failed", - "download_filename": "file: {}", - "download_finished": "Download finished", - "downloading": "Downloading...", - "downloading_media": "Downloading media", - "download_notfound": "Download not found", - "download_paused": "Download paused", + "download_failed": "Descarga fallida", + "download_filename": "Archivo: {}", + "download_finished": "Descarga completada", + "downloading": "Descargando...", + "downloading_media": "Descargando medios", + "download_notfound": "Descarga no encontrada", + "download_paused": "Descarga en pausa", "download_started": "Descarga iniciada", "download_sucess": "Descarga Exitosa", "download_sucess_android": "Los archivos se han descargado en DCIM/Immich", - "download_waiting_to_retry": "Waiting to retry", + "download_waiting_to_retry": "Esperando para reintentar", "edit_date_time_dialog_date_time": "Fecha y Hora", "edit_date_time_dialog_timezone": "Zona horaria", "edit_image_title": "Editar", @@ -246,11 +246,11 @@ "experimental_settings_new_asset_list_title": "Habilitar cuadrícula fotográfica experimental", "experimental_settings_subtitle": "Úsalo bajo tu responsabilidad", "experimental_settings_title": "Experimental", - "favorites": "Favorites", + "favorites": "Favoritos", "favorites_page_no_favorites": "No se encontraron elementos marcados como favoritos", "favorites_page_title": "Favoritos", "filename_search": "Nombre o extensión", - "filter": "Filter", + "filter": "Filtrar", "haptic_feedback_switch": "Activar respuesta háptica", "haptic_feedback_title": "Respuesta Háptica", "header_settings_add_header_tip": "Añadir cabecera", @@ -274,8 +274,8 @@ "home_page_first_time_notice": "Si esta es la primera vez que usas la app, por favor, asegúrate de elegir un álbum de respaldo para que la línea de tiempo pueda cargar fotos y videos en los álbumes.", "home_page_share_err_local": "No se pueden compartir elementos locales a través de un enlace, omitiendo", "home_page_upload_err_limit": "Solo se pueden subir 30 elementos simultáneamente, omitiendo", - "ignore_icloud_photos": "Ignore iCloud photos", - "ignore_icloud_photos_description": "Photos that are stored on iCloud will not be uploaded to the Immich server", + "ignore_icloud_photos": "Ignorar fotos de iCloud", + "ignore_icloud_photos_description": "Las fotos almacenadas en iCloud no se subirán a Immich", "image_saved_successfully": "Imágenes guardas", "image_viewer_page_state_provider_download_error": "Error de descarga", "image_viewer_page_state_provider_download_started": "Descarga Iniciada", @@ -283,7 +283,7 @@ "image_viewer_page_state_provider_share_error": "Error al compartir", "invalid_date": "Fecha incorrecta", "invalid_date_format": "Formato de fecha incorrecto", - "library": "Library", + "library": "Biblioteca", "library_page_albums": "Álbumes", "library_page_archive": "Archivo", "library_page_device_albums": "Álbumes en el dispositivo", @@ -364,7 +364,7 @@ "motion_photos_page_title": "Foto en Movimiento", "multiselect_grid_edit_date_time_err_read_only": "No se puede cambiar la fecha del archivo(s) de solo lectura, omitiendo", "multiselect_grid_edit_gps_err_read_only": "No se puede cambiar la localización de archivos de solo lectura. Saltando.", - "my_albums": "My albums", + "my_albums": "Mis álbumes", "no_assets_to_show": "No hay elementos a mostrar", "no_name": "Sin nombre", "notification_permission_dialog_cancel": "Cancelar", @@ -373,7 +373,7 @@ "notification_permission_list_tile_content": "Concede permiso para habilitar las notificaciones.", "notification_permission_list_tile_enable_button": "Permitir notificaciones", "notification_permission_list_tile_title": "Permisos de Notificacion", - "on_this_device": "On this device", + "on_this_device": "En este dispositivo", "partner_list_user_photos": "Fotos de {user}", "partner_list_view_all": "Ver todas", "partner_page_add_partner": "Agregar compañero", @@ -385,8 +385,8 @@ "partner_page_stop_sharing_content": "{} ya no podrá acceder a tus fotos", "partner_page_stop_sharing_title": "¿Dejar de compartir tus fotos?", "partner_page_title": "Compañero", - "partners": "Partners", - "people": "People", + "partners": "Colaboradores", + "people": "Personas", "permission_onboarding_back": "Volver", "permission_onboarding_continue_anyway": "Continuar de todos modos", "permission_onboarding_get_started": "Empezar", @@ -397,7 +397,7 @@ "permission_onboarding_permission_granted": "¡Permiso concedido! Todo listo.", "permission_onboarding_permission_limited": "Permiso limitado. Para permitir que Immich haga copia de seguridad y gestione toda tu colección de galería, concede permisos de fotos y videos en Configuración.", "permission_onboarding_request": "Immich requiere permiso para ver tus fotos y videos.", - "places": "Places", + "places": "Lugares", "preferences_settings_title": "Preferencias", "profile_drawer_app_logs": "Registros", "profile_drawer_client_out_of_date_major": "La app está desactualizada. Por favor actualiza a la última versión principal.", @@ -410,17 +410,17 @@ "profile_drawer_settings": "Configuración", "profile_drawer_sign_out": "Cerrar Sesión", "profile_drawer_trash": "Papelera", - "recently_added": "Recently added", + "recently_added": "Añadidos recientemente", "recently_added_page_title": "Recién Agregadas", "save_to_gallery": "Guardado en la galería", "scaffold_body_error_occurred": "Ha ocurrido un error", - "search_albums": "Search albums", + "search_albums": "Buscar álbum", "search_bar_hint": "Busca tus fotos", "search_filter_apply": "Aplicar filtros", "search_filter_camera": "Cámara", "search_filter_camera_make": "Marca", "search_filter_camera_model": "Modelo", - "search_filter_camera_title": "Select camera type", + "search_filter_camera_title": "Elige tipo de cámara", "search_filter_date": "Fecha", "search_filter_date_interval": "{start} al {end}", "search_filter_date_title": "Selecciona un intervalo de fechas", @@ -560,9 +560,9 @@ "shared_link_info_chip_upload": "Subir", "shared_link_manage_links": "Administrar enlaces compartidos", "shared_link_public_album": "Álbum público ", - "shared_links": "Shared links", + "shared_links": "Enlaces", "share_done": "Hecho", - "shared_with_me": "Shared with me", + "shared_with_me": "Compartidos conmigo", "share_invite": "Invitar al álbum", "sharing_page_album": "Álbumes compartidos", "sharing_page_description": "Crea álbumes compartidos para compartir fotos y vídeos con las personas de tu red.", @@ -594,7 +594,7 @@ "theme_setting_three_stage_loading_subtitle": "La carga en tres etapas puede aumentar el rendimiento de carga pero provoca un consumo de red significativamente mayor", "theme_setting_three_stage_loading_title": "Activar carga en tres etapas", "translated_text_options": "Opciones", - "trash": "Trash", + "trash": "Papelera", "trash_emptied": "Papelera vaciada", "trash_page_delete": "Eliminar", "trash_page_delete_all": "Eliminar todos", diff --git a/mobile/assets/i18n/fr-FR.json b/mobile/assets/i18n/fr-FR.json index 2293d9ca304bb..948e53540b807 100644 --- a/mobile/assets/i18n/fr-FR.json +++ b/mobile/assets/i18n/fr-FR.json @@ -6,10 +6,10 @@ "action_common_save": "Sauvegarder", "action_common_select": "Sélectionner", "action_common_update": "Mise à jour", - "add_a_name": "Add a name", + "add_a_name": "Ajouter un nom", "add_to_album_bottom_sheet_added": "Ajouté à {album}", "add_to_album_bottom_sheet_already_exists": "Déjà dans {album}", - "advanced_settings_log_level_title": "Log level: {}", + "advanced_settings_log_level_title": "Niveau de log : {}", "advanced_settings_prefer_remote_subtitle": "Certains appareils sont terriblement lents à charger des miniatures à partir de ressources présentes sur l'appareil. Activez ce paramètre pour charger des images distantes à la place.", "advanced_settings_prefer_remote_title": "Préférer les images distantes", "advanced_settings_proxy_headers_subtitle": "Ajoutez des en-têtes personnalisés à chaque requête réseau", @@ -38,15 +38,15 @@ "album_viewer_appbar_share_remove": "Retirer de l'album", "album_viewer_appbar_share_to": "Partager à", "album_viewer_page_share_add_users": "Ajouter des utilisateurs", - "all": "All", + "all": "Tous", "all_people_page_title": "Personnes", "all_videos_page_title": "Vidéos", "app_bar_signout_dialog_content": "Êtes-vous sûr de vouloir vous déconnecter ?", "app_bar_signout_dialog_ok": "Oui", "app_bar_signout_dialog_title": "Se déconnecter", - "archived": "Archived", + "archived": "Archivé", "archive_page_no_archived_assets": "Aucun élément archivé n'a été trouvé", - "archive_page_title": "Archive ({})", + "archive_page_title": "Archives ({})", "asset_action_delete_err_read_only": "Impossible de supprimer le(s) élément(s) en lecture seule.", "asset_action_share_err_offline": "Impossible de récupérer le(s) élément(s) hors ligne.", "asset_list_group_by_sub_title": "Regrouper par", @@ -63,7 +63,7 @@ "assets_deleted_permanently_from_server": "{} élément(s) supprimé(s) définitivement du serveur Immich", "assets_removed_permanently_from_device": "\"{} élément(s) supprimé(s) définitivement de votre appareil", "assets_restored_successfully": "Élément restauré avec succès", - "assets_trashed": "{} élément(s) déplacé(s) vers la corbeill", + "assets_trashed": "{} élément(s) déplacé(s) vers la corbeille", "assets_trashed_from_server": "{} élément(s) déplacé(s) vers la corbeille du serveur Immich", "asset_viewer_settings_title": "Visualisateur d'éléments", "backup_album_selection_page_albums_device": "Albums sur l'appareil ({})", @@ -122,7 +122,7 @@ "backup_controller_page_total_sub": "Toutes les photos et vidéos uniques des albums sélectionnés", "backup_controller_page_turn_off": "Désactiver la sauvegarde", "backup_controller_page_turn_on": "Activer la sauvegarde", - "backup_controller_page_uploading_file_info": "Transfert des informations du fichier", + "backup_controller_page_uploading_file_info": "Transfert du fichier", "backup_err_only_album": "Impossible de retirer le seul album", "backup_info_card_assets": "éléments", "backup_manual_cancelled": "Annulé", @@ -172,7 +172,7 @@ "control_bottom_app_bar_add_to_album": "Ajouter à l'album", "control_bottom_app_bar_album_info": "{} éléments", "control_bottom_app_bar_album_info_shared": "{} éléments - Partagés", - "control_bottom_app_bar_archive": "Archive", + "control_bottom_app_bar_archive": "Archiver", "control_bottom_app_bar_create_new_album": "Créer un nouvel album", "control_bottom_app_bar_delete": "Supprimer", "control_bottom_app_bar_delete_from_immich": "Supprimer de Immich", @@ -189,14 +189,14 @@ "control_bottom_app_bar_unarchive": "Désarchiver", "control_bottom_app_bar_unfavorite": "Enlever des favoris", "control_bottom_app_bar_upload": "Téléverser", - "create_album": "Create album", + "create_album": "Créer l'album", "create_album_page_untitled": "Sans titre", - "create_new": "CREATE NEW", + "create_new": "NOUVEAU", "create_shared_album_page_create": "Créer", "create_shared_album_page_share": "Partager", "create_shared_album_page_share_add_assets": "AJOUTER DES ÉLÉMENTS", "create_shared_album_page_share_select_photos": "Sélectionner les photos", - "crop": "Crop", + "crop": "Recadrer", "curated_location_page_title": "Lieux", "curated_object_page_title": "Objets", "daily_title_text_date": "E, dd MMM", @@ -216,41 +216,41 @@ "delete_shared_link_dialog_title": "Supprimer le lien partagé", "description_input_hint_text": "Ajouter une description…", "description_input_submit_error": "Erreur de mise à jour de la description, vérifier le journal pour plus de détails", - "download_canceled": "Download canceled", - "download_complete": "Download complete", - "download_enqueue": "Download enqueued", - "download_error": "Download Error", - "download_failed": "Download failed", - "download_filename": "file: {}", - "download_finished": "Download finished", - "downloading": "Downloading...", - "downloading_media": "Downloading media", - "download_notfound": "Download not found", - "download_paused": "Download paused", - "download_started": "Download started", - "download_sucess": "Download success", - "download_sucess_android": "The media has been downloaded to DCIM/Immich", - "download_waiting_to_retry": "Waiting to retry", + "download_canceled": "Téléchargement annulé", + "download_complete": "Téléchargement terminé", + "download_enqueue": "Téléchargement en attente", + "download_error": "Erreur de téléchargement", + "download_failed": "Téléchargement échoué", + "download_filename": "fichier : {}", + "download_finished": "Téléchargement terminé", + "downloading": "Téléchargement...", + "downloading_media": "Téléchargement du média", + "download_notfound": "Téléchargement non trouvé", + "download_paused": "Téléchargement en pause", + "download_started": "Téléchargement commencé", + "download_sucess": "Téléchargement réussi", + "download_sucess_android": "Le média a été téléchargé dans DCIM/Immich", + "download_waiting_to_retry": "Téléchargement en attente du prochain essai", "edit_date_time_dialog_date_time": "Date et heure", "edit_date_time_dialog_timezone": "Fuseau horaire", - "edit_image_title": "Edit", + "edit_image_title": "Modifier", "edit_location_dialog_title": "Localisation", - "error_saving_image": "Error: {}", + "error_saving_image": "Erreur : {}", "exif_bottom_sheet_description": "Ajouter une description…", "exif_bottom_sheet_details": "DÉTAILS", "exif_bottom_sheet_location": "LOCALISATION", - "exif_bottom_sheet_location_add": "Add a location", + "exif_bottom_sheet_location_add": "Ajouter un lieu", "exif_bottom_sheet_people": "PERSONNES", "exif_bottom_sheet_person_add_person": "Ajouter un nom", "experimental_settings_new_asset_list_subtitle": "En cours de développement", "experimental_settings_new_asset_list_title": "Activer la grille de photos expérimentale", "experimental_settings_subtitle": "Utilisez à vos dépends !", "experimental_settings_title": "Expérimental", - "favorites": "Favorites", + "favorites": "Favoris", "favorites_page_no_favorites": "Aucun élément favori n'a été trouvé", "favorites_page_title": "Favoris", "filename_search": "Nom de fichier ou extension", - "filter": "Filter", + "filter": "Filtres", "haptic_feedback_switch": "Activer le retour haptique", "haptic_feedback_title": "Retour haptique", "header_settings_add_header_tip": "Ajouter un en-tête", @@ -274,23 +274,23 @@ "home_page_first_time_notice": "Si c'est la première fois que vous utilisez l'application, veillez à choisir un ou plusieurs albums de sauvegarde afin que la chronologie puisse alimenter les photos et les vidéos de cet ou ces albums.", "home_page_share_err_local": "Impossible de partager par lien les médias locaux, cette opération est donc ignorée.", "home_page_upload_err_limit": "Limite de téléchargement de 30 éléments en même temps, demande ignorée", - "ignore_icloud_photos": "Ignore iCloud photos", - "ignore_icloud_photos_description": "Photos that are stored on iCloud will not be uploaded to the Immich server", - "image_saved_successfully": "Image saved", + "ignore_icloud_photos": "Ignorer les photos iCloud", + "ignore_icloud_photos_description": "Les photos stockées sur iCloud ne sont pas enregistrées sur Immich", + "image_saved_successfully": "Image enregistré", "image_viewer_page_state_provider_download_error": "Erreur de téléchargement", "image_viewer_page_state_provider_download_started": "Téléchargement démarré", "image_viewer_page_state_provider_download_success": "Téléchargement réussi", "image_viewer_page_state_provider_share_error": "Erreur de partage", "invalid_date": "Date invalide", "invalid_date_format": "Format de date invalide", - "library": "Library", + "library": "Bibliothèque", "library_page_albums": "Albums", "library_page_archive": "Archive", "library_page_device_albums": "Albums sur l'appareil", "library_page_favorites": "Favoris", "library_page_new_album": "Nouvel album", "library_page_sharing": "Partage", - "library_page_sort_asset_count": "Number of assets", + "library_page_sort_asset_count": "Nombre d'éléments", "library_page_sort_created": "Créations les plus récentes", "library_page_sort_last_modified": "Dernière modification", "library_page_sort_most_oldest_photo": "Photo la plus ancienne", @@ -364,7 +364,7 @@ "motion_photos_page_title": "Photos avec mouvement", "multiselect_grid_edit_date_time_err_read_only": "Impossible de modifier la date d'un élément d'actif en lecture seule.", "multiselect_grid_edit_gps_err_read_only": "Impossible de modifier l'emplacement d'un élément en lecture seule.", - "my_albums": "My albums", + "my_albums": "Mes albums", "no_assets_to_show": "Aucuns éléments à afficher", "no_name": "Sans nom", "notification_permission_dialog_cancel": "Annuler", @@ -373,7 +373,7 @@ "notification_permission_list_tile_content": "Accordez la permission d'activer les notifications.", "notification_permission_list_tile_enable_button": "Activer les notifications", "notification_permission_list_tile_title": "Permission de notification", - "on_this_device": "On this device", + "on_this_device": "Sur cet appareil", "partner_list_user_photos": "Photos de {user}", "partner_list_view_all": "Voir tous", "partner_page_add_partner": "Ajouter un partenaire", @@ -385,8 +385,8 @@ "partner_page_stop_sharing_content": "{} ne pourra plus accéder à vos photos.", "partner_page_stop_sharing_title": "Arrêter de partager vos photos ?", "partner_page_title": "Partenaire", - "partners": "Partners", - "people": "People", + "partners": "Partenaires", + "people": "Personnes", "permission_onboarding_back": "Retour", "permission_onboarding_continue_anyway": "Continuer quand même", "permission_onboarding_get_started": "Commencer", @@ -397,7 +397,7 @@ "permission_onboarding_permission_granted": "Permission accordée ! Vous êtes prêts.", "permission_onboarding_permission_limited": "Permission limitée. Pour permettre à Immich de sauvegarder et de gérer l'ensemble de votre bibliothèque, accordez l'autorisation pour les photos et vidéos dans les Paramètres.", "permission_onboarding_request": "Immich demande l'autorisation de visionner vos photos et vidéo", - "places": "Places", + "places": "Lieux", "preferences_settings_title": "Préférences", "profile_drawer_app_logs": "Journaux", "profile_drawer_client_out_of_date_major": "L'application mobile est obsolète. Veuillez effectuer la mise à jour vers la dernière version majeure.", @@ -410,21 +410,21 @@ "profile_drawer_settings": "Paramètres", "profile_drawer_sign_out": "Se déconnecter", "profile_drawer_trash": "Corbeille", - "recently_added": "Recently added", + "recently_added": "Ajouté récemment", "recently_added_page_title": "Récemment ajouté", - "save_to_gallery": "Save to gallery", + "save_to_gallery": "Enregistrer", "scaffold_body_error_occurred": "Une erreur s'est produite", - "search_albums": "Search albums", + "search_albums": "Rechercher des albums", "search_bar_hint": "Rechercher vos photos", "search_filter_apply": "Appliquer le filtre", "search_filter_camera": "Appareil", "search_filter_camera_make": "Fabricant", - "search_filter_camera_model": "Modéle", + "search_filter_camera_model": "Modèle", "search_filter_camera_title": "Sélectionner le type d'appareil", "search_filter_date": "Date", "search_filter_date_interval": "{start} à {end}", "search_filter_date_title": "Sélectionner une période", - "search_filter_display_option_archive": "Archive", + "search_filter_display_option_archive": "Archivé", "search_filter_display_option_favorite": "Favoris", "search_filter_display_option_not_in_album": "Pas dans un album", "search_filter_display_options": "Options d'affichage", @@ -560,9 +560,9 @@ "shared_link_info_chip_upload": "Chargement", "shared_link_manage_links": "Gérer les liens partagés", "shared_link_public_album": "Album public", - "shared_links": "Shared links", + "shared_links": "Liens partagés", "share_done": "Fait", - "shared_with_me": "Shared with me", + "shared_with_me": "Partagé avec moi", "share_invite": "Inviter à l'album", "sharing_page_album": "Albums partagés", "sharing_page_description": "Créez des albums partagés pour partager des photos et des vidéos avec les personnes de votre réseau.", @@ -570,10 +570,10 @@ "sharing_silver_appbar_create_shared_album": "Créer un album partagé", "sharing_silver_appbar_shared_links": "Liens partagés", "sharing_silver_appbar_share_partner": "Partager avec un partenaire", - "sync": "Sync", - "sync_albums": "Sync albums", - "sync_albums_manual_subtitle": "Sync all uploaded videos and photos to the selected backup albums", - "sync_upload_album_setting_subtitle": "Create and upload your photos and videos to the selected albums on Immich", + "sync": "Synchroniser", + "sync_albums": "Synchroniser dans des albums", + "sync_albums_manual_subtitle": "Synchroniser toutes les vidéos et photos sauvegardées dans les albums sélectionnés", + "sync_upload_album_setting_subtitle": "Créer et sauvegarde vos photos et vidéos dans les albums sélectionnés sur Immich", "tab_controller_nav_library": "Bibliothèque", "tab_controller_nav_photos": "Photos", "tab_controller_nav_search": "Recherche", @@ -594,7 +594,7 @@ "theme_setting_three_stage_loading_subtitle": "Le chargement en trois étapes peut améliorer les performances de chargement, mais entraîne une augmentation significative de la charge du réseau.", "theme_setting_three_stage_loading_title": "Activer le chargement en trois étapes", "translated_text_options": "Options", - "trash": "Trash", + "trash": "Corbeille", "trash_emptied": "Corbeille vidée", "trash_page_delete": "Supprimer", "trash_page_delete_all": "Tout supprimer", @@ -618,7 +618,7 @@ "version_announcement_overlay_text_2": "veuillez prendre le temps de visiter le ", "version_announcement_overlay_text_3": " et assurez-vous que votre configuration docker-compose et .env est à jour pour éviter toute erreur de configuration, en particulier si vous utilisez WatchTower ou tout autre mécanisme qui gère la mise à jour automatique de votre application serveur.", "version_announcement_overlay_title": "Nouvelle version serveur disponible \uD83C\uDF89", - "videos": "Videos", + "videos": "Vidéos", "viewer_remove_from_stack": "Retirer de la pile", "viewer_stack_use_as_main_asset": "Utiliser comme élément principal", "viewer_unstack": "Désempiler" diff --git a/mobile/assets/i18n/he-IL.json b/mobile/assets/i18n/he-IL.json index a7b14d2b74dd9..c0bfb7367b887 100644 --- a/mobile/assets/i18n/he-IL.json +++ b/mobile/assets/i18n/he-IL.json @@ -6,7 +6,7 @@ "action_common_save": "שמור", "action_common_select": "בחר", "action_common_update": "עדכון", - "add_a_name": "Add a name", + "add_a_name": "הוסף שם", "add_to_album_bottom_sheet_added": "נוסף ל {album}", "add_to_album_bottom_sheet_already_exists": "כבר ב {album}", "advanced_settings_log_level_title": "רמת תיעוד אירועים: {}", @@ -22,7 +22,7 @@ "advanced_settings_troubleshooting_title": "פתרון בעיות", "album_info_card_backup_album_excluded": "הוחרגו", "album_info_card_backup_album_included": "נכללו", - "albums": "Albums", + "albums": "אלבומים", "album_thumbnail_card_item": "פריט 1", "album_thumbnail_card_items": "{} פריטים", "album_thumbnail_card_shared": " · משותף", @@ -38,13 +38,13 @@ "album_viewer_appbar_share_remove": "הסרה מאלבום", "album_viewer_appbar_share_to": "שתף עם", "album_viewer_page_share_add_users": "הוסף משתמשים", - "all": "All", + "all": "הכל", "all_people_page_title": "אנשים", "all_videos_page_title": "סרטונים", "app_bar_signout_dialog_content": "האם את/ה בטוח/ה שברצונך להתנתק?", "app_bar_signout_dialog_ok": "כן", "app_bar_signout_dialog_title": "התנתק", - "archived": "Archived", + "archived": "בארכיון", "archive_page_no_archived_assets": "לא נמצאו נכסים בארכיון", "archive_page_title": "ארכיון ({})", "asset_action_delete_err_read_only": "לא ניתן למחוק נכס(ים) לקריאה בלבד, מדלג", @@ -189,9 +189,9 @@ "control_bottom_app_bar_unarchive": "הוצא מארכיון", "control_bottom_app_bar_unfavorite": "הסר ממועדפים", "control_bottom_app_bar_upload": "העלאה", - "create_album": "Create album", + "create_album": "צור אלבום", "create_album_page_untitled": "ללא כותרת", - "create_new": "CREATE NEW", + "create_new": "צור חדש", "create_shared_album_page_create": "יצירה", "create_shared_album_page_share": "שתף", "create_shared_album_page_share_add_assets": "הוסף נכסים", @@ -246,11 +246,11 @@ "experimental_settings_new_asset_list_title": "אפשר רשת תמונות ניסיונית", "experimental_settings_subtitle": "השימוש הוא על אחריותך בלבד!", "experimental_settings_title": "נסיוני", - "favorites": "Favorites", + "favorites": "מועדפים", "favorites_page_no_favorites": "לא נמצאו נכסים מועדפים", "favorites_page_title": "מועדפים", "filename_search": "שם קובץ או סיומת", - "filter": "Filter", + "filter": "סנן", "haptic_feedback_switch": "אפשר משוב ברטט", "haptic_feedback_title": "משוב ברטט", "header_settings_add_header_tip": "הוסף כותרת", @@ -274,8 +274,8 @@ "home_page_first_time_notice": "אם זאת הפעם הראשונה שאת/ה משתמש/ת ביישום, נא להקפיד לבחור אלבומ(ים) לגיבוי כך שציר הזמן יוכל לאכלס תמונות וסרטונים באלבומ(ים)", "home_page_share_err_local": "לא ניתן לשתף נכסים מקומיים על ידי קישור, מדלג", "home_page_upload_err_limit": "ניתן להעלות רק מקסימום של 30 נכסים בכל פעם, מדלג", - "ignore_icloud_photos": "Ignore iCloud photos", - "ignore_icloud_photos_description": "Photos that are stored on iCloud will not be uploaded to the Immich server", + "ignore_icloud_photos": "התעלם מתמונות iCloud", + "ignore_icloud_photos_description": "תמונות שמאוחסנות ב-iCloud לא יועלו לשרת ה-Immich", "image_saved_successfully": "תמונה נשמרה", "image_viewer_page_state_provider_download_error": "שגיאת הורדה", "image_viewer_page_state_provider_download_started": "ההורדה החלה", @@ -283,7 +283,7 @@ "image_viewer_page_state_provider_share_error": "שיתוף שגיאה", "invalid_date": "תאריך לא תקין", "invalid_date_format": "פורמט תאריך לא תקין", - "library": "Library", + "library": "ספרייה", "library_page_albums": "אלבומים", "library_page_archive": "ארכיון", "library_page_device_albums": "אלבומים במכשיר", @@ -364,7 +364,7 @@ "motion_photos_page_title": "תמונות עם תנועה", "multiselect_grid_edit_date_time_err_read_only": "לא ניתן לערוך תאריך של נכס(ים) לקריאה בלבד, מדלג", "multiselect_grid_edit_gps_err_read_only": "לא ניתן לערוך מיקום של נכס(ים) לקריאה בלבד, מדלג", - "my_albums": "My albums", + "my_albums": "האלבומים שלי", "no_assets_to_show": "אין נכסים להציג", "no_name": "ללא שם", "notification_permission_dialog_cancel": "ביטול", @@ -373,7 +373,7 @@ "notification_permission_list_tile_content": "הענק הרשאה כדי לאפשר התראות", "notification_permission_list_tile_enable_button": "אפשר התראות", "notification_permission_list_tile_title": "הרשאת התראה", - "on_this_device": "On this device", + "on_this_device": "במכשיר הזה", "partner_list_user_photos": "תמונות של {user}", "partner_list_view_all": "הצג הכל", "partner_page_add_partner": "הוספת שותף", @@ -385,8 +385,8 @@ "partner_page_stop_sharing_content": "{} לא יוכל יותר לגשת לתמונות שלך", "partner_page_stop_sharing_title": "להפסיק לשתף את התמונות שלך?", "partner_page_title": "שותף", - "partners": "Partners", - "people": "People", + "partners": "שותפים", + "people": "אנשים", "permission_onboarding_back": "חזרה", "permission_onboarding_continue_anyway": "המשך בכל זאת", "permission_onboarding_get_started": "להתחיל", @@ -397,7 +397,7 @@ "permission_onboarding_permission_granted": "ההרשאה ניתנה! את/ה מוכנ/ה", "permission_onboarding_permission_limited": "הרשאה מוגבלת. כדי לתת ליישום לגבות ולנהל את כל אוסף הגלריה שלך, הענק הרשאה לתמונות וסרטונים בהגדרות", "permission_onboarding_request": "היישום דורש הרשאה כדי לראות את התמונות והסרטונים שלך", - "places": "Places", + "places": "מקומות", "preferences_settings_title": "העדפות", "profile_drawer_app_logs": "יומן", "profile_drawer_client_out_of_date_major": "האפליקציה לנייד היא מיושנת. נא לעדכן לגרסה הראשית האחרונה", @@ -410,11 +410,11 @@ "profile_drawer_settings": "הגדרות", "profile_drawer_sign_out": "יציאה", "profile_drawer_trash": "אשפה", - "recently_added": "Recently added", + "recently_added": "נוסף לאחרונה", "recently_added_page_title": "נוסף לאחרונה", "save_to_gallery": "שמור לגלריה", "scaffold_body_error_occurred": "אירעה שגיאה", - "search_albums": "Search albums", + "search_albums": "חפש/י אלבומים", "search_bar_hint": "חפש/י בתמונות שלך", "search_filter_apply": "החל סינון", "search_filter_camera": "מצלמה", @@ -560,9 +560,9 @@ "shared_link_info_chip_upload": "העלאה", "shared_link_manage_links": "ניהול קישורים משותפים", "shared_link_public_album": "אלבום ציבורי", - "shared_links": "Shared links", + "shared_links": "קישורים משותפים", "share_done": "סיום", - "shared_with_me": "Shared with me", + "shared_with_me": "משותף איתי", "share_invite": "הזמן לאלבום", "sharing_page_album": "אלבומים משותפים", "sharing_page_description": "צור אלבומים משותפים כדי לשתף תמונות וסרטונים עם אנשים ברשת שלך", @@ -594,7 +594,7 @@ "theme_setting_three_stage_loading_subtitle": "טעינה בשלושה שלבים עשויה לשפר את ביצועי הטעינה אבל גורמת באופן משמעותי לעומס רשת גבוה יותר", "theme_setting_three_stage_loading_title": "אפשר טעינה בשלושה שלבים", "translated_text_options": "אפשרויות", - "trash": "Trash", + "trash": "אשפה", "trash_emptied": "האשפה רוקנה", "trash_page_delete": "מחק", "trash_page_delete_all": "מחק הכל", @@ -618,7 +618,7 @@ "version_announcement_overlay_text_2": "אנא קח/י את הזמן שלך לבקר ב ", "version_announcement_overlay_text_3": " ולוודא שמבנה ה docker-compose וה env. שלך עדכני כדי למנוע תצורות שגויות, במיוחד אם את/ה משתמש/ת ב WatchTower או בכל מנגנון שמטפל בעדכון יישום השרת שלך באופן אוטומטי", "version_announcement_overlay_title": "גרסת שרת חדשה זמינה \uD83C\uDF89", - "videos": "Videos", + "videos": "סרטונים", "viewer_remove_from_stack": "הסר מערימה", "viewer_stack_use_as_main_asset": "השתמש כנכס ראשי", "viewer_unstack": "ביטול ערימה" diff --git a/mobile/assets/i18n/hu-HU.json b/mobile/assets/i18n/hu-HU.json index e28535f9b15f1..a19263e2bcb30 100644 --- a/mobile/assets/i18n/hu-HU.json +++ b/mobile/assets/i18n/hu-HU.json @@ -1,19 +1,19 @@ { "action_common_back": "Vissza", "action_common_cancel": "Mégsem", - "action_common_clear": "Kitöröl", + "action_common_clear": "Alaphelyzetbe állít", "action_common_confirm": "Jóváhagy", - "action_common_save": "Save", - "action_common_select": "Select", + "action_common_save": "Mentés", + "action_common_select": "Kiválaszt", "action_common_update": "Frissít", - "add_a_name": "Add a name", + "add_a_name": "Név hozzáadása", "add_to_album_bottom_sheet_added": "Hozzáadva a(z) \"{album}\" albumhoz", "add_to_album_bottom_sheet_already_exists": "Már benne van a(z) \"{album}\" albumban", "advanced_settings_log_level_title": "Naplózás szintje: {}", - "advanced_settings_prefer_remote_subtitle": "Néhány eszköz fájdalmasan lassan tölti be az eszközön lévő bélyegképeket. Ezzel a beállítással inkább a távoli képeket töltjük be helyette.", + "advanced_settings_prefer_remote_subtitle": "Néhány eszköz fájdalmasan lassan tölti be az eszközön lévő bélyegképeket. Ez a beállítás inkább a távoli képeket tölti be helyettük.", "advanced_settings_prefer_remote_title": "Távoli képek előnyben részesítése", - "advanced_settings_proxy_headers_subtitle": "Define proxy headers Immich should send with each network request", - "advanced_settings_proxy_headers_title": "Proxy Headers", + "advanced_settings_proxy_headers_subtitle": "Add meg azokat a proxy fejléceket, amiket az app elküldjön minden hálózati kérésnél", + "advanced_settings_proxy_headers_title": "Proxy Fejlécek", "advanced_settings_self_signed_ssl_subtitle": "Nem ellenőrzi a szerver SSL tanúsítványát. Önaláírt tanúsítvány esetén szükséges beállítás.", "advanced_settings_self_signed_ssl_title": "Önaláírt SSL tanúsítványok engedélyezése", "advanced_settings_tile_subtitle": "Haladó felhasználói beállítások", @@ -22,7 +22,7 @@ "advanced_settings_troubleshooting_title": "Hibaelhárítás", "album_info_card_backup_album_excluded": "KIHAGYVA", "album_info_card_backup_album_included": "BELEÉRTVE", - "albums": "Albums", + "albums": "Albumok", "album_thumbnail_card_item": "1 elem", "album_thumbnail_card_items": "{} elem", "album_thumbnail_card_shared": "· Megosztott", @@ -30,56 +30,56 @@ "album_thumbnail_shared_by": "Megosztotta: {}", "album_viewer_appbar_delete_confirm": "Biztos, hogy törölni szeretnéd ezt az albumot?", "album_viewer_appbar_share_delete": "Album törlése", - "album_viewer_appbar_share_err_delete": "Nem sikerült törölni az albumot", + "album_viewer_appbar_share_err_delete": "Az album törlése sikertelen", "album_viewer_appbar_share_err_leave": "Nem sikerült kilépni az albumból", "album_viewer_appbar_share_err_remove": "Néhány elemet nem sikerült törölni az albumból", - "album_viewer_appbar_share_err_title": "Nem sikerült átnevezni az albumot", + "album_viewer_appbar_share_err_title": "Az album átnevezése sikertelen", "album_viewer_appbar_share_leave": "Kilépés az albumból", "album_viewer_appbar_share_remove": "Eltávolítás az albumból", "album_viewer_appbar_share_to": "Megosztás Ide", "album_viewer_page_share_add_users": "Felhasználók hozzáadása", - "all": "All", + "all": "Összes", "all_people_page_title": "Emberek", "all_videos_page_title": "Videók", "app_bar_signout_dialog_content": "Biztos, hogy ki szeretnél jelentkezni?", "app_bar_signout_dialog_ok": "Igen", "app_bar_signout_dialog_title": "Kijelentkezés", - "archived": "Archived", + "archived": "Archivált", "archive_page_no_archived_assets": "Nem található archivált elem", "archive_page_title": "Archívum ({})", "asset_action_delete_err_read_only": "Csak-olvasható elem(ek)et nem lehet törölni, így ezeket átugorjuk", - "asset_action_share_err_offline": "Nem sikerült betölteni a kapcsolat nélküli elem(ek)et, így ezeket kihagyjuk", + "asset_action_share_err_offline": "Nem lehet betölteni a kapcsolat nélküli elem(ek)et, így ezeket kihagyjuk", "asset_list_group_by_sub_title": "Csoportosítás", "asset_list_layout_settings_dynamic_layout_title": "Dinamikus elrendezés", - "asset_list_layout_settings_group_automatically": "Automatikus", + "asset_list_layout_settings_group_automatically": "Automatikusan", "asset_list_layout_settings_group_by": "Elemek csoportosítása", - "asset_list_layout_settings_group_by_month": "hónapok szerint", - "asset_list_layout_settings_group_by_month_day": "hónap és nap szerint", + "asset_list_layout_settings_group_by_month": "Hónapok szerint", + "asset_list_layout_settings_group_by_month_day": "Hónapok és napok szerint", "asset_list_layout_sub_title": "Elrendezés", "asset_list_settings_subtitle": "Fotórács elrendezése", "asset_list_settings_title": "Fotórács", - "asset_restored_successfully": "Asset restored successfully", - "assets_deleted_permanently": "{} asset(s) deleted permanently", - "assets_deleted_permanently_from_server": "{} asset(s) deleted permanently from the Immich server", - "assets_removed_permanently_from_device": "{} asset(s) removed permanently from your device", - "assets_restored_successfully": "{} asset(s) restored successfully", - "assets_trashed": "{} asset(s) trashed", - "assets_trashed_from_server": "{} asset(s) trashed from the Immich server", + "asset_restored_successfully": "Elem sikeresen helyreállítva", + "assets_deleted_permanently": "{} elem véglegesen törölve", + "assets_deleted_permanently_from_server": "{} elem véglegesen törölve az Immich szerverről", + "assets_removed_permanently_from_device": "{} elem véglegesen törölve az eszközödről", + "assets_restored_successfully": "{} elem sikeresen helyreállítva", + "assets_trashed": "{} elem lomtárba helyezve", + "assets_trashed_from_server": "{} elem lomtárba helyezve az Immich szerveren", "asset_viewer_settings_title": "Elem Megjelenítő", "backup_album_selection_page_albums_device": "Ezen az eszközön lévő albumok ({})", - "backup_album_selection_page_albums_tap": "Koppincs a hozzáadáshoz, duplán koppincs az eltávolításhoz", + "backup_album_selection_page_albums_tap": "Koppints a hozzáadáshoz, duplán koppints az eltávolításhoz", "backup_album_selection_page_assets_scatter": "Egy elem több albumban is lehet. Ezért a mentéshez albumokat lehet hozzáadni vagy azokat a mentésből kihagyni.", "backup_album_selection_page_select_albums": "Válassz albumokat", "backup_album_selection_page_selection_info": "Összegzés", "backup_album_selection_page_total_assets": "Összes egyedi elem", "backup_all": "Összes", - "backup_background_service_backup_failed_message": "Hiba a mentés közben. Újrapróbálkozás...", - "backup_background_service_connection_failed_message": "Hiba a szerverhez való csatlakozás közben. Újrapróbálkozás...", + "backup_background_service_backup_failed_message": "Az elemek mentése sikertelen. Újrapróbálkozás...", + "backup_background_service_connection_failed_message": "A szerverhez csatlakozás sikertelen. Újrapróbálkozás...", "backup_background_service_current_upload_notification": "Feltöltés {}", - "backup_background_service_default_notification": "Új elemek keresése...", - "backup_background_service_error_title": "Hiba mentés közben", + "backup_background_service_default_notification": "Új elemek ellenőrzése...", + "backup_background_service_error_title": "Hiba a mentés közben", "backup_background_service_in_progress_notification": "Elemek mentése folyamatban…", - "backup_background_service_upload_failure_notification": "Hiba a feltöltés közben {}", + "backup_background_service_upload_failure_notification": "A feltöltés sikertelen {}", "backup_controller_page_albums": "Albumok Mentése", "backup_controller_page_background_app_refresh_disabled_content": "Engedélyezd a háttérben történő frissítést a Beállítások > Általános > Háttérben Frissítés menüpontban.", "backup_controller_page_background_app_refresh_disabled_title": "Háttérben frissítés kikapcsolva", @@ -89,7 +89,7 @@ "backup_controller_page_background_battery_info_ok": "OK", "backup_controller_page_background_battery_info_title": "Akkumulátor optimalizálás", "backup_controller_page_background_charging": "Csak töltés közben", - "backup_controller_page_background_configure_error": "Nem sikerült beállítani a háttér szolgáltatást", + "backup_controller_page_background_configure_error": "A háttérszolgáltatás beállítása sikertelen", "backup_controller_page_background_delay": "Új elemek mentésének késleltetése: {}", "backup_controller_page_background_description": "Kapcsold be a háttérfolyamatot, hogy automatikusan mentsen elemeket az applikáció megnyitása nélkül", "backup_controller_page_background_is_off": "Automatikus mentés a háttérben ki van kapcsolva", @@ -102,7 +102,7 @@ "backup_controller_page_backup_sub": "Mentett fotók és videók", "backup_controller_page_cancel": "Mégsem", "backup_controller_page_created": "Létrehozva: {}", - "backup_controller_page_desc_backup": "Ha engedélyezed az előtérben mentést, akkor az új elemek automatikusan feltöltődnek a szerverre, amikor megyitod az alkalmazást.", + "backup_controller_page_desc_backup": "Ha bekapcsolod az előtérben mentést, akkor az új elemek automatikusan feltöltődnek a szerverre, amikor megyitod az alkalmazást.", "backup_controller_page_excluded": "Kivéve:", "backup_controller_page_failed": "Sikertelen ({})", "backup_controller_page_filename": "Fájlnév: {}[{}]", @@ -153,32 +153,32 @@ "change_password_form_description": "Szia {name}!\n\nMost jelentkezel be először a rendszerbe vagy más okból szükséges a jelszavad meváltoztatása. Kérjük, add meg új jelszavad.", "change_password_form_new_password": "Új Jelszó", "change_password_form_password_mismatch": "A beírt jelszavak nem egyeznek", - "change_password_form_reenter_new_password": "Jelszó (még egyszer)", + "change_password_form_reenter_new_password": "Jelszó (Még Egyszer)", "client_cert_dialog_msg_confirm": "OK", - "client_cert_enter_password": "Enter Password", - "client_cert_import": "Import", - "client_cert_import_success_msg": "Client certificate is imported", - "client_cert_invalid_msg": "Invalid certificate file or wrong password", - "client_cert_remove": "Remove", - "client_cert_remove_msg": "Client certificate is removed", - "client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login", - "client_cert_title": "SSL Client Certificate", + "client_cert_enter_password": "Jelszó Megadása", + "client_cert_import": "Importálás", + "client_cert_import_success_msg": "Kliens tanúsítvány importálva", + "client_cert_invalid_msg": "Érvénytelen tanúsítvány fájl vagy hibás jelszó", + "client_cert_remove": "Eltávolítás", + "client_cert_remove_msg": "Kliens tanúsítvány eltávolítva", + "client_cert_subtitle": "Csak a PKCS12 (.p12, .pfx) formátum támogatott. Tanúsítvány Importálása/Eltávolítása csak a bejelentkezés előtt lehetséges", + "client_cert_title": "SSL Kliens Tanúsítvány", "common_add_to_album": "Albumhoz ad", "common_change_password": "Jelszócsere", "common_create_new_album": "Új album létrehozása", "common_server_error": "Kérjük, ellenőrizd a hálózati kapcsolatot, gondoskodj róla, hogy a szerver elérhető legyen, valamint az alkalmazás és a szerver kompatibilis verziójú legyen.", - "common_shared": "Megosztva", - "contextual_search": "Sunrise on the beach", + "common_shared": "Megosztott", + "contextual_search": "Napfelkelte a tengerparton", "control_bottom_app_bar_add_to_album": "Albumhoz ad", "control_bottom_app_bar_album_info": "{} elem", "control_bottom_app_bar_album_info_shared": "{} elemek · Megosztva", - "control_bottom_app_bar_archive": "Archivál", + "control_bottom_app_bar_archive": "Archiválás", "control_bottom_app_bar_create_new_album": "Új album létrehozása", "control_bottom_app_bar_delete": "Törlés", "control_bottom_app_bar_delete_from_immich": "Törlés az Immich-ből", "control_bottom_app_bar_delete_from_local": "Törlés az eszközről", - "control_bottom_app_bar_download": "Download", - "control_bottom_app_bar_edit": "Edit", + "control_bottom_app_bar_download": "Letöltés", + "control_bottom_app_bar_edit": "Szerkesztés", "control_bottom_app_bar_edit_location": "Hely Módosítása", "control_bottom_app_bar_edit_time": "Dátum és Idő Módosítása", "control_bottom_app_bar_favorite": "Kedvenc", @@ -189,14 +189,14 @@ "control_bottom_app_bar_unarchive": "Nem Archivált", "control_bottom_app_bar_unfavorite": "Nem Kedvenc", "control_bottom_app_bar_upload": "Feltöltés", - "create_album": "Create album", + "create_album": "Album létrehozása", "create_album_page_untitled": "Névtelen", - "create_new": "CREATE NEW", + "create_new": "ÚJ LÉTREHOZÁSA", "create_shared_album_page_create": "Létrehoz", "create_shared_album_page_share": "Megosztás", "create_shared_album_page_share_add_assets": "ELEMEK HOZZÁADÁSA", "create_shared_album_page_share_select_photos": "Fotók választása", - "crop": "Crop", + "crop": "Kivágás", "curated_location_page_title": "Helyek", "curated_object_page_title": "Dolgok", "daily_title_text_date": "MMM dd (E)", @@ -216,26 +216,26 @@ "delete_shared_link_dialog_title": "Megosztott Link Törlése", "description_input_hint_text": "Leírás hozzáadása...", "description_input_submit_error": "Nem sikerült frissíteni a leírást. További információért kérjük, nézd meg az eseménynaplót", - "download_canceled": "Download canceled", - "download_complete": "Download complete", - "download_enqueue": "Download enqueued", - "download_error": "Download Error", - "download_failed": "Download failed", - "download_filename": "file: {}", - "download_finished": "Download finished", - "downloading": "Downloading...", - "downloading_media": "Downloading media", - "download_notfound": "Download not found", - "download_paused": "Download paused", - "download_started": "Download started", - "download_sucess": "Download success", - "download_sucess_android": "The media has been downloaded to DCIM/Immich", - "download_waiting_to_retry": "Waiting to retry", + "download_canceled": "Letöltés megszakítva", + "download_complete": "Letöltés kész", + "download_enqueue": "Letöltés sorba állítva", + "download_error": "Letöltési Hiba", + "download_failed": "Sikertelen letöltés", + "download_filename": "fájl: {}", + "download_finished": "Letöltés kész", + "downloading": "Letöltés...", + "downloading_media": "Média letöltése", + "download_notfound": "Letöltés nem található", + "download_paused": "Letöltés szüneteltetve", + "download_started": "Letöltés megkezdve", + "download_sucess": "Sikeres letöltés", + "download_sucess_android": "Média letöltve a DCIM/Immich mappába\n", + "download_waiting_to_retry": "Várakozás", "edit_date_time_dialog_date_time": "Dátum és Idő", "edit_date_time_dialog_timezone": "Időzóna", - "edit_image_title": "Edit", + "edit_image_title": "Szerkesztés", "edit_location_dialog_title": "Hely", - "error_saving_image": "Error: {}", + "error_saving_image": "Hiba: {}", "exif_bottom_sheet_description": "Leírás Hozzáadása...", "exif_bottom_sheet_details": "RÉSZLETEK", "exif_bottom_sheet_location": "HELY", @@ -246,20 +246,20 @@ "experimental_settings_new_asset_list_title": "Kisérleti képrács engedélyezése", "experimental_settings_subtitle": "Csak saját felelősségre használd!", "experimental_settings_title": "Kísérleti", - "favorites": "Favorites", + "favorites": "Kedvencek", "favorites_page_no_favorites": "Nem található kedvencnek jelölt elem", "favorites_page_title": "Kedvencek", - "filename_search": "File name or extension", - "filter": "Filter", + "filename_search": "Fájlnév vagy kiterjesztés", + "filter": "Szűrő", "haptic_feedback_switch": "Rezgéses visszajelzés engedélyezése", "haptic_feedback_title": "Rezgéses Visszajelzés", - "header_settings_add_header_tip": "Add Header", - "header_settings_field_validator_msg": "Value cannot be empty", - "header_settings_header_name_input": "Header name", - "header_settings_header_value_input": "Header value", - "header_settings_page_title": "Proxy Headers", - "headers_settings_tile_subtitle": "Define proxy headers the app should send with each network request", - "headers_settings_tile_title": "Custom proxy headers", + "header_settings_add_header_tip": "Fejléc Hozzáadása", + "header_settings_field_validator_msg": "Az érték nem lehet üres", + "header_settings_header_name_input": "Fejléc neve", + "header_settings_header_value_input": "Fejléc értéke", + "header_settings_page_title": "Proxy Fejlécek", + "headers_settings_tile_subtitle": "Add meg azokat a proxy fejléceket, amiket az app elküldjön minden hálózati kérésnél", + "headers_settings_tile_title": "Egyéni proxy fejlécek", "home_page_add_to_album_conflicts": "{added} elem hozzáadva a(z) \"{album}\" albumhoz. {failed} elem már eleve az albumban volt.", "home_page_add_to_album_err_local": "Helyi elemeket még nem lehet albumba tenni. Kihagyjuk.", "home_page_add_to_album_success": "{added} elem hozzáadva a(z) \"{album}\" albumhoz.", @@ -272,25 +272,25 @@ "home_page_favorite_err_local": "Helyi elemeket még nem lehet a kedvencek közé tenni, úgyhogy ezeket kihagyjuk", "home_page_favorite_err_partner": "Partner elemeit még nem lehet a kedvencek közé tenni, úgyhogy ezeket kihagyjuk", "home_page_first_time_notice": "Ha most használod először az alkalmazást, akkor ahhoz, hogy megjelenjenek a fotók és a videók az idővonaladon, állítsd be, hogy melyik albumaidról készüljön biztonsági mentés.", - "home_page_share_err_local": "Helyi elemekről nem lehet megosztási linket készíteni, úgyhogy kihagyjuk", + "home_page_share_err_local": "Helyi elemekről nem lehet megosztott linket készíteni, úgyhogy kihagyjuk", "home_page_upload_err_limit": "Csak 30 elemet tudsz egyszerre feltölteni, úgyhogy kihagyjuk", - "ignore_icloud_photos": "Ignore iCloud photos", - "ignore_icloud_photos_description": "Photos that are stored on iCloud will not be uploaded to the Immich server", - "image_saved_successfully": "Image saved", + "ignore_icloud_photos": "iCloud fotók figyelmen kívül hagyása", + "ignore_icloud_photos_description": "Az iCloud-ban tárolt fotók nem lesznek feltöltve az Immich szerverre", + "image_saved_successfully": "Kép elmentve", "image_viewer_page_state_provider_download_error": "Letöltési Hiba", "image_viewer_page_state_provider_download_started": "Letöltés Megkezdődött", "image_viewer_page_state_provider_download_success": "Letöltés Sikeres", - "image_viewer_page_state_provider_share_error": "Megosztási Hiba", - "invalid_date": "Invalid date", - "invalid_date_format": "Invalid date format", - "library": "Library", + "image_viewer_page_state_provider_share_error": "Megosztás Hiba", + "invalid_date": "Érvénytelen dátum", + "invalid_date_format": "Érvénytelen dátumformátum", + "library": "Képtár", "library_page_albums": "Albumok", "library_page_archive": "Archívum", "library_page_device_albums": "Albumok az Eszközön", "library_page_favorites": "Kedvencek", "library_page_new_album": "Új album", "library_page_sharing": "Megosztás", - "library_page_sort_asset_count": "Eszközök száma", + "library_page_sort_asset_count": "Elemek száma", "library_page_sort_created": "Létrehozás ideje", "library_page_sort_last_modified": "Utolsó módosítás ideje", "library_page_sort_most_oldest_photo": "Legrégebbi fotó", @@ -310,14 +310,14 @@ "login_form_email_hint": "email@cimed.hu", "login_form_endpoint_hint": "http(s)://szerver-címe:port/api", "login_form_endpoint_url": "Szerver címe", - "login_form_err_http": "Kérjük, adj meg egy http:// vagy https:// címet", + "login_form_err_http": "Kérjük, hogy egy http:// vagy https:// címet adj meg", "login_form_err_invalid_email": "Érvénytelen email cím", "login_form_err_invalid_url": "Érvénytelen cím", "login_form_err_leading_whitespace": "Az első karakter szóköz", "login_form_err_trailing_whitespace": "Az utolsó karakter szóköz", "login_form_failed_get_oauth_server_config": "Nem sikerült az OAuth bejelentkezés. Ellenőrizd a szerver címét.", "login_form_failed_get_oauth_server_disable": "OAuth bejelentkezés nem elérhető ezen a szerveren", - "login_form_failed_login": "Hiba bejelentkezés közben, ellenőrizd a címet, email-t és a jelszót", + "login_form_failed_login": "Hiba a bejelentkezés közben, ellenőrizd a szerver címét, az emailt és a jelszót", "login_form_handshake_exception": "SSL Kézfogási Hiba törént. Engedélyezd az önaláírt tanúsítvényokat a beállításokban, hogy ha önaláírt tanúsítványt használsz.", "login_form_label_email": "Email", "login_form_label_password": "Jelszó", @@ -339,7 +339,7 @@ "map_no_assets_in_bounds": "Nincsenek fotók a környéken", "map_no_location_permission_content": "A helymeghatározást engedélyezni kell a jelenlegi helyednél lévő elemek megjelenítéséhez. Szeretnéd most engedélyezni?", "map_no_location_permission_title": "Helymeghatározás letiltva", - "map_settings_dark_mode": "Sötét mód", + "map_settings_dark_mode": "Sötét téma", "map_settings_date_range_option_all": "Összes", "map_settings_date_range_option_day": "Elmúlt 24 óra", "map_settings_date_range_option_days": "Elmúlt {} nap", @@ -353,56 +353,56 @@ "map_settings_only_relative_range": "Dátum intervallum", "map_settings_only_show_favorites": "Csak Kedvencek Mutatása", "map_settings_theme_settings": "Térkép Témája", - "map_zoom_to_see_photos": "Kicsinyíts, hogy láss fényképeket", + "map_zoom_to_see_photos": "Kicsinyítsd, hogy láss fényképeket", "memories_all_caught_up": "Naprakész vagy", "memories_check_back_tomorrow": "Nézz vissza holnap újabb emlékekért", "memories_start_over": "Újrakezdés", "memories_swipe_to_close": "Bezáráshoz söpörd ki felfelé", - "memories_year_ago": "A year ago", - "memories_years_ago": "{} years ago", + "memories_year_ago": "Egy éve", + "memories_years_ago": "{} éve", "monthly_title_text_date_format": "y MMMM", - "motion_photos_page_title": "Mozgó Fotók", + "motion_photos_page_title": "Mozgóképek", "multiselect_grid_edit_date_time_err_read_only": "Csak-olvasható elem(ek) dátuma nem módosítható, ezért kihagyjuk", - "multiselect_grid_edit_gps_err_read_only": "Csak-olvasható elem(ek) helyszíne nem módosítható, ezért kihagyjuk", - "my_albums": "My albums", + "multiselect_grid_edit_gps_err_read_only": "Csak-olvasható elem(ek) helye nem módosítható, ezért kihagyjuk", + "my_albums": "Saját albumaim", "no_assets_to_show": "Nincs megjeleníthető elem", - "no_name": "No name", + "no_name": "Névtelen", "notification_permission_dialog_cancel": "Mégsem", "notification_permission_dialog_content": "Az értesítések bekapcsolásához a Beállítások menüben válaszd ki az Engedélyezés-t.", "notification_permission_dialog_settings": "Beállítások", - "notification_permission_list_tile_content": "Értesítések engedélyezése", + "notification_permission_list_tile_content": "Értesítések engedélyezése.", "notification_permission_list_tile_enable_button": "Értesítések Bekapcsolása", "notification_permission_list_tile_title": "Engedély az Értesítésekhez", - "on_this_device": "On this device", + "on_this_device": "Ezen az eszközön", "partner_list_user_photos": "{user} fényképei", "partner_list_view_all": "Összes mutatása", "partner_page_add_partner": "Partner hozzáadása", "partner_page_empty_message": "Még senkivel nem osztottad meg a fényképeidet.", - "partner_page_no_more_users": "Nincs hozzáadható felhasználó", - "partner_page_partner_add_failed": "Nem sikerült hozzáadni a felhasználót", + "partner_page_no_more_users": "Nincs több hozzáadható felhasználó", + "partner_page_partner_add_failed": "Partner hozzáadása sikertelen", "partner_page_select_partner": "Partner kiválasztása", "partner_page_shared_to_title": "Megosztva: ", "partner_page_stop_sharing_content": "{} nem fog többé hozzáférni a fotóidhoz.", "partner_page_stop_sharing_title": "Fotók megosztásának megszűntetése?", "partner_page_title": "Partner", - "partners": "Partners", - "people": "People", + "partners": "Partnerek", + "people": "Emberek", "permission_onboarding_back": "Vissza", "permission_onboarding_continue_anyway": "Folytatás mindenképp", - "permission_onboarding_get_started": "Kezdjük el", + "permission_onboarding_get_started": "Vágjunk bele", "permission_onboarding_go_to_settings": "Beállítások megnyitása", - "permission_onboarding_grant_permission": "Engedélyezés", + "permission_onboarding_grant_permission": "Engedély meadása", "permission_onboarding_log_out": "Kijelentkezés", "permission_onboarding_permission_denied": "Hozzáférés megtagadva. Az Immich használatához engedélyezni kell a fotó és videó hozzáférést a Beállításokban.", "permission_onboarding_permission_granted": "Hozzáférés engedélyezve! Minden készen áll.", "permission_onboarding_permission_limited": "Korlátozott hozzáférés. Ha szeretnéd, hogy az Immich a teljes galéria gyűjteményedet mentse és kezelje, akkor a Beállításokban engedélyezd a fotó és videó jogosultságokat.", - "permission_onboarding_request": "Engedélyezni kell, hogy az Immich hozzáférjen a képekhez és videókhoz", - "places": "Places", + "permission_onboarding_request": "Engedélyezni kell, hogy az Immich hozzáférjen a képeidhez és videóidhoz", + "places": "Helyek", "preferences_settings_title": "Beállítások", "profile_drawer_app_logs": "Naplók", "profile_drawer_client_out_of_date_major": "A mobilalkalmazás elavult. Kérjük, frissítsd a legfrisebb főverzióra.", "profile_drawer_client_out_of_date_minor": "A mobilalkalmazás elavult. Kérjük, frissítsd a legfrisebb alverzióra.", - "profile_drawer_client_server_up_to_date": "Kliens és a szerver is naprakész", + "profile_drawer_client_server_up_to_date": "A Kliens és a Szerver is naprakész", "profile_drawer_documentation": "Dokumentáció", "profile_drawer_github": "GitHub", "profile_drawer_server_out_of_date_major": "A szerver elavult. Kérjük, frissítsd a legfrisebb főverzióra.", @@ -410,42 +410,42 @@ "profile_drawer_settings": "Beállítások", "profile_drawer_sign_out": "Kijelentkezés", "profile_drawer_trash": "Lomtár", - "recently_added": "Recently added", + "recently_added": "Nemrég hozzáadott", "recently_added_page_title": "Nemrég Hozzáadott", - "save_to_gallery": "Save to gallery", + "save_to_gallery": "Mentés a galériába", "scaffold_body_error_occurred": "Hiba történt", - "search_albums": "Search albums", + "search_albums": "Albumok keresése", "search_bar_hint": "Fotók keresése", "search_filter_apply": "Szűrő alkalmazása", - "search_filter_camera": "Camera", + "search_filter_camera": "Kamera", "search_filter_camera_make": "Gyártó", "search_filter_camera_model": "Modell", - "search_filter_camera_title": "Select camera type", - "search_filter_date": "Date", - "search_filter_date_interval": "{start} to {end}", - "search_filter_date_title": "Select a date range", + "search_filter_camera_title": "Válaszd ki a kamera típusát", + "search_filter_date": "Dátum", + "search_filter_date_interval": "{start} - {end}", + "search_filter_date_title": "Válassz dátum intervallumot", "search_filter_display_option_archive": "Archivált", "search_filter_display_option_favorite": "Kedvenc", "search_filter_display_option_not_in_album": "Nincs albumban", - "search_filter_display_options": "Display Options", - "search_filter_display_options_title": "Display options", - "search_filter_location": "Location", - "search_filter_location_city": "Város", + "search_filter_display_options": "Megjelenítési Beállítások", + "search_filter_display_options_title": "Megjelenítési beállítások", + "search_filter_location": "Hely", + "search_filter_location_city": "Település", "search_filter_location_country": "Ország", - "search_filter_location_state": "Állam", - "search_filter_location_title": "Select location", - "search_filter_media_type": "Media Type", + "search_filter_location_state": "Megye/Állam", + "search_filter_location_title": "Válassz helyet", + "search_filter_media_type": "Média Típus", "search_filter_media_type_all": "Összes", "search_filter_media_type_image": "Kép", - "search_filter_media_type_title": "Select media type", + "search_filter_media_type_title": "Válassz média típust", "search_filter_media_type_video": "Videó", - "search_filter_people": "People", - "search_filter_people_title": "Select people", + "search_filter_people": "Emberek", + "search_filter_people_title": "Válassz embereket", "search_page_categories": "Kategóriák", "search_page_favorites": "Kedvencek", - "search_page_motion_photos": "Mozgó Fotók", + "search_page_motion_photos": "Mozgóképek", "search_page_no_objects": "Nincs Információ a Tárgyakról", - "search_page_no_places": "Nincs Információ a Helyszínekről", + "search_page_no_places": "Nincs Információ a Helyekről", "search_page_people": "Emberek", "search_page_person_add_name_dialog_cancel": "Mégsem", "search_page_person_add_name_dialog_hint": "Név", @@ -461,13 +461,13 @@ "search_page_things": "Dolgok", "search_page_videos": "Videók", "search_page_view_all_button": "Összes mutatása", - "search_page_your_activity": "Tevékenységek", - "search_page_your_map": "Térkép", - "search_result_page_new_search_hint": "Új keresés", - "search_suggestion_list_smart_search_hint_1": "Az intelligens keresés alapértelmezetten be van kapcsolva, metaadatokat így kereshetsz", + "search_page_your_activity": "Tevékenységeid", + "search_page_your_map": "Térképed", + "search_result_page_new_search_hint": "Új Keresés", + "search_suggestion_list_smart_search_hint_1": "Az intelligens keresés alapértelmezetten be van kapcsolva, metaadatokat így kereshetsz:", "search_suggestion_list_smart_search_hint_2": "m:keresési-kifejezés", "select_additional_user_for_sharing_page_suggestions": "Javaslatok", - "select_user_for_sharing_page_err_album": "Nem sikerült létrehozni az albumot", + "select_user_for_sharing_page_err_album": "Az album létrehozása sikertelen", "select_user_for_sharing_page_share_suggestions": "Javaslatok", "server_info_box_app_version": "Alkalmazás Verzió", "server_info_box_latest_release": "Legfrissebb Verzió", @@ -507,7 +507,7 @@ "shared_album_activities_input_hint": "Szólj hozzá", "shared_album_activity_remove_content": "Törölni szeretnéd ezt a tevékenységet?", "shared_album_activity_remove_title": "Tevékenység Törlése", - "shared_album_activity_setting_subtitle": "Engedd, hogy mások reagáljanak", + "shared_album_activity_setting_subtitle": "Mások is reagálhatnak", "shared_album_activity_setting_title": "Hozzászólások és lájkok", "shared_album_section_people_action_error": "Hiba az albummal kapcsolatos kilépés/eltávolítás közben", "shared_album_section_people_action_leave": "Felhasználó eltávolítása az albumból", @@ -518,8 +518,8 @@ "shared_link_app_bar_title": "Megosztott Linkek", "shared_link_clipboard_copied_massage": "Vágólapra másolva", "shared_link_clipboard_text": "Link: {}\nJelszó: {}", - "shared_link_create_app_bar_title": "Megosztási link létrehozása", - "shared_link_create_error": "Hiba a megosztási link létrehozásakor", + "shared_link_create_app_bar_title": "Megosztott link létrehozása", + "shared_link_create_error": "Hiba a megosztott link létrehozásakor", "shared_link_create_info": "A linket használva bárki megnézheti a kiválasztott kép(ek)et", "shared_link_create_submit_button": "Link létrehozása", "shared_link_edit_allow_download": "Letöltés engedélyezése", @@ -539,11 +539,11 @@ "shared_link_edit_expire_after_option_never": "Soha", "shared_link_edit_expire_after_option_year": "{} év", "shared_link_edit_password": "Jelszó", - "shared_link_edit_password_hint": "Add meg a megosztási jelszót", + "shared_link_edit_password_hint": "Add meg a megosztáshoz tartozó jelszót", "shared_link_edit_show_meta": "Metaadatok mutatása", "shared_link_edit_submit_button": "Link frissítése", - "shared_link_empty": "Nincsenek megosztási linkek", - "shared_link_error_server_url_fetch": "A szerver címét nem sikerült betölteni", + "shared_link_empty": "Nincsenek megosztott linkek", + "shared_link_error_server_url_fetch": "A szerver címét nem lehet betölteni", "shared_link_expired": "Lejárt", "shared_link_expires_day": "{} nap múlva lejár", "shared_link_expires_days": "{} nap múlva lejár", @@ -558,53 +558,53 @@ "shared_link_info_chip_download": "Letöltés", "shared_link_info_chip_metadata": "EXIF", "shared_link_info_chip_upload": "Feltöltés", - "shared_link_manage_links": "Megosztási linkek kezelése", + "shared_link_manage_links": "Megosztott linkek kezelése", "shared_link_public_album": "Nyilvános album", - "shared_links": "Shared links", + "shared_links": "Megosztott linkek", "share_done": "Kész", - "shared_with_me": "Shared with me", + "shared_with_me": "Velem megosztva", "share_invite": "Meghívás az albumba", "sharing_page_album": "Megosztott albumok", - "sharing_page_description": "Megosztott albumok létrehozásával fényképeket és videókat oszthatsz meg a hálózatodban lévő emberekkel.", + "sharing_page_description": "Megosztott albumok létrehozásával fényképeket és videókat oszthatsz meg az ismerőseiddel.", "sharing_page_empty_list": "ÜRES LISTA", "sharing_silver_appbar_create_shared_album": "Új megosztott album", - "sharing_silver_appbar_shared_links": "Megosztási linkek", + "sharing_silver_appbar_shared_links": "Megosztott linkek", "sharing_silver_appbar_share_partner": "Megosztás partnerrel", - "sync": "Sync", - "sync_albums": "Sync albums", - "sync_albums_manual_subtitle": "Sync all uploaded videos and photos to the selected backup albums", - "sync_upload_album_setting_subtitle": "Create and upload your photos and videos to the selected albums on Immich", + "sync": "Szinkronizálás", + "sync_albums": "Albumok szinkronizálása", + "sync_albums_manual_subtitle": "Összes fotó és videó létrehozása és szinkronizálása a kiválasztott Immich albumokba", + "sync_upload_album_setting_subtitle": "Fotók és videók létrehozása és szinkronizálása a kiválasztott Immich albumba", "tab_controller_nav_library": "Képtár", "tab_controller_nav_photos": "Képek", "tab_controller_nav_search": "Keresés", "tab_controller_nav_sharing": "Megosztás", "theme_setting_asset_list_storage_indicator_title": "Tárhely ikon mutatása az elemeken", "theme_setting_asset_list_tiles_per_row_title": "Elemek száma soronként ({})", - "theme_setting_colorful_interface_subtitle": "Apply primary color to background surfaces.", - "theme_setting_colorful_interface_title": "Colorful interface", - "theme_setting_dark_mode_switch": "Sötét mód", + "theme_setting_colorful_interface_subtitle": "Alapértelmezett szín használata a háttérben lévő felületekhez", + "theme_setting_colorful_interface_title": "Színes felhasználói felület", + "theme_setting_dark_mode_switch": "Sötét téma", "theme_setting_image_viewer_quality_subtitle": "Részletes képmegjelenítő minőségének beállítása", "theme_setting_image_viewer_quality_title": "Képmegjelenítő minősége", - "theme_setting_primary_color_subtitle": "Pick a color for primary actions and accents.", - "theme_setting_primary_color_title": "Primary color", - "theme_setting_system_primary_color_title": "Use system color", + "theme_setting_primary_color_subtitle": "Válassz egy színt az alapértelmezett műveletekhez és kiemelésekhez", + "theme_setting_primary_color_title": "Alapértelmezett szín", + "theme_setting_system_primary_color_title": "Rendszerszínek használata", "theme_setting_system_theme_switch": "Automatikus (követi a rendszer témáját)", "theme_setting_theme_subtitle": "Alkalmazás témájának választása", "theme_setting_theme_title": "Téma", "theme_setting_three_stage_loading_subtitle": "A háromlépcsős betöltés javíthatja a betöltési teljesítményt, de jelentősen növeli a hálózati forgalmat", "theme_setting_three_stage_loading_title": "Háromlépcsős betöltés engedélyezése", "translated_text_options": "Beállítások", - "trash": "Trash", - "trash_emptied": "Emptied trash", + "trash": "Lomtár", + "trash_emptied": "Lomtár kiürítve", "trash_page_delete": "Töröl", "trash_page_delete_all": "Mindet Töröl", - "trash_page_empty_trash_btn": "Lomtár Ürítése", + "trash_page_empty_trash_btn": "Lomtár ürítése", "trash_page_empty_trash_dialog_content": "Ki szeretnéd üríteni a lomtárban lévő elemeket? Ezeket véglegesen eltávolítjuk az Immich-ből", "trash_page_empty_trash_dialog_ok": "Ok", "trash_page_info": "A Lomátrba helyezett elemek {} nap után véglegesen törlődnek", - "trash_page_no_assets": "Nincsen semmi a Lomtárban", + "trash_page_no_assets": "A Lomtár üres", "trash_page_restore": "Visszaállít", - "trash_page_restore_all": "Mindet Visszaállítja", + "trash_page_restore_all": "Mindet Visszaállít", "trash_page_select_assets_btn": "Elemek kiválasztása", "trash_page_select_btn": "Kiválaszt", "trash_page_title": "Lomtár ({})", @@ -613,12 +613,12 @@ "upload_dialog_ok": "Feltöltés", "upload_dialog_title": "Elem Feltöltése", "version_announcement_overlay_ack": "Megértettem", - "version_announcement_overlay_release_notes": "a változtatások listáját elolvasd", - "version_announcement_overlay_text_1": "Szia, egy új verzió érhető el", - "version_announcement_overlay_text_2": "kérlek szánj időt arra, hogy ", - "version_announcement_overlay_text_3": "és gyöződj meg róla, hogy a docker-compose és .env beállításai naprakészek és pontosak, különösen akkor, ha watchtower-t vagy bármi olyan megoldást használsz, ami automatikusan frissíti a szervert.", - "version_announcement_overlay_title": "Új Szerververzió Érhető El \uD83C\uDF89", - "videos": "Videos", + "version_announcement_overlay_release_notes": "kiadási megjegyzések áttekintésére", + "version_announcement_overlay_text_1": "Szia barátom, ennek az alkalmazásnak van egy új verziója: ", + "version_announcement_overlay_text_2": "Kérjük, szánj időt a", + "version_announcement_overlay_text_3": ", és győződj meg róla, hogy a docker-compose.yml és az .env beállításaid naprakészek, hogy elkerüld a hibás konfigurációkat, különösen, ha a WatchTower-t vagy bármilyen automatikus frissítési megoldást használsz.", + "version_announcement_overlay_title": "Elérhető Új Szerververzió \uD83C\uDF89", + "videos": "Videók", "viewer_remove_from_stack": "Eltávolít a Csoportból", "viewer_stack_use_as_main_asset": "Fő Elemnek Beállít", "viewer_unstack": "Csoport Megszűntetése" diff --git a/mobile/assets/i18n/ja-JP.json b/mobile/assets/i18n/ja-JP.json index e5fed5705d69a..bcc1df654866f 100644 --- a/mobile/assets/i18n/ja-JP.json +++ b/mobile/assets/i18n/ja-JP.json @@ -6,7 +6,7 @@ "action_common_save": "保存", "action_common_select": "選択", "action_common_update": "更新", - "add_a_name": "Add a name", + "add_a_name": "名前を追加", "add_to_album_bottom_sheet_added": "{album}に追加", "add_to_album_bottom_sheet_already_exists": "{album}に追加済み", "advanced_settings_log_level_title": "ログレベル: {}", @@ -22,7 +22,7 @@ "advanced_settings_troubleshooting_title": "トラブルシューティング", "album_info_card_backup_album_excluded": "除外中", "album_info_card_backup_album_included": "選択中", - "albums": "Albums", + "albums": "アルバム", "album_thumbnail_card_item": "1枚", "album_thumbnail_card_items": "{}枚", "album_thumbnail_card_shared": "共有済み", @@ -38,13 +38,13 @@ "album_viewer_appbar_share_remove": "アルバムから削除", "album_viewer_appbar_share_to": "次の方々と共有します", "album_viewer_page_share_add_users": "ユーザーを追加", - "all": "All", + "all": "全て", "all_people_page_title": "人物", "all_videos_page_title": "ビデオ", "app_bar_signout_dialog_content": " サインアウトしますか?", "app_bar_signout_dialog_ok": "はい", "app_bar_signout_dialog_title": " サインアウト", - "archived": "Archived", + "archived": "アーカイブ済み", "archive_page_no_archived_assets": "アーカイブ済みの写真またはビデオがありません", "archive_page_title": "アーカイブ({})", "asset_action_delete_err_read_only": "読み取り専用の項目は削除できません。スキップします", @@ -189,9 +189,9 @@ "control_bottom_app_bar_unarchive": "アーカイブを解除", "control_bottom_app_bar_unfavorite": "お気に入りから外す", "control_bottom_app_bar_upload": "アップロード", - "create_album": "Create album", + "create_album": "アルバム作成", "create_album_page_untitled": "タイトルなし", - "create_new": "CREATE NEW", + "create_new": "新規作成", "create_shared_album_page_create": "作成", "create_shared_album_page_share": "共有", "create_shared_album_page_share_add_assets": "写真を追加", @@ -246,11 +246,11 @@ "experimental_settings_new_asset_list_title": "試験的なグリッドを有効化", "experimental_settings_subtitle": "試験的機能につき自己責任で!", "experimental_settings_title": "試験的機能", - "favorites": "Favorites", + "favorites": "お気に入り", "favorites_page_no_favorites": "お気に入り登録された写真またはビデオがありません", "favorites_page_title": "お気に入り", "filename_search": "ファイル名、又は拡張子", - "filter": "Filter", + "filter": "フィルター", "haptic_feedback_switch": "ハプティックフィードバック", "haptic_feedback_title": "ハプティックフィードバックを有効にする", "header_settings_add_header_tip": "ヘッダを追加", @@ -274,8 +274,8 @@ "home_page_first_time_notice": "はじめてアプリを使う場合、タイムラインに写真を表示するためにアルバムを選択してください", "home_page_share_err_local": "ローカルのみの項目をリンクで共有はできません。スキップします", "home_page_upload_err_limit": "1回でアップロードできる写真の数は30枚です。スキップします", - "ignore_icloud_photos": "Ignore iCloud photos", - "ignore_icloud_photos_description": "Photos that are stored on iCloud will not be uploaded to the Immich server", + "ignore_icloud_photos": "iCloud上の写真をスキップ", + "ignore_icloud_photos_description": "iCloudに保存済みの項目をImmichサーバー上にアップロードしません", "image_saved_successfully": "画像が保存されました", "image_viewer_page_state_provider_download_error": "ダウンロード失敗", "image_viewer_page_state_provider_download_started": "ダウンロードが始まります", @@ -283,7 +283,7 @@ "image_viewer_page_state_provider_share_error": "共有エラー", "invalid_date": "日付が無効です", "invalid_date_format": "日付のフォーマットが無効です", - "library": "Library", + "library": "ライブラリ", "library_page_albums": "アルバム", "library_page_archive": "アーカイブ", "library_page_device_albums": "デバイス上のアルバム", @@ -364,7 +364,7 @@ "motion_photos_page_title": "モーションフォト", "multiselect_grid_edit_date_time_err_read_only": "読み取り専用の項目の日付を変更できません", "multiselect_grid_edit_gps_err_read_only": "読み取り専用の項目の位置情報を変更できません", - "my_albums": "My albums", + "my_albums": "自分のアルバム", "no_assets_to_show": "表示する項目がありません", "no_name": "名前がありません", "notification_permission_dialog_cancel": "キャンセル", @@ -373,7 +373,7 @@ "notification_permission_list_tile_content": "通知の許可 をオンにしてください", "notification_permission_list_tile_enable_button": "通知をオンにする", "notification_permission_list_tile_title": "通知の許可", - "on_this_device": "On this device", + "on_this_device": "デバイス上の項目", "partner_list_user_photos": "{user}さんの写真", "partner_list_view_all": "すべて見る", "partner_page_add_partner": "パートナーを追加", @@ -385,8 +385,8 @@ "partner_page_stop_sharing_content": "{}は写真へアクセスできなくなります", "partner_page_stop_sharing_title": "写真の共有を無効化しますか?", "partner_page_title": "パートナー", - "partners": "Partners", - "people": "People", + "partners": "パートナー", + "people": "人物", "permission_onboarding_back": "戻る", "permission_onboarding_continue_anyway": "無視して続行", "permission_onboarding_get_started": "はじめる", @@ -397,7 +397,7 @@ "permission_onboarding_permission_granted": "写真へのアクセスが許可されました", "permission_onboarding_permission_limited": "写真へのアクセスが制限されています。Immichが写真のバックアップと管理を行うには、システム設定から写真と動画のアクセス権限を変更してください。", "permission_onboarding_request": "Immichは写真へのアクセス許可が必要です", - "places": "Places", + "places": "場所", "preferences_settings_title": "設定", "profile_drawer_app_logs": "ログ", "profile_drawer_client_out_of_date_major": "アプリが更新されてません。最新のバージョンに更新してください", @@ -410,11 +410,11 @@ "profile_drawer_settings": "設定", "profile_drawer_sign_out": "サインアウト", "profile_drawer_trash": "ゴミ箱", - "recently_added": "Recently added", + "recently_added": "最近追加された項目", "recently_added_page_title": "最近", "save_to_gallery": "ギャラリーに保存", "scaffold_body_error_occurred": "エラーが発生しました", - "search_albums": "Search albums", + "search_albums": "アルバムを探す", "search_bar_hint": "写真を検索", "search_filter_apply": "フィルターを適用する", "search_filter_camera": "カメラ", @@ -560,9 +560,9 @@ "shared_link_info_chip_upload": "アップロード", "shared_link_manage_links": "共有済みのリンクを管理", "shared_link_public_album": "公開アルバム", - "shared_links": "Shared links", + "shared_links": "共有済みリンク", "share_done": "完了", - "shared_with_me": "Shared with me", + "shared_with_me": "自分と共有中", "share_invite": "アルバムに招待", "sharing_page_album": "共有アルバム", "sharing_page_description": "共有アルバムを作成して同じネットワークにいる人たちに写真を共有", @@ -594,7 +594,7 @@ "theme_setting_three_stage_loading_subtitle": "三段階読み込みを有効にすると、パフォーマンスが改善する可能性がありますが、ネットワーク負荷が著しく増加します。", "theme_setting_three_stage_loading_title": "三段階読み込みをオンにする", "translated_text_options": "オプション", - "trash": "Trash", + "trash": "ゴミ箱", "trash_emptied": "ゴミ箱を空にしました", "trash_page_delete": "削除", "trash_page_delete_all": "すべて削除", @@ -618,7 +618,7 @@ "version_announcement_overlay_text_2": "のバージョンが公開中です。", "version_announcement_overlay_text_3": "を確認してください。docker-composeや.envファイルが最新の状態に更新済みか、特にWatchTowerなどのツールを使ってDockerイメージを自動アップデートされてる方は確認してください。", "version_announcement_overlay_title": "サーバーの最新版が公開中\uD83C\uDF89", - "videos": "Videos", + "videos": "動画", "viewer_remove_from_stack": "スタックから外す", "viewer_stack_use_as_main_asset": "メインの画像として使用する", "viewer_unstack": "スタックを解除" diff --git a/mobile/assets/i18n/ko-KR.json b/mobile/assets/i18n/ko-KR.json index 090925e724949..02eace03b08b8 100644 --- a/mobile/assets/i18n/ko-KR.json +++ b/mobile/assets/i18n/ko-KR.json @@ -30,10 +30,10 @@ "album_thumbnail_shared_by": "{}님이 공유함", "album_viewer_appbar_delete_confirm": "이 앨범을 삭제하시겠습니까?", "album_viewer_appbar_share_delete": "앨범 삭제", - "album_viewer_appbar_share_err_delete": "앨범을 삭제하지 못했습니다.", - "album_viewer_appbar_share_err_leave": "앨범에서 나가지 못했습니다.", + "album_viewer_appbar_share_err_delete": "앨범 삭제에 실패했습니다.", + "album_viewer_appbar_share_err_leave": "앨범 나가기에 실패했습니다.", "album_viewer_appbar_share_err_remove": "앨범에서 항목을 제거하지 못했습니다.", - "album_viewer_appbar_share_err_title": "앨범명을 변경하지 못했습니다.", + "album_viewer_appbar_share_err_title": "앨범명 변경에 실패했습니다.", "album_viewer_appbar_share_leave": "앨범 나가기", "album_viewer_appbar_share_remove": "앨범에서 제거", "album_viewer_appbar_share_to": "공유 대상", @@ -44,7 +44,7 @@ "app_bar_signout_dialog_content": "정말 로그아웃하시겠습니까?", "app_bar_signout_dialog_ok": "네", "app_bar_signout_dialog_title": "로그아웃", - "archived": "아카이브", + "archived": "보관함", "archive_page_no_archived_assets": "보관된 항목 없음", "archive_page_title": "보관함 ({})", "asset_action_delete_err_read_only": "읽기 전용 항목은 삭제할 수 없습니다. 건너뜁니다.", @@ -216,20 +216,20 @@ "delete_shared_link_dialog_title": "공유 링크 삭제", "description_input_hint_text": "설명 추가...", "description_input_submit_error": "설명을 변경하는 중 문제가 발생했습니다. 자세한 내용은 로그를 참조하세요.", - "download_canceled": "다운로드가 취소되었습니다", - "download_complete": "다은로드가 완료되었습니다", + "download_canceled": "다운로드가 취소되었습니다.", + "download_complete": "다은로드가 완료되었습니다.", "download_enqueue": "대기열에 다운로드", - "download_error": "다운로드 중 문제가 발생했습니다", - "download_failed": "다운로드에 실패하였습니다", + "download_error": "다운로드 중 문제가 발생했습니다.", + "download_failed": "다운로드에 실패하였습니다.", "download_filename": "파일: {}", - "download_finished": "다운로드가 완료되었습니다", + "download_finished": "다운로드가 완료되었습니다.", "downloading": "다운로드 중...", "downloading_media": "미디어 다운로드 중", "download_notfound": "다운로드할 수 없음", "download_paused": "다운로드 일시 중지됨", - "download_started": "다운로드가 시작되었습니다", - "download_sucess": "다운로드가 완료되었습니다", - "download_sucess_android": "미디어가 DCIM/Immich에 저장되었습니다", + "download_started": "다운로드가 시작되었습니다.", + "download_sucess": "다운로드가 완료되었습니다.", + "download_sucess_android": "미디어가 DCIM/Immich에 저장되었습니다.", "download_waiting_to_retry": "재시도 대기 중", "edit_date_time_dialog_date_time": "날짜 및 시간", "edit_date_time_dialog_timezone": "시간대", @@ -276,7 +276,7 @@ "home_page_upload_err_limit": "한 번에 최대 30개의 항목만 업로드할 수 있습니다.", "ignore_icloud_photos": "iCloud 사진 제외", "ignore_icloud_photos_description": "iCloud에 저장된 사진은 Immich 서버에 업로드되지 않습니다.", - "image_saved_successfully": "이미지가 저장되었습니다", + "image_saved_successfully": "이미지가 저장되었습니다.", "image_viewer_page_state_provider_download_error": "다운로드 오류", "image_viewer_page_state_provider_download_started": "다운로드가 시작되었습니다.", "image_viewer_page_state_provider_download_success": "다운로드 완료", @@ -313,8 +313,8 @@ "login_form_err_http": "http:// 또는 https://로 시작해야 합니다.", "login_form_err_invalid_email": "유효하지 않은 이메일", "login_form_err_invalid_url": "잘못된 URL입니다.", - "login_form_err_leading_whitespace": "시작 부분에 공백이 있습니다.", - "login_form_err_trailing_whitespace": "끝 부분에 공백이 있습니다.", + "login_form_err_leading_whitespace": "문자 시작에 공백이 있습니다.", + "login_form_err_trailing_whitespace": "문자 끝에 공백이 있습니다.", "login_form_failed_get_oauth_server_config": "OAuth 로그인 중 문제 발생, 서버 URL을 확인하세요.", "login_form_failed_get_oauth_server_disable": "이 서버는 OAuth 기능을 지원하지 않습니다.", "login_form_failed_login": "로그인 오류. 서버 URL, 이메일 및 비밀번호를 확인하세요.", @@ -500,7 +500,7 @@ "setting_video_viewer_title": "동영상", "share_add": "추가", "share_add_photos": "사진 추가", - "share_add_title": "앨범명 추가", + "share_add_title": "제목 추가", "share_assets_selected": "{}개 항목 선택됨", "share_create_album": "앨범 생성", "shared_album_activities_input_disable": "댓글이 비활성화되었습니다", @@ -594,7 +594,7 @@ "theme_setting_three_stage_loading_subtitle": "이 기능은 앱의 로드 성능을 향상시킬 수 있지만 더 많은 데이터를 사용합니다.", "theme_setting_three_stage_loading_title": "3단계 로드 활성화", "translated_text_options": "옵션", - "trash": "쓰레기통", + "trash": "휴지통", "trash_emptied": "휴지통을 비웠습니다.", "trash_page_delete": "삭제", "trash_page_delete_all": "모두 삭제", diff --git a/mobile/assets/i18n/nb-NO.json b/mobile/assets/i18n/nb-NO.json index 8bc8402fd3f31..80c9db2804672 100644 --- a/mobile/assets/i18n/nb-NO.json +++ b/mobile/assets/i18n/nb-NO.json @@ -6,7 +6,7 @@ "action_common_save": "Lagre", "action_common_select": "Velg", "action_common_update": "Oppdater", - "add_a_name": "Add a name", + "add_a_name": "Legg til navn", "add_to_album_bottom_sheet_added": "Lagt til i {album}", "add_to_album_bottom_sheet_already_exists": "Allerede i {album}", "advanced_settings_log_level_title": "Loggnivå: {}", @@ -22,7 +22,7 @@ "advanced_settings_troubleshooting_title": "Feilsøking", "album_info_card_backup_album_excluded": "EKSKLUDERT", "album_info_card_backup_album_included": "INKLUDERT", - "albums": "Albums", + "albums": "Albumer", "album_thumbnail_card_item": "1 objekt", "album_thumbnail_card_items": "{} objekter", "album_thumbnail_card_shared": " · Delt", @@ -38,13 +38,13 @@ "album_viewer_appbar_share_remove": "Fjern fra album", "album_viewer_appbar_share_to": "Del til", "album_viewer_page_share_add_users": "Legg til brukere", - "all": "All", + "all": "Alt", "all_people_page_title": "Folk", "all_videos_page_title": "Videoer", "app_bar_signout_dialog_content": "Er du sikker på at du vil logge ut?", "app_bar_signout_dialog_ok": "Ja", "app_bar_signout_dialog_title": "Logg ut", - "archived": "Archived", + "archived": "Arkivert", "archive_page_no_archived_assets": "Ingen arkiverte objekter funnet", "archive_page_title": "Arkiv ({})", "asset_action_delete_err_read_only": "Kan ikke slette objekt(er) med kun lese-rettighet, hopper over", @@ -189,9 +189,9 @@ "control_bottom_app_bar_unarchive": "Fjern fra arkiv", "control_bottom_app_bar_unfavorite": "Fjern favoritt", "control_bottom_app_bar_upload": "Last opp", - "create_album": "Create album", + "create_album": "Opprett album", "create_album_page_untitled": "Uten navn", - "create_new": "CREATE NEW", + "create_new": "LAG NY", "create_shared_album_page_create": "Opprett", "create_shared_album_page_share": "Del", "create_shared_album_page_share_add_assets": "LEGG TIL OBJEKTER", @@ -246,7 +246,7 @@ "experimental_settings_new_asset_list_title": "Aktiver eksperimentell rutenettsvisning", "experimental_settings_subtitle": "Bruk på egen risiko!", "experimental_settings_title": "Eksperimentelt", - "favorites": "Favorites", + "favorites": "Favoritter", "favorites_page_no_favorites": "Ingen favorittobjekter funnet", "favorites_page_title": "Favoritter", "filename_search": "Filnavn eller filtype", @@ -274,8 +274,8 @@ "home_page_first_time_notice": "Hvis dette er første gangen du benytter appen, velg et album (eller flere) for sikkerhetskopiering, slik at tidslinjen kan fylles med dine bilder og videoer.", "home_page_share_err_local": "Kan ikke dele lokale objekter via link, hopper over", "home_page_upload_err_limit": "Maksimalt 30 objekter kan lastes opp om gangen, hopper over", - "ignore_icloud_photos": "Ignore iCloud photos", - "ignore_icloud_photos_description": "Photos that are stored on iCloud will not be uploaded to the Immich server", + "ignore_icloud_photos": "Ignorer iCloud bilder", + "ignore_icloud_photos_description": "Bilder som er lagret på iCloud vil ikke lastes opp til Immich", "image_saved_successfully": "Bilde lagret", "image_viewer_page_state_provider_download_error": "Nedlasting feilet", "image_viewer_page_state_provider_download_started": "Nedlasting startet", @@ -283,7 +283,7 @@ "image_viewer_page_state_provider_share_error": "Delingsfeil", "invalid_date": "Ugyldig dato", "invalid_date_format": "Ugyldig datoformat", - "library": "Library", + "library": "Bibliotek", "library_page_albums": "Albumer", "library_page_archive": "Arkiv", "library_page_device_albums": "Albumer på enheten", @@ -364,7 +364,7 @@ "motion_photos_page_title": "Bevegelige bilder", "multiselect_grid_edit_date_time_err_read_only": "Kan ikke endre dato på objekt(er) med kun lese-rettigheter, hopper over", "multiselect_grid_edit_gps_err_read_only": "Kan ikke endre lokasjon på objekt(er) med kun lese-rettigheter, hopper over", - "my_albums": "My albums", + "my_albums": "Mine albumer", "no_assets_to_show": "Ingen objekter å vise", "no_name": "Ingen navn", "notification_permission_dialog_cancel": "Avbryt", @@ -373,7 +373,7 @@ "notification_permission_list_tile_content": "Gi tilgang for å aktivere notifikasjoner", "notification_permission_list_tile_enable_button": "Aktiver notifikasjoner", "notification_permission_list_tile_title": "Notifikasjonstilgang", - "on_this_device": "On this device", + "on_this_device": "På denne enheten", "partner_list_user_photos": "{user}'s bilder", "partner_list_view_all": "Vis alle", "partner_page_add_partner": "Legg til partner", @@ -385,8 +385,8 @@ "partner_page_stop_sharing_content": "{} vil ikke lenger ha tilgang til dine bilder.", "partner_page_stop_sharing_title": "Stopp deling av bildene dine?", "partner_page_title": "Partner", - "partners": "Partners", - "people": "People", + "partners": "Partnere", + "people": "Mennesker", "permission_onboarding_back": "Tilbake", "permission_onboarding_continue_anyway": "Fortsett uansett", "permission_onboarding_get_started": "Kom i gang", @@ -397,7 +397,7 @@ "permission_onboarding_permission_granted": "Tilgang gitt! Du er i gang.", "permission_onboarding_permission_limited": "Begrenset tilgang. For å la Immich sikkerhetskopiere og håndtere galleriet, tillatt bilde- og video-tilgang i Innstillinger.", "permission_onboarding_request": "Immich trenger tilgang til å se dine bilder og videoer", - "places": "Places", + "places": "Steder", "preferences_settings_title": "Innstillinger", "profile_drawer_app_logs": "Logg", "profile_drawer_client_out_of_date_major": "Mobilapp er utdatert. Vennligst oppdater til nyeste versjon.", @@ -410,11 +410,11 @@ "profile_drawer_settings": "Innstillinger", "profile_drawer_sign_out": "Logg ut", "profile_drawer_trash": "Søppelbøtte", - "recently_added": "Recently added", + "recently_added": "Nylig lagt til", "recently_added_page_title": "Nylig lagt til", "save_to_gallery": "Lagre til galleriet", "scaffold_body_error_occurred": "Feil oppstått", - "search_albums": "Search albums", + "search_albums": "Søk i albumer", "search_bar_hint": "Søk i dine bilder", "search_filter_apply": "Aktiver filter", "search_filter_camera": "Kamera", @@ -560,9 +560,9 @@ "shared_link_info_chip_upload": "Last opp", "shared_link_manage_links": "Håndter delte linker", "shared_link_public_album": "Offentlig album", - "shared_links": "Shared links", + "shared_links": "Delte linker", "share_done": "Ferdig", - "shared_with_me": "Shared with me", + "shared_with_me": "Delt med meg", "share_invite": "Inviter til album", "sharing_page_album": "Delte album", "sharing_page_description": "Lag delte albumer for å dele bilder og videoer med folk i nettverket ditt.", @@ -594,7 +594,7 @@ "theme_setting_three_stage_loading_subtitle": "Tre-trinns innlasting kan øke lasteytelsen, men forårsaker betydelig høyere nettverksbelastning", "theme_setting_three_stage_loading_title": "Aktiver tre-trinns innlasting", "translated_text_options": "Valg", - "trash": "Trash", + "trash": "Søppel", "trash_emptied": "Søppelbøtte tømt", "trash_page_delete": "Slett", "trash_page_delete_all": "Slett alt", @@ -618,7 +618,7 @@ "version_announcement_overlay_text_2": "vennligst ta deg tid til å besøke ", "version_announcement_overlay_text_3": " og verifiser at docker-compose og .env-oppsettet ditt er oppdatert for å forhindre en eventuell feilkonfigurasjon, spesielt hvis du benytter WatchTower eller en annen tjeneste som håndterer oppdatering av server-applikasjonen automatisk.", "version_announcement_overlay_title": "Ny serverversjon tilgjengelig", - "videos": "Videos", + "videos": "Videoer", "viewer_remove_from_stack": "Fjern fra stabling", "viewer_stack_use_as_main_asset": "Bruk som hovedobjekt", "viewer_unstack": "avstable" diff --git a/mobile/assets/i18n/pl-PL.json b/mobile/assets/i18n/pl-PL.json index 3a6ba9f3b45f0..12a7e6faf2fdd 100644 --- a/mobile/assets/i18n/pl-PL.json +++ b/mobile/assets/i18n/pl-PL.json @@ -6,7 +6,7 @@ "action_common_save": "Zapisz", "action_common_select": "Wybierz", "action_common_update": "Aktualizuj", - "add_a_name": "Add a name", + "add_a_name": "Dodaj nazwę", "add_to_album_bottom_sheet_added": "Dodano do {album}", "add_to_album_bottom_sheet_already_exists": "Już w {album}", "advanced_settings_log_level_title": "Poziom dziennika: {}", @@ -22,7 +22,7 @@ "advanced_settings_troubleshooting_title": "Rozwiązywanie problemów", "album_info_card_backup_album_excluded": "WYKLUCZONE", "album_info_card_backup_album_included": "WŁĄCZONE", - "albums": "Albums", + "albums": "Albumy", "album_thumbnail_card_item": "1 pozycja", "album_thumbnail_card_items": "{} pozycje", "album_thumbnail_card_shared": "Udostępniony", @@ -44,7 +44,7 @@ "app_bar_signout_dialog_content": "Czy na pewno chcesz się wylogować?", "app_bar_signout_dialog_ok": "Tak", "app_bar_signout_dialog_title": "Wyloguj się", - "archived": "Archived", + "archived": "Zarchiwizowane", "archive_page_no_archived_assets": "Nie znaleziono zarchiwizowanych zasobów", "archive_page_title": "Archiwum ({})", "asset_action_delete_err_read_only": "Nie można usunąć zasobów tylko do odczytu, pomijam", @@ -183,7 +183,7 @@ "control_bottom_app_bar_edit_time": "Edytuj datę i godzinę", "control_bottom_app_bar_favorite": "Ulubione", "control_bottom_app_bar_share": "Udostępnij", - "control_bottom_app_bar_share_to": "Udostępnij", + "control_bottom_app_bar_share_to": "Wyślij", "control_bottom_app_bar_stack": "Stos", "control_bottom_app_bar_trash_from_immich": "Przenieść do kosza", "control_bottom_app_bar_unarchive": "Cofnij archiwizację", @@ -246,7 +246,7 @@ "experimental_settings_new_asset_list_title": "Włącz eksperymentalną układ zdjęć", "experimental_settings_subtitle": "Używaj na własne ryzyko!", "experimental_settings_title": "Eksperymentalny", - "favorites": "Favorites", + "favorites": "Ulubione", "favorites_page_no_favorites": "Nie znaleziono ulubionych zasobów", "favorites_page_title": "Ulubione", "filename_search": "Nazwa pliku lub rozszerzenie", @@ -373,7 +373,7 @@ "notification_permission_list_tile_content": "Przyznaj uprawnienia, aby włączyć powiadomienia.", "notification_permission_list_tile_enable_button": "Włącz Powiadomienia", "notification_permission_list_tile_title": "Pozwolenie na powiadomienia", - "on_this_device": "On this device", + "on_this_device": "Na tym urządzeniu", "partner_list_user_photos": "{user} zdjęcia", "partner_list_view_all": "Pokaż wszystkie", "partner_page_add_partner": "Dodaj partnera", @@ -386,7 +386,7 @@ "partner_page_stop_sharing_title": "Przestać udostępniać swoje zdjęcia?", "partner_page_title": "Partner", "partners": "Partners", - "people": "People", + "people": "Ludzie", "permission_onboarding_back": "Cofnij", "permission_onboarding_continue_anyway": "Kontynuuj mimo to", "permission_onboarding_get_started": "Rozpocznij", @@ -397,7 +397,7 @@ "permission_onboarding_permission_granted": "Pozwolenie udzielone! Wszystko gotowe.", "permission_onboarding_permission_limited": "Pozwolenie ograniczone. Aby umożliwić Immichowi tworzenie kopii zapasowych całej kolekcji galerii i zarządzanie nią, przyznaj uprawnienia do zdjęć i filmów w Ustawieniach.", "permission_onboarding_request": "Immich potrzebuje pozwolenia na przeglądanie Twoich zdjęć i filmów.", - "places": "Places", + "places": "Miejsca", "preferences_settings_title": "Ustawienia", "profile_drawer_app_logs": "Logi", "profile_drawer_client_out_of_date_major": "Aplikacja mobilna jest nieaktualna. Zaktualizuj do najnowszej wersji głównej.", @@ -414,7 +414,7 @@ "recently_added_page_title": "Ostatnio Dodane", "save_to_gallery": "Zapisz w galerii", "scaffold_body_error_occurred": "Wystąpił błąd", - "search_albums": "Search albums", + "search_albums": "Przeszukaj albumy", "search_bar_hint": "Szukaj swoich zdjęć", "search_filter_apply": "Zastosuj filtr", "search_filter_camera": "Kamera", @@ -560,7 +560,7 @@ "shared_link_info_chip_upload": "Wgraj", "shared_link_manage_links": "Zarządzaj udostępnionymi linkami", "shared_link_public_album": "Album publiczny", - "shared_links": "Shared links", + "shared_links": "Udostępnione linki", "share_done": "Zrobione", "shared_with_me": "Shared with me", "share_invite": "Zaproś do albumu", @@ -594,7 +594,7 @@ "theme_setting_three_stage_loading_subtitle": "Trójstopniowe ładowanie może zwiększyć wydajność ładowania, ale powoduje znacznie większe obciążenie sieci", "theme_setting_three_stage_loading_title": "Włączenie trójstopniowego ładowania", "translated_text_options": "Opcje", - "trash": "Trash", + "trash": "Kosz", "trash_emptied": "Opróżnione śmieci", "trash_page_delete": "Usuń", "trash_page_delete_all": "Usuń wszystko", diff --git a/mobile/assets/i18n/pt-PT.json b/mobile/assets/i18n/pt-PT.json index 1adae1b1ec536..a17bae556707f 100644 --- a/mobile/assets/i18n/pt-PT.json +++ b/mobile/assets/i18n/pt-PT.json @@ -6,7 +6,7 @@ "action_common_save": "Salvar", "action_common_select": "Selecionar", "action_common_update": "Atualizar", - "add_a_name": "Add a name", + "add_a_name": "Adicionar nome", "add_to_album_bottom_sheet_added": "Adicionado a {album}", "add_to_album_bottom_sheet_already_exists": "Já existe em {album}", "advanced_settings_log_level_title": "Nível de log: {}", @@ -22,7 +22,7 @@ "advanced_settings_troubleshooting_title": "Resolução de problemas", "album_info_card_backup_album_excluded": "EXCLUÍDO", "album_info_card_backup_album_included": "INCLUÍDO", - "albums": "Albums", + "albums": "Álbuns", "album_thumbnail_card_item": "1 arquivo", "album_thumbnail_card_items": "{} arquivos", "album_thumbnail_card_shared": " · Compartilhado", @@ -38,13 +38,13 @@ "album_viewer_appbar_share_remove": "Remover do álbum", "album_viewer_appbar_share_to": "Compartilhar com", "album_viewer_page_share_add_users": "Adicionar usuários", - "all": "All", + "all": "Todos", "all_people_page_title": "Pessoas", "all_videos_page_title": "Vídeos", "app_bar_signout_dialog_content": "Tem certeza que deseja sair?", "app_bar_signout_dialog_ok": "Sim", "app_bar_signout_dialog_title": "Sair", - "archived": "Archived", + "archived": "Arquivado", "archive_page_no_archived_assets": "Nenhum arquivo encontrado", "archive_page_title": "Arquivado ({})", "asset_action_delete_err_read_only": "Não é possível excluir arquivo só leitura, ignorando", @@ -189,9 +189,9 @@ "control_bottom_app_bar_unarchive": "Desarquivar", "control_bottom_app_bar_unfavorite": "Remover favorito", "control_bottom_app_bar_upload": "Enviar", - "create_album": "Create album", + "create_album": "Criar Álbum", "create_album_page_untitled": "Sem título", - "create_new": "CREATE NEW", + "create_new": "CRIAR NOVO", "create_shared_album_page_create": "Criar", "create_shared_album_page_share": "Compartilhar", "create_shared_album_page_share_add_assets": "ADICIONAR ARQUIVOS", @@ -199,9 +199,9 @@ "crop": "Cortar", "curated_location_page_title": "Locais", "curated_object_page_title": "Objetos", - "daily_title_text_date": "E, MMM dd", - "daily_title_text_date_year": "E, MMM dd, yyyy", - "date_format": "E, LLL d, y • h:mm a", + "daily_title_text_date": "E, dd MMM", + "daily_title_text_date_year": "E, dd MMM, yyyy", + "date_format": "E, d LLL, y • h:mm a", "delete_dialog_alert": "Esses arquivos serão permanentemente apagados do Immich e de seu dispositivo", "delete_dialog_alert_local": "Estes arquivos serão permanentemente excluídos do seu dispositivo, mas continuarão disponíveis no servidor Immich", "delete_dialog_alert_local_non_backed_up": "Não há backup de alguns dos arquivos no servidor e eles serão excluídos permanentemente do seu dispositivo", @@ -246,11 +246,11 @@ "experimental_settings_new_asset_list_title": "Ativar visualização de grade experimental", "experimental_settings_subtitle": "Use por sua conta e risco!", "experimental_settings_title": "Experimental", - "favorites": "Favorites", + "favorites": "Favoritos", "favorites_page_no_favorites": "Nenhum favorito encontrado", "favorites_page_title": "Favoritos", "filename_search": "Nome do arquivo ou extensão", - "filter": "Filter", + "filter": "Filtro", "haptic_feedback_switch": "Habilitar vibração", "haptic_feedback_title": "Vibração", "header_settings_add_header_tip": "Adicionar cabeçalho", @@ -274,8 +274,8 @@ "home_page_first_time_notice": "Se é a primeira vez que utiliza o aplicativo, certifique-se de marcar um ou mais álbuns do dispositivo para backup, assim a linha do tempo será preenchida com as fotos e vídeos.", "home_page_share_err_local": "Não é possível compartilhar arquivos locais com um link, ignorando", "home_page_upload_err_limit": "Só é possível enviar 30 arquivos por vez, ignorando", - "ignore_icloud_photos": "Ignore iCloud photos", - "ignore_icloud_photos_description": "Photos that are stored on iCloud will not be uploaded to the Immich server", + "ignore_icloud_photos": "ignorar fotos no iCloud", + "ignore_icloud_photos_description": "Fotos que estão armazenadas no iCloud não serão carregadas para o servidor do Immich", "image_saved_successfully": "Imagem salva", "image_viewer_page_state_provider_download_error": "Erro ao baixar", "image_viewer_page_state_provider_download_started": "Baixando arquivo", @@ -283,7 +283,7 @@ "image_viewer_page_state_provider_share_error": "Erro ao compartilhar", "invalid_date": "Data inválida", "invalid_date_format": "Formato de data inválido", - "library": "Library", + "library": "Biblioteca", "library_page_albums": "Álbuns", "library_page_archive": "Arquivado", "library_page_device_albums": "Álbuns no dispositivo", @@ -364,7 +364,7 @@ "motion_photos_page_title": "Fotos com movimento", "multiselect_grid_edit_date_time_err_read_only": "Não é possível editar a data de arquivo só leitura, ignorando", "multiselect_grid_edit_gps_err_read_only": "Não é possível editar a localização de arquivo só leitura, ignorando", - "my_albums": "My albums", + "my_albums": "Meus álbuns", "no_assets_to_show": "Não há arquivos para exibir", "no_name": "Sem nome", "notification_permission_dialog_cancel": "Cancelar", @@ -373,7 +373,7 @@ "notification_permission_list_tile_content": "Dar permissões para ativar notificações", "notification_permission_list_tile_enable_button": "Ativar notificações", "notification_permission_list_tile_title": "Permissão de notificações", - "on_this_device": "On this device", + "on_this_device": "Neste dispositivo", "partner_list_user_photos": "Fotos de {user}", "partner_list_view_all": "Ver tudo", "partner_page_add_partner": "Adicionar parceiro", @@ -385,8 +385,8 @@ "partner_page_stop_sharing_content": "{} não poderá mais acessar as suas fotos.", "partner_page_stop_sharing_title": "Parar de compartilhar as suas fotos?", "partner_page_title": "Parceiro", - "partners": "Partners", - "people": "People", + "partners": "Parceiros", + "people": "Pessoas", "permission_onboarding_back": "Voltar", "permission_onboarding_continue_anyway": "Continuar mesmo assim", "permission_onboarding_get_started": "Começar", @@ -397,7 +397,7 @@ "permission_onboarding_permission_granted": "Permissão concedida! Está tudo pronto.", "permission_onboarding_permission_limited": "Permissão limitada. Para permitir que o Immich faça backups e gerencie sua galeria, conceda permissões para fotos e vídeos nas configurações.", "permission_onboarding_request": "O Immich requer autorização para ver as suas fotos e vídeos.", - "places": "Places", + "places": "Lugares", "preferences_settings_title": "Preferências", "profile_drawer_app_logs": "Logs", "profile_drawer_client_out_of_date_major": "O aplicativo está desatualizado. Por favor, atualize para a versão mais recente.", @@ -410,11 +410,11 @@ "profile_drawer_settings": "Configurações", "profile_drawer_sign_out": "Sair", "profile_drawer_trash": "Lixeira", - "recently_added": "Recently added", + "recently_added": "Adicionados Recentemente", "recently_added_page_title": "Adicionado recentemente", "save_to_gallery": "Salvar na galeria", "scaffold_body_error_occurred": "Ocorreu um erro", - "search_albums": "Search albums", + "search_albums": "Pesquisar Álbuns", "search_bar_hint": "Pesquisar em suas fotos", "search_filter_apply": "Aplicar filtro", "search_filter_camera": "Câmera", @@ -560,9 +560,9 @@ "shared_link_info_chip_upload": "Enviar", "shared_link_manage_links": "Gerenciar links compartilhados", "shared_link_public_album": "Álbum público", - "shared_links": "Shared links", + "shared_links": "Links compartilhados", "share_done": "Feito", - "shared_with_me": "Shared with me", + "shared_with_me": "Compartilhado comigo", "share_invite": "Convidar para o álbum", "sharing_page_album": "Álbuns compartilhados", "sharing_page_description": "Crie álbuns compartilhados para compartilhar fotos e vídeos com pessoas da sua rede.", @@ -594,7 +594,7 @@ "theme_setting_three_stage_loading_subtitle": "O carregamento em três estágios pode aumentar o desempenho do carregamento, mas causa uma carga de rede significativamente maior", "theme_setting_three_stage_loading_title": "Habilitar carregamento em três estágios", "translated_text_options": "Opções", - "trash": "Trash", + "trash": "Lixo", "trash_emptied": "Lixeira esvaziada", "trash_page_delete": "Excluir", "trash_page_delete_all": "Excluir tudo", @@ -618,7 +618,7 @@ "version_announcement_overlay_text_2": "por favor, Verifique com calma as ", "version_announcement_overlay_text_3": "e certifique-se de que a configuração do docker-compose e do arquivo .env estejam atualizadas para evitar configurações incorretas, especialmente se utiliza o WatchTower ou qualquer outro mecanismo que faça atualização automática do servidor.", "version_announcement_overlay_title": "Nova versão do servidor disponível \uD83C\uDF89", - "videos": "Videos", + "videos": "Vídeos", "viewer_remove_from_stack": "Remover da pilha", "viewer_stack_use_as_main_asset": "Usar como foto principal", "viewer_unstack": "Desempilhar" diff --git a/mobile/assets/i18n/ru-RU.json b/mobile/assets/i18n/ru-RU.json index 80e0611d3f7e0..ae7fc46f5d107 100644 --- a/mobile/assets/i18n/ru-RU.json +++ b/mobile/assets/i18n/ru-RU.json @@ -6,45 +6,45 @@ "action_common_save": "Сохранить", "action_common_select": "Выбрать", "action_common_update": "Обновить", - "add_a_name": "Add a name", + "add_a_name": "Добавить имя", "add_to_album_bottom_sheet_added": "Добавлено в {album}", "add_to_album_bottom_sheet_already_exists": "Уже в {album}", - "advanced_settings_log_level_title": "Log level: {}", - "advanced_settings_prefer_remote_subtitle": "Некоторые устройства очень медленно загружают предпросмотр объектов, находящихся на устройстве. Активируйте эту настройку, чтобы вместо них загружались изображения с сервера.", + "advanced_settings_log_level_title": "Уровень логирования:", + "advanced_settings_prefer_remote_subtitle": "Некоторые устройства очень медленно загружают локальные изображения. Активируйте эту настройку, чтобы изображения всегда загружались с сервера.", "advanced_settings_prefer_remote_title": "Предпочитать фото на сервере", "advanced_settings_proxy_headers_subtitle": "Определите заголовки прокси-сервера, которые Immich должен отправлять с каждым сетевым запросом.", - "advanced_settings_proxy_headers_title": "Прокси-заголовки", - "advanced_settings_self_signed_ssl_subtitle": "Пропускает проверку SSL-сертификата сервера. Требуется для самоподписанных сертификатов.", + "advanced_settings_proxy_headers_title": "Заголовки прокси", + "advanced_settings_self_signed_ssl_subtitle": "Пропускать проверку SSL-сертификата сервера. Требуется для самоподписанных сертификатов.", "advanced_settings_self_signed_ssl_title": "Разрешить самоподписанные SSL-сертификаты", - "advanced_settings_tile_subtitle": "Расширенные настройки пользователя", + "advanced_settings_tile_subtitle": "Расширенные настройки", "advanced_settings_tile_title": "Расширенные", "advanced_settings_troubleshooting_subtitle": "Включить расширенные возможности для решения проблем", "advanced_settings_troubleshooting_title": "Решение проблем", "album_info_card_backup_album_excluded": "ИСКЛЮЧЕН", "album_info_card_backup_album_included": "ВКЛЮЧЕН", - "albums": "Albums", + "albums": "Альбомы", "album_thumbnail_card_item": "1 объект", "album_thumbnail_card_items": "{} объектов", "album_thumbnail_card_shared": "· Общий", "album_thumbnail_owned": "Автор", "album_thumbnail_shared_by": "Поделился {}", - "album_viewer_appbar_delete_confirm": "Вы уверены, что хотите удалить этот альбом из своей учетной записи?", + "album_viewer_appbar_delete_confirm": "Вы уверены, что хотите удалить альбом из своей учетной записи?", "album_viewer_appbar_share_delete": "Удалить альбом", - "album_viewer_appbar_share_err_delete": "Невозможно удалить альбом", - "album_viewer_appbar_share_err_leave": "Невозможно покинуть альбом", + "album_viewer_appbar_share_err_delete": "Не удалось удалить альбом", + "album_viewer_appbar_share_err_leave": "Не удалось покинуть альбом", "album_viewer_appbar_share_err_remove": "Возникли проблемы с удалением объектов из альбома", - "album_viewer_appbar_share_err_title": "Ошибка переименования альбома", + "album_viewer_appbar_share_err_title": "Не удалось переименовать альбом", "album_viewer_appbar_share_leave": "Покинуть альбом", "album_viewer_appbar_share_remove": "Удалить из альбома", "album_viewer_appbar_share_to": "Поделиться", "album_viewer_page_share_add_users": "Добавить пользователей", - "all": "All", + "all": "Все", "all_people_page_title": "Люди", "all_videos_page_title": "Видео", - "app_bar_signout_dialog_content": "Вы уверены, что хотите выйти из системы?", + "app_bar_signout_dialog_content": "Вы уверены, что хотите выйти?", "app_bar_signout_dialog_ok": "Да", - "app_bar_signout_dialog_title": "Выйти из системы", - "archived": "Archived", + "app_bar_signout_dialog_title": "Выйти", + "archived": "Архив", "archive_page_no_archived_assets": "В архиве сейчас пусто", "archive_page_title": "Архив ({})", "asset_action_delete_err_read_only": "Невозможно удалить объект(ы) только для чтения, пропуск...", @@ -52,11 +52,11 @@ "asset_list_group_by_sub_title": "Группировать по", "asset_list_layout_settings_dynamic_layout_title": "Динамическое расположение", "asset_list_layout_settings_group_automatically": "Автоматически", - "asset_list_layout_settings_group_by": "Группировать объекты по:", + "asset_list_layout_settings_group_by": "Группировать объекты по", "asset_list_layout_settings_group_by_month": "Месяцу", "asset_list_layout_settings_group_by_month_day": "Месяцу и дню", "asset_list_layout_sub_title": "Разметка", - "asset_list_settings_subtitle": "Настройка макета сетки фотографий", + "asset_list_settings_subtitle": "Настройка сетки фотографий", "asset_list_settings_title": "Сетка фотографий", "asset_restored_successfully": "Объект успешно восстановлен", "assets_deleted_permanently": "{} объект(ы) удален(ы) навсегда", @@ -65,11 +65,11 @@ "assets_restored_successfully": "{} объект(ы) успешно восстановлен(ы)", "assets_trashed": "{} объект(ы) помещен(ы) в корзину", "assets_trashed_from_server": "{} объект(ы) помещен(ы) в корзину на сервере Immich", - "asset_viewer_settings_title": "Просмотрщик изображений", - "backup_album_selection_page_albums_device": "Альбомов на устройстве ({})", + "asset_viewer_settings_title": "Просмотр изображений", + "backup_album_selection_page_albums_device": "Альбомы на устройстве ({})", "backup_album_selection_page_albums_tap": "Нажмите, чтобы включить,\nнажмите дважды, чтобы исключить", - "backup_album_selection_page_assets_scatter": "Объекты могут быть разбросаны по нескольким альбомам. Таким образом, альбомы могут быть включены или исключены из процесса резервного копирования.", - "backup_album_selection_page_select_albums": "Выбрать альбомы", + "backup_album_selection_page_assets_scatter": "Ваши изображения и видео могут находиться в разных альбомах. Вы можете выбрать, какие альбомы включить, а какие исключить из резервного копирования.", + "backup_album_selection_page_select_albums": "Выбор альбомов", "backup_album_selection_page_selection_info": "Информация о выборе", "backup_album_selection_page_total_assets": "Всего уникальных объектов", "backup_all": "Все", @@ -81,11 +81,11 @@ "backup_background_service_in_progress_notification": "Резервное копирование ваших объектов…", "backup_background_service_upload_failure_notification": "Ошибка загрузки {}", "backup_controller_page_albums": "Резервное копирование альбомов", - "backup_controller_page_background_app_refresh_disabled_content": "Включите фоновое обновление приложений в меню Настройки > Общие > Фоновое обновление приложений, чтобы использовать фоновое резервное копирование.", + "backup_controller_page_background_app_refresh_disabled_content": "Включите фоновое обновление приложения в Настройки > Общие > Фоновое обновление приложений, чтобы использовать фоновое резервное копирование.", "backup_controller_page_background_app_refresh_disabled_title": "Фоновое обновление отключено", "backup_controller_page_background_app_refresh_enable_button_text": "Перейти в настройки", - "backup_controller_page_background_battery_info_link": "Показать как", - "backup_controller_page_background_battery_info_message": "Для наилучшего фонового резервного копирования отключите любые настройки оптимизации батареи, ограничивающие фоновую активность для Immich.\n\nПоскольку это зависит от устройства, найдите необходимую информацию для производителя вашего устройства.", + "backup_controller_page_background_battery_info_link": "Подробнее", + "backup_controller_page_background_battery_info_message": "Для стабильного резервного копирования в фоновом режиме, отключите любые настройки оптимизации батареи, ограничивающие фоновую активность приложения.\n\nПоскольку настройки зависят от устройства, найдите необходимую информацию для производителя вашего устройства.", "backup_controller_page_background_battery_info_ok": "ОК", "backup_controller_page_background_battery_info_title": "Оптимизация батареи", "backup_controller_page_background_charging": "Только во время зарядки", @@ -102,7 +102,7 @@ "backup_controller_page_backup_sub": "Загруженные фото и видео", "backup_controller_page_cancel": "Отмена", "backup_controller_page_created": "Создано: {}", - "backup_controller_page_desc_backup": "Включите резервное копирование в активном режиме, чтобы автоматически загружать новые объекты на сервер при открытии приложения.", + "backup_controller_page_desc_backup": "Включите резервное копирование в активном режиме, чтобы автоматически загружать новые объекты при открытии приложения.", "backup_controller_page_excluded": "Исключены:", "backup_controller_page_failed": "Неудачных ({})", "backup_controller_page_filename": "Имя файла: {} [{}]", @@ -110,7 +110,7 @@ "backup_controller_page_info": "Информация о резервном копировании", "backup_controller_page_none_selected": "Ничего не выбрано", "backup_controller_page_remainder": "Осталось", - "backup_controller_page_remainder_sub": "Оставшиеся фото и видео для резервного копирования из выбранного", + "backup_controller_page_remainder_sub": "Фото и видео для загрузки", "backup_controller_page_select": "Выбор", "backup_controller_page_server_storage": "Хранилище на сервере", "backup_controller_page_start_backup": "Начать резервное копирование", @@ -120,20 +120,20 @@ "backup_controller_page_to_backup": "Альбомы для резервного копирования", "backup_controller_page_total": "Всего", "backup_controller_page_total_sub": "Все уникальные фото и видео из выбранных альбомов", - "backup_controller_page_turn_off": "Выключить резервное копирование в активном режиме", - "backup_controller_page_turn_on": "Включить резервное копирование в активном режиме", + "backup_controller_page_turn_off": "Выключить", + "backup_controller_page_turn_on": "Включить", "backup_controller_page_uploading_file_info": "Информация о загружаемом файле", "backup_err_only_album": "Невозможно удалить единственный альбом", "backup_info_card_assets": "объектов", "backup_manual_cancelled": "Отменено", "backup_manual_failed": "Неудачно", - "backup_manual_in_progress": "Загрузка уже в процессе, попробуйте позже", + "backup_manual_in_progress": "Загрузка в процессе. Попробуйте позже", "backup_manual_success": "Успешно", "backup_manual_title": "Статус загрузки", "backup_options_page_title": "Резервное копирование", "cache_settings_album_thumbnails": "Миниатюры страниц библиотеки ({} объектов)", "cache_settings_clear_cache_button": "Очистить кэш", - "cache_settings_clear_cache_button_title": "Очищает кэш приложения. Это значительно повлияет на производительность приложения, до тех пор, пока кэш не будет перестроен заново.", + "cache_settings_clear_cache_button_title": "Очищает кэш приложения. Это негативно повлияет на производительность, пока кэш не будет создан заново.", "cache_settings_duplicated_assets_clear_button": "ОЧИСТИТЬ", "cache_settings_duplicated_assets_subtitle": "Фото и видео, занесенные приложением в черный список", "cache_settings_duplicated_assets_title": "Дублирующиеся объекты ({})", @@ -144,13 +144,13 @@ "cache_settings_statistics_shared": "Миниатюры общих альбомов", "cache_settings_statistics_thumbnail": "Миниатюры", "cache_settings_statistics_title": "Размер кэша", - "cache_settings_subtitle": "Управление кэшированием мобильного приложения Immich", - "cache_settings_thumbnail_size": "Размер кэша эскизов ({} объектов)", - "cache_settings_tile_subtitle": "Управление поведением локального хранилища", + "cache_settings_subtitle": "Управление кэшированием мобильного приложения", + "cache_settings_thumbnail_size": "Размер кэша миниатюр ({} объектов)", + "cache_settings_tile_subtitle": "Управление локальным хранилищем", "cache_settings_tile_title": "Локальное хранилище", "cache_settings_title": "Настройки кэширования", "change_password_form_confirm_password": "Подтвердите пароль", - "change_password_form_description": "Привет {name},\n\nЭто либо ваш первый вход в систему, либо был сделан запрос на смену пароля. Пожалуйста, введите новый пароль ниже.", + "change_password_form_description": "Привет, {name}!\n\nЛибо ваш первый вход в систему, либо вы запросили смену пароля. Пожалуйста, введите новый пароль ниже.", "change_password_form_new_password": "Новый пароль", "change_password_form_password_mismatch": "Пароли не совпадают", "change_password_form_reenter_new_password": "Повторно введите новый пароль", @@ -161,7 +161,7 @@ "client_cert_invalid_msg": "Неверный файл сертификата или неверный пароль", "client_cert_remove": "Удалить", "client_cert_remove_msg": "Клиентский сертификат удален", - "client_cert_subtitle": "Поддерживается только формат PKCS12 (.p12, .pfx). Импорт/удаление сертификата доступно только перед входом в систему.", + "client_cert_subtitle": "Поддерживается только формат PKCS12 (.p12, .pfx). Импорт/удаление сертификата доступно только перед входом в систему", "client_cert_title": "Клиентский SSL-сертификат ", "common_add_to_album": "Добавить в альбом", "common_change_password": "Изменить пароль", @@ -170,39 +170,39 @@ "common_shared": "Общие", "contextual_search": "Восход солнца на пляже", "control_bottom_app_bar_add_to_album": "Добавить в альбом", - "control_bottom_app_bar_album_info": "{} файлов", - "control_bottom_app_bar_album_info_shared": "{} файлов · Общий", + "control_bottom_app_bar_album_info": "{} медиа", + "control_bottom_app_bar_album_info_shared": "{} медиа · Общий", "control_bottom_app_bar_archive": "Архив", - "control_bottom_app_bar_create_new_album": "Создать новый альбом", + "control_bottom_app_bar_create_new_album": "Создать альбом", "control_bottom_app_bar_delete": "Удалить", "control_bottom_app_bar_delete_from_immich": "Удалить из Immich\n", "control_bottom_app_bar_delete_from_local": "Удалить с устройства", "control_bottom_app_bar_download": "Скачать", - "control_bottom_app_bar_edit": "Редактировать", - "control_bottom_app_bar_edit_location": "Редактировать местоположение", - "control_bottom_app_bar_edit_time": "Редактировать дату и время", + "control_bottom_app_bar_edit": "Изменить", + "control_bottom_app_bar_edit_location": "Изменить место", + "control_bottom_app_bar_edit_time": "Изменить дату", "control_bottom_app_bar_favorite": "В избранное", "control_bottom_app_bar_share": "Поделиться", "control_bottom_app_bar_share_to": "Поделиться", "control_bottom_app_bar_stack": "Стек", - "control_bottom_app_bar_trash_from_immich": "Переместить в корзину", + "control_bottom_app_bar_trash_from_immich": "В корзину", "control_bottom_app_bar_unarchive": "Восстановить", "control_bottom_app_bar_unfavorite": "Удалить из избранного", "control_bottom_app_bar_upload": "Загрузить", - "create_album": "Create album", + "create_album": "Создать альбом", "create_album_page_untitled": "Без названия", - "create_new": "CREATE NEW", + "create_new": "СОЗДАТЬ НОВЫЙ", "create_shared_album_page_create": "Создать", "create_shared_album_page_share": "Поделиться", "create_shared_album_page_share_add_assets": "ДОБАВИТЬ ОБЪЕКТЫ", - "create_shared_album_page_share_select_photos": "Выберите фотографии", - "crop": "Кадрировать", + "create_shared_album_page_share_select_photos": "Выбрать фотографии", + "crop": "Обрезать", "curated_location_page_title": "Места", "curated_object_page_title": "Предметы", "daily_title_text_date": "E, MMM dd", "daily_title_text_date_year": "E, MMM dd, yyyy", "date_format": "E, LLL d, y • h:mm a", - "delete_dialog_alert": "Эти элементы будут безвозвратно удалены с сервера Immich, а также с вашего устройства", + "delete_dialog_alert": "Эти элементы будут безвозвратно удалены с сервера, а также с вашего устройства", "delete_dialog_alert_local": "Эти объекты будут безвозвратно удалены с Вашего устройства, но по-прежнему будут доступны на сервере Immich", "delete_dialog_alert_local_non_backed_up": "Резервные копии некоторых объектов не были загружены в Immich и будут безвозвратно удалены с Вашего устройства", "delete_dialog_alert_remote": "Эти объекты будут безвозвратно удалены с сервера Immich", @@ -212,8 +212,8 @@ "delete_dialog_title": "Удалить навсегда", "delete_local_dialog_ok_backed_up_only": "Удалить только резервные копии", "delete_local_dialog_ok_force": "Все равно удалить", - "delete_shared_link_dialog_content": "Вы уверены, что хотите удалить эту общую ссылку?", - "delete_shared_link_dialog_title": "Удалить общую ссылку", + "delete_shared_link_dialog_content": "Вы уверены, что хотите удалить публичную ссылку?", + "delete_shared_link_dialog_title": "Удалить публичную ссылку", "description_input_hint_text": "Добавить описание...", "description_input_submit_error": "Не удалось обновить описание, проверьте логи, чтобы узнать причину", "download_canceled": "Загрузка отменена", @@ -225,7 +225,7 @@ "download_finished": "Загрузка окончена", "downloading": "Загрузка...", "downloading_media": "Загрузка медиа", - "download_notfound": "Загрузка не обнаружена", + "download_notfound": "Загрузка не найдена", "download_paused": "Загрузка приостановлена", "download_started": "Загрузка началась", "download_sucess": "Успешная загрузка", @@ -238,15 +238,15 @@ "error_saving_image": "Ошибка: {}", "exif_bottom_sheet_description": "Добавить описание...", "exif_bottom_sheet_details": "ПОДРОБНОСТИ", - "exif_bottom_sheet_location": "Местоположение", - "exif_bottom_sheet_location_add": "Добавить местоположение", + "exif_bottom_sheet_location": "МЕСТО", + "exif_bottom_sheet_location_add": "Добавить место", "exif_bottom_sheet_people": "ЛЮДИ", "exif_bottom_sheet_person_add_person": "Добавить имя", - "experimental_settings_new_asset_list_subtitle": "Ведутся работы", + "experimental_settings_new_asset_list_subtitle": "В разработке", "experimental_settings_new_asset_list_title": "Включить экспериментальную сетку фотографий", "experimental_settings_subtitle": "Используйте на свой страх и риск!", "experimental_settings_title": "Экспериментальные функции", - "favorites": "Favorites", + "favorites": "Избранное", "favorites_page_no_favorites": "В избранном сейчас пусто", "favorites_page_title": "Избранное", "filename_search": "Имя или расширение файла", @@ -258,24 +258,24 @@ "header_settings_header_name_input": "Имя заголовка", "header_settings_header_value_input": "Значение заголовка", "header_settings_page_title": "Прокси-заголовки", - "headers_settings_tile_subtitle": "Определите заголовки прокси, которые приложение должно отправлять с каждым сетевым запросом.", + "headers_settings_tile_subtitle": "Определите заголовки прокси, которые приложение должно отправлять с каждым сетевым запросом", "headers_settings_tile_title": "Пользовательские заголовки прокси", - "home_page_add_to_album_conflicts": "Добавлено {added} объектов в альбом {album}. Объекты {failed} уже есть в альбоме.", - "home_page_add_to_album_err_local": "Пока нельзя добавлять локальные объекты в альбомы, пропускаем", - "home_page_add_to_album_success": "Добавлено {added} объектов в альбом {album}.", - "home_page_album_err_partner": "Пока не удается добавить объекты партнера в альбом, пропуск...", - "home_page_archive_err_local": "Пока невозможно добавить локальные объекты в архив, пропускаем", - "home_page_archive_err_partner": "Невозможно архивировать объекты партнера, пропуск...", + "home_page_add_to_album_conflicts": "Добавлено {added} медиа в альбом {album}. {failed} медиа уже в альбоме.", + "home_page_add_to_album_err_local": "Пока нельзя добавлять локальные объекты в альбомы, пропуск", + "home_page_add_to_album_success": "Добавлено {added} медиа в альбом {album}.", + "home_page_album_err_partner": "Пока нельзя добавить медиа партнера в альбом, пропуск", + "home_page_archive_err_local": "Пока нельзя добавить локальные файлы в архив, пропуск", + "home_page_archive_err_partner": "Невозможно архивировать медиа партнера, пропуск", "home_page_building_timeline": "Построение хронологии", - "home_page_delete_err_partner": "Невозможно удалить объекты партнера, пропуск...", - "home_page_delete_remote_err_local": "Локальные объект(ы) уже в процессе удаления с сервера, пропуск...", - "home_page_favorite_err_local": "Пока не удается добавить в избранное локальные объекты, пропуск...", - "home_page_favorite_err_partner": "Пока не удается добавить в избранное объекты партнера, пропуск...", - "home_page_first_time_notice": "Если вы используете приложение впервые, убедитесь, что вы выбрали резервный(е) альбом(ы), чтобы временная шкала могла заполнить фотографии и видео в альбоме(ах).", - "home_page_share_err_local": "Невозможно поделиться локальными данными по ссылке, пропуск...", - "home_page_upload_err_limit": "Вы можете выгрузить максимум 30 файлов за раз", - "ignore_icloud_photos": "Ignore iCloud photos", - "ignore_icloud_photos_description": "Photos that are stored on iCloud will not be uploaded to the Immich server", + "home_page_delete_err_partner": "Невозможно удалить медиа партнера, пропуск", + "home_page_delete_remote_err_local": "Невозможно удалить локальные файлы с сервера, пропуск", + "home_page_favorite_err_local": "Пока нельзя добавить в избранное локальные файлы, пропуск", + "home_page_favorite_err_partner": "Пока нельзя добавить в избранное медиа партнера, пропуск", + "home_page_first_time_notice": "Если вы используете приложение впервые, выберите альбомы для резервного копирования или загрузите их вручную, чтобы заполнить ими временную шкалу.", + "home_page_share_err_local": "Нельзя поделиться локальными файлами по ссылке, пропуск", + "home_page_upload_err_limit": "Вы можете загрузить максимум 30 файлов за раз, пропуск", + "ignore_icloud_photos": "Пропускать файлы из iCloud", + "ignore_icloud_photos_description": "Не загружать файлы в Immich, если они хранятся в iCloud", "image_saved_successfully": "Изображение сохранено", "image_viewer_page_state_provider_download_error": "Ошибка загрузки", "image_viewer_page_state_provider_download_started": "Загрузка началась", @@ -283,7 +283,7 @@ "image_viewer_page_state_provider_share_error": "Ошибка общего доступа", "invalid_date": "Неверная дата", "invalid_date_format": "Неверный формат даты", - "library": "Library", + "library": "Библиотека", "library_page_albums": "Альбомы", "library_page_archive": "Архив", "library_page_device_albums": "Альбомы на устройстве", @@ -293,39 +293,39 @@ "library_page_sort_asset_count": "Количество объектов", "library_page_sort_created": "Недавно созданные", "library_page_sort_last_modified": "Последнее изменение", - "library_page_sort_most_oldest_photo": "Самые старые фото", - "library_page_sort_most_recent_photo": "Самые последние фото", + "library_page_sort_most_oldest_photo": "Старые фото", + "library_page_sort_most_recent_photo": "Последние фото", "library_page_sort_title": "Название альбома", "location_picker_choose_on_map": "Выбрать на карте", "location_picker_latitude": "Широта", "location_picker_latitude_error": "Укажите правильную широту", - "location_picker_latitude_hint": "Укажите широту", + "location_picker_latitude_hint": "Введите широту", "location_picker_longitude": "Долгота", "location_picker_longitude_error": "Укажите правильную долготу", - "location_picker_longitude_hint": "Укажите долготу", + "location_picker_longitude_hint": "Введите долготу", "login_disabled": "Вход отключен", - "login_form_api_exception": "Ошибка при попытке взаимодействия с сервером. Проверьте URL-адрес до него и попробуйте еще раз.", + "login_form_api_exception": "Ошибка подключения к серверу. Проверьте URL-адрес и попробуйте еще раз.", "login_form_back_button_text": "Назад", "login_form_button_text": "Войти", "login_form_email_hint": "youremail@email.com", "login_form_endpoint_hint": "http://your-server-ip:port/api", "login_form_endpoint_url": "URL-aдрес сервера", - "login_form_err_http": "Пожалуйста, укажите http:// или https://", - "login_form_err_invalid_email": "Неверный адрес Email", - "login_form_err_invalid_url": "Неверная ссылка", + "login_form_err_http": "Пожалуйста, укажите протокол http:// или https://", + "login_form_err_invalid_email": "Некорректный адрес электронной почты", + "login_form_err_invalid_url": "Некорректный URL", "login_form_err_leading_whitespace": "Пробел до", "login_form_err_trailing_whitespace": "Пробел после", "login_form_failed_get_oauth_server_config": "Ошибка авторизации с использованием OAuth, проверьте URL-адрес сервера", - "login_form_failed_get_oauth_server_disable": "Функция OAuth недоступна на этом сервере.", - "login_form_failed_login": "Ошибка при входе в систему, проверьте URL-адрес сервера, адрес электронной почты и пароль", - "login_form_handshake_exception": "Произошло нарушение рукопожатия с сервером. Включите в настройках поддержку самоподписанных сертификатов, если вы используете самоподписанный сертификат.", + "login_form_failed_get_oauth_server_disable": "Авторизация через OAuth недоступна на этом сервере", + "login_form_failed_login": "Ошибка при входе, проверьте URL-адрес сервера, адрес электронной почты и пароль", + "login_form_handshake_exception": "Ошибка проверки сертификата. Если вы используете самоподписанный сертификат, включите поддержку самоподписанных сертификатов в настройках.", "login_form_label_email": "Email", "login_form_label_password": "Пароль", "login_form_next_button": "Далее", "login_form_password_hint": "пароль", "login_form_save_login": "Оставаться в системе", - "login_form_server_empty": "Введите URL-адрес вашего сервера.", - "login_form_server_error": "Нет соединения с сервером.", + "login_form_server_empty": "Введите URL-адрес сервера.", + "login_form_server_error": "Не удалось установить соединение с сервером.", "login_password_changed_error": "Произошла ошибка при обновлении пароля", "login_password_changed_success": "Пароль успешно обновлен", "map_assets_in_bound": "{} фото", @@ -334,38 +334,38 @@ "map_location_dialog_cancel": "Отмена", "map_location_dialog_yes": "Да", "map_location_picker_page_use_location": "Это местоположение", - "map_location_service_disabled_content": "Для отображения объектов в данном месте необходимо включить службу определения местоположения. Хотите включить ее сейчас?", + "map_location_service_disabled_content": "Для отображения объектов в текущем месте необходимо включить службу определения местоположения. Включить?", "map_location_service_disabled_title": "Служба определения местоположения отключена", "map_no_assets_in_bounds": "Нет фотографий в этой области", - "map_no_location_permission_content": "Для отображения объектов из текущего местоположения необходимо разрешение на определение местоположения. Хотите ли вы разрешить его сейчас?", + "map_no_location_permission_content": "Для отображения объектов в текущем месте необходимо разрешение на определение местоположения. Предоставить разрешение?", "map_no_location_permission_title": "Доступ к местоположению отклонен", "map_settings_dark_mode": "Темный режим", "map_settings_date_range_option_all": "Все", - "map_settings_date_range_option_day": "Прошлые 24 часа", - "map_settings_date_range_option_days": "Прошлые {} дней", - "map_settings_date_range_option_year": "Прошлый год", - "map_settings_date_range_option_years": "Прошлые {} года", + "map_settings_date_range_option_day": "24 часа", + "map_settings_date_range_option_days": "{} дней", + "map_settings_date_range_option_year": "Год", + "map_settings_date_range_option_years": "{} года", "map_settings_dialog_cancel": "Отмена", "map_settings_dialog_save": "Сохранить", "map_settings_dialog_title": "Настройки карты", - "map_settings_include_show_archived": "Отображать архив", - "map_settings_include_show_partners": "Отображать снимки партнера", + "map_settings_include_show_archived": "Отображать архивированное", + "map_settings_include_show_partners": "Отображать медиа партнера", "map_settings_only_relative_range": "Период времени", "map_settings_only_show_favorites": "Показать только избранное", - "map_settings_theme_settings": "Тема карты", + "map_settings_theme_settings": "Цвет карты", "map_zoom_to_see_photos": "Уменьшение масштаба для просмотра фотографий", "memories_all_caught_up": "Это всё на сегодня", "memories_check_back_tomorrow": "Загляните завтра, чтобы увидеть больше воспоминаний", "memories_start_over": "Начать заново", "memories_swipe_to_close": "Смахните вверх, чтобы закрыть", "memories_year_ago": "Год назад", - "memories_years_ago": "{} лет назад", + "memories_years_ago": "Лет назад: {}", "monthly_title_text_date_format": "MMMM y", "motion_photos_page_title": "Динамические фото", - "multiselect_grid_edit_date_time_err_read_only": "Невозможно редактировать дату объектов только для чтения, пропуск...", - "multiselect_grid_edit_gps_err_read_only": "Невозможно редактировать местоположение объектов только для чтения, пропуск...", - "my_albums": "My albums", - "no_assets_to_show": "Объекты отсутствуют", + "multiselect_grid_edit_date_time_err_read_only": "Невозможно изменить дату файлов только для чтения, пропуск", + "multiselect_grid_edit_gps_err_read_only": "Невозможно изменить местоположение файлов только для чтения, пропуск", + "my_albums": "Мои альбомы", + "no_assets_to_show": "Медиа отсутствуют", "no_name": "Без имени", "notification_permission_dialog_cancel": "Отмена", "notification_permission_dialog_content": "Чтобы включить уведомления, перейдите в «Настройки» и выберите «Разрешить».", @@ -373,48 +373,48 @@ "notification_permission_list_tile_content": "Предоставьте разрешение на включение уведомлений", "notification_permission_list_tile_enable_button": "Включить уведомления", "notification_permission_list_tile_title": "Разрешение на уведомление", - "on_this_device": "On this device", + "on_this_device": "На этом устройстве", "partner_list_user_photos": "Фотографии {user}", "partner_list_view_all": "Посмотреть все", "partner_page_add_partner": "Добавить партнёра", - "partner_page_empty_message": "У вашего партнёра еще пока нет доступа к вашим фото", + "partner_page_empty_message": "У вашего партнёра еще нет доступа к вашим фото", "partner_page_no_more_users": "Выбраны все доступные пользователи", "partner_page_partner_add_failed": "Не удалось добавить партнёра", "partner_page_select_partner": "Выбрать партнёра", "partner_page_shared_to_title": "Поделиться с...", "partner_page_stop_sharing_content": "{} больше не сможет получить доступ к вашим фотографиям", - "partner_page_stop_sharing_title": "Закрыть доступ партнёра к вашим фото?", + "partner_page_stop_sharing_title": "Закрыть доступ к вашим фото?", "partner_page_title": "Партнёр", - "partners": "Partners", - "people": "People", + "partners": "Партнёры", + "people": "Люди", "permission_onboarding_back": "Назад", "permission_onboarding_continue_anyway": "Все равно продолжить", "permission_onboarding_get_started": "Давайте начнём", "permission_onboarding_go_to_settings": "Перейти в настройки", "permission_onboarding_grant_permission": "Предоставить разрешение", "permission_onboarding_log_out": "Выйти", - "permission_onboarding_permission_denied": "Не удалось получить доступ.", + "permission_onboarding_permission_denied": "Не удалось получить доступ. Чтобы использовать приложение, разрешите доступ к \"Фото и видео\" в настройках.", "permission_onboarding_permission_granted": "Доступ получен! Всё готово.", - "permission_onboarding_permission_limited": "Доступ к файлам ограничен. Чтобы Immich мог создавать резервные копии и управлять вашей галереей, пожалуйста, предоставьте приложению разрешение на доступ к \"Фото и видео\" в Настройках.", - "permission_onboarding_request": "Immich просит вас предоставить разрешение на доступ к вашим фото и видео", - "places": "Places", + "permission_onboarding_permission_limited": "Доступ к файлам ограничен. Чтобы Immich мог создавать резервные копии и управлять вашей галереей, пожалуйста, предоставьте приложению разрешение на доступ к \"Фото и видео\" в настройках.", + "permission_onboarding_request": "Приложению необходимо разрешение на доступ к вашим фото и видео", + "places": "Места", "preferences_settings_title": "Параметры", "profile_drawer_app_logs": "Журнал", - "profile_drawer_client_out_of_date_major": "Версия мобильного приложения устарела. Пожалуйста, обновитесь до последней основной версии.", - "profile_drawer_client_out_of_date_minor": "Версия мобильного приложения устарела. Пожалуйста, обновитесь до последней вспомогательной версии.", + "profile_drawer_client_out_of_date_major": "Версия мобильного приложения устарела. Пожалуйста, обновите его.", + "profile_drawer_client_out_of_date_minor": "Версия мобильного приложения устарела. Пожалуйста, обновите его.", "profile_drawer_client_server_up_to_date": "Клиент и сервер обновлены", "profile_drawer_documentation": "Документация", "profile_drawer_github": "GitHub", - "profile_drawer_server_out_of_date_major": "Серверная версия устарела. Пожалуйста, обновитесь до последней основной версии.", - "profile_drawer_server_out_of_date_minor": "Серверная версия устарела. Пожалуйста, обновитесь до последней вспомогательной версии.", + "profile_drawer_server_out_of_date_major": "Версия сервера устарела. Пожалуйста, обновите его.", + "profile_drawer_server_out_of_date_minor": "Версия сервера устарела. Пожалуйста, обновите его.", "profile_drawer_settings": "Настройки", "profile_drawer_sign_out": "Выйти", "profile_drawer_trash": "Корзина", - "recently_added": "Recently added", + "recently_added": "Недавно добавленные", "recently_added_page_title": "Недавно добавленные", "save_to_gallery": "Сохранить в галерею", "scaffold_body_error_occurred": "Возникла ошибка", - "search_albums": "Search albums", + "search_albums": "Поиск альбома", "search_bar_hint": "Поиск фотографий", "search_filter_apply": "Применить фильтр", "search_filter_camera": "Камера", @@ -422,22 +422,22 @@ "search_filter_camera_model": "Модель", "search_filter_camera_title": "Выберите тип камеры", "search_filter_date": "Дата", - "search_filter_date_interval": "{start} до {end}", - "search_filter_date_title": "Выберите диапазон дат", + "search_filter_date_interval": "{start} — {end}", + "search_filter_date_title": "Выберите промежуток", "search_filter_display_option_archive": "Архив", "search_filter_display_option_favorite": "Избранное", "search_filter_display_option_not_in_album": "Не в альбоме", "search_filter_display_options": "Настройки отображения", "search_filter_display_options_title": "Настройки отображения", - "search_filter_location": "Местоположение", + "search_filter_location": "Место", "search_filter_location_city": "Город", "search_filter_location_country": "Страна", "search_filter_location_state": "Регион", - "search_filter_location_title": "Выберите местонахождение", - "search_filter_media_type": "Тип носителя", + "search_filter_location_title": "Выберите место", + "search_filter_media_type": "Тип файла", "search_filter_media_type_all": "Все", "search_filter_media_type_image": "Изображения", - "search_filter_media_type_title": "Выберите тип носителя", + "search_filter_media_type_title": "Выберите тип медиа", "search_filter_media_type_video": "Видео", "search_filter_people": "Люди", "search_filter_people_title": "Выберите людей", @@ -451,7 +451,7 @@ "search_page_person_add_name_dialog_hint": "Имя", "search_page_person_add_name_dialog_save": "Сохранить", "search_page_person_add_name_dialog_title": "Добавить имя", - "search_page_person_add_name_subtitle": "Быстро найдите их по имени с помощью поиска", + "search_page_person_add_name_subtitle": "Быстро находите их по имени с помощью поиска", "search_page_person_add_name_title": "Добавить имя", "search_page_person_edit_name": "Редактировать имя", "search_page_places": "Места", @@ -473,20 +473,20 @@ "server_info_box_latest_release": "Последняя версия", "server_info_box_server_url": "URL сервера", "server_info_box_server_version": "Версия сервера", - "setting_image_viewer_help": "Полноэкранный просмотрщик сначала загружает изображение для предпросмотра в низком разрешении, затем загружает изображение в уменьшенном разрешении относительно оригинала (если включено) и в конце концов загружает оригинал (если включено).", + "setting_image_viewer_help": "При просмотре изображения сперва загружается миниатюра, затем \nуменьшенное изображение среднего качества (если включено), а затем оригинал (если включено).", "setting_image_viewer_original_subtitle": "Включите для загрузки исходного изображения в полном разрешении (большое!).\nОтключите, чтобы уменьшить объем данных (как сети, так и кэша устройства).", "setting_image_viewer_original_title": "Загружать исходное изображение", - "setting_image_viewer_preview_subtitle": "Включите для загрузки изображения среднего разрешения.\nОтключите, чтобы загружать оригинал напрямую или использовать только миниатюру.", - "setting_image_viewer_preview_title": "Загружать изображение для предварительного просмотра", + "setting_image_viewer_preview_subtitle": "Включите для загрузки изображения среднего разрешения.\nОтключите, чтобы загружать только оригинал или миниатюру.", + "setting_image_viewer_preview_title": "Загружать уменьшенное изображение", "setting_image_viewer_title": "Изображения", "setting_languages_apply": "Применить", "setting_languages_title": "Язык", "setting_notifications_notify_failures_grace_period": "Уведомлять об ошибках фонового резервного копирования: {}", - "setting_notifications_notify_hours": "{} часов", + "setting_notifications_notify_hours": "{} ч.", "setting_notifications_notify_immediately": "немедленно", - "setting_notifications_notify_minutes": "{} минут", + "setting_notifications_notify_minutes": "{} мин.", "setting_notifications_notify_never": "никогда", - "setting_notifications_notify_seconds": "{} секунд", + "setting_notifications_notify_seconds": "{} сек.", "setting_notifications_single_progress_subtitle": "Подробная информация о ходе загрузки для каждого объекта", "setting_notifications_single_progress_title": "Показать ход выполнения фонового резервного копирования", "setting_notifications_subtitle": "Настройка параметров уведомлений", @@ -503,10 +503,10 @@ "share_add_title": "Добавить название", "share_assets_selected": "{} выбрано", "share_create_album": "Создать альбом", - "shared_album_activities_input_disable": "Комментирование отключено", + "shared_album_activities_input_disable": "Комментарии отключены", "shared_album_activities_input_hint": "Скажите что-нибудь", - "shared_album_activity_remove_content": "Хотите ли Вы удалить это сообщение?", - "shared_album_activity_remove_title": "Удалить сообщение", + "shared_album_activity_remove_content": "Удалить сообщение?", + "shared_album_activity_remove_title": "Удалить", "shared_album_activity_setting_subtitle": "Разрешить другим отвечать", "shared_album_activity_setting_title": "Комментарии и лайки", "shared_album_section_people_action_error": "Ошибка при выходе/удалении из альбома", @@ -515,19 +515,19 @@ "shared_album_section_people_owner_label": "Владелец", "shared_album_section_people_title": "ЛЮДИ", "share_dialog_preparing": "Подготовка...", - "shared_link_app_bar_title": "Общие ссылки", + "shared_link_app_bar_title": "Публичные ссылки", "shared_link_clipboard_copied_massage": "Скопировано в буфер обмена", "shared_link_clipboard_text": "Ссылка: {}\nПароль: {}", - "shared_link_create_app_bar_title": "Создать ссылку общего доступа", - "shared_link_create_error": "Ошибка при создании общей ссылки", + "shared_link_create_app_bar_title": "Создать ссылку для общего доступа", + "shared_link_create_error": "Ошибка при создании публичной ссылки", "shared_link_create_info": "Разрешить всем, у кого есть ссылка, просматривать выбранные фото", "shared_link_create_submit_button": "Создать ссылку", - "shared_link_edit_allow_download": "Разрешить публичному пользователю скачивать файлы", - "shared_link_edit_allow_upload": "Разрешить публичному пользователю загружать файлы", + "shared_link_edit_allow_download": "Разрешить всем скачивать файлы", + "shared_link_edit_allow_upload": "Разрешить всем загружать файлы", "shared_link_edit_app_bar_title": "Редактировать ссылку", - "shared_link_edit_change_expiry": "Изменить срок действия доступа", + "shared_link_edit_change_expiry": "Изменить срок действия", "shared_link_edit_description": "Описание", - "shared_link_edit_description_hint": "Введите описание для общего доступа", + "shared_link_edit_description_hint": "Введите описание публичного доступа", "shared_link_edit_expire_after": "Истекает через", "shared_link_edit_expire_after_option_day": "1 день", "shared_link_edit_expire_after_option_days": "{} дней", @@ -539,10 +539,10 @@ "shared_link_edit_expire_after_option_never": "Никогда", "shared_link_edit_expire_after_option_year": "{} лет", "shared_link_edit_password": "Пароль", - "shared_link_edit_password_hint": "Введите пароль для общего доступа", + "shared_link_edit_password_hint": "Введите пароль для публичного доступа", "shared_link_edit_show_meta": "Показывать метаданные", "shared_link_edit_submit_button": "Обновить ссылку", - "shared_link_empty": "У вас нет общих ссылок", + "shared_link_empty": "У вас нет публичных ссылок", "shared_link_error_server_url_fetch": "Невозможно запросить URL с сервера", "shared_link_expired": "Срок действия истек", "shared_link_expires_day": "Истекает через {} день", @@ -551,24 +551,24 @@ "shared_link_expires_hours": "Истекает через {} часов", "shared_link_expires_minute": "Истекает через {} минуту", "shared_link_expires_minutes": "Истекает через {} минут", - "shared_link_expires_never": "Истекает ∞", + "shared_link_expires_never": "Вечная ссылка", "shared_link_expires_second": "Истекает через {} секунду", "shared_link_expires_seconds": "Истекает через {} секунд", "shared_link_individual_shared": "Индивидуальный общий доступ", "shared_link_info_chip_download": "Скачать", "shared_link_info_chip_metadata": "EXIF", "shared_link_info_chip_upload": "Загрузить", - "shared_link_manage_links": "Управление общими ссылками", + "shared_link_manage_links": "Управление публичными ссылками", "shared_link_public_album": "Публичный альбом", - "shared_links": "Shared links", + "shared_links": "Публичные ссылки", "share_done": "Готово", - "shared_with_me": "Shared with me", + "shared_with_me": "Доступные мне", "share_invite": "Пригласить в альбом", "sharing_page_album": "Общие альбомы", "sharing_page_description": "Создавайте общие альбомы, чтобы делиться фотографиями и видео с людьми в вашей сети.", "sharing_page_empty_list": "ПУСТОЙ СПИСОК", "sharing_silver_appbar_create_shared_album": "Создать общий альбом", - "sharing_silver_appbar_shared_links": "Общие ссылки", + "sharing_silver_appbar_shared_links": "Публичные ссылки", "sharing_silver_appbar_share_partner": "Поделиться с партнёром", "sync": "Синхронизировать", "sync_albums": "Синхронизировать альбомы", @@ -580,29 +580,29 @@ "tab_controller_nav_sharing": "Общие", "theme_setting_asset_list_storage_indicator_title": "Показать индикатор хранилища на плитках объектов", "theme_setting_asset_list_tiles_per_row_title": "Количество объектов в строке ({})", - "theme_setting_colorful_interface_subtitle": "Применить основной цвет на поверхность фона.", - "theme_setting_colorful_interface_title": "Красочный интерфейс", + "theme_setting_colorful_interface_subtitle": "Добавить оттенок к фону", + "theme_setting_colorful_interface_title": "Цвет фона", "theme_setting_dark_mode_switch": "Тёмная тема", - "theme_setting_image_viewer_quality_subtitle": "Настройка качества просмотра полноэкранных изображения", + "theme_setting_image_viewer_quality_subtitle": "Настройка качества просмотра изображения", "theme_setting_image_viewer_quality_title": "Качество просмотра изображений", - "theme_setting_primary_color_subtitle": "Выберите цвет для основных действий и акцентов.", + "theme_setting_primary_color_subtitle": "Основной цвет приложения.", "theme_setting_primary_color_title": "Основной цвет", "theme_setting_system_primary_color_title": "Использовать системный цвет", "theme_setting_system_theme_switch": "Автоматически (как в системе)", "theme_setting_theme_subtitle": "Настройка темы приложения", "theme_setting_theme_title": "Тема", - "theme_setting_three_stage_loading_subtitle": "Трехэтапная загрузка может повысить производительность загрузки, но вызывает значительно более высокую нагрузку на сеть", + "theme_setting_three_stage_loading_subtitle": "Трехэтапная загрузка может повысить производительность, но значительно нагружает сеть", "theme_setting_three_stage_loading_title": "Включить трехэтапную загрузку", "translated_text_options": "Опции", - "trash": "Trash", + "trash": "Корзина", "trash_emptied": "Корзина очищена", "trash_page_delete": "Удалить", "trash_page_delete_all": "Удалить все", "trash_page_empty_trash_btn": "Очистить корзину", - "trash_page_empty_trash_dialog_content": "Вы хотите очистить свою корзину? Эти объекты будут навсегда удалены из Immich.", + "trash_page_empty_trash_dialog_content": "Очистить корзину? Эти файлы будут навсегда удалены из Immich.", "trash_page_empty_trash_dialog_ok": "ОК", - "trash_page_info": "Удаленные элементы будут окончательно удалены через {} дней", - "trash_page_no_assets": "Удаленные объекты отсутствуют", + "trash_page_info": "Элементы в корзине будут окончательно удалены через {} дней", + "trash_page_no_assets": "Корзина пуста", "trash_page_restore": "Восстановить", "trash_page_restore_all": "Восстановить все", "trash_page_select_assets_btn": "Выбранные объекты", @@ -612,13 +612,13 @@ "upload_dialog_info": "Хотите создать резервную копию выбранных объектов на сервере?", "upload_dialog_ok": "Загрузить", "upload_dialog_title": "Загрузить объект", - "version_announcement_overlay_ack": "Подтверждение", + "version_announcement_overlay_ack": "Понятно", "version_announcement_overlay_release_notes": "примечания к выпуску", - "version_announcement_overlay_text_1": "Привет друг, вышел новый релиз", - "version_announcement_overlay_text_2": "пожалуйста, найдите время, чтобы посетить", - "version_announcement_overlay_text_3": " и убедитесь, что ваши настройки docker-compose и .env обновлены, чтобы предотвратить любые неправильные настройки, особенно если вы используете WatchTower или любой другой механизм, который обрабатывает обновление вашего серверного приложения автоматически.", + "version_announcement_overlay_text_1": "Привет, друг! Вышла новая версия", + "version_announcement_overlay_text_2": "пожалуйста, посетите", + "version_announcement_overlay_text_3": " и убедитесь, что ваши настройки docker-compose и .env обновлены, особенно если вы используете WatchTower или любой другой механизм, который автоматически обновляет сервер.", "version_announcement_overlay_title": "Доступна новая версия сервера \uD83C\uDF89", - "videos": "Videos", + "videos": "Видео", "viewer_remove_from_stack": "Удалить из стека", "viewer_stack_use_as_main_asset": "Использовать в качестве основного объекта", "viewer_unstack": "Разобрать стек" diff --git a/mobile/assets/i18n/sv-SE.json b/mobile/assets/i18n/sv-SE.json index 078f5780fc1af..76ec0e7e1d0eb 100644 --- a/mobile/assets/i18n/sv-SE.json +++ b/mobile/assets/i18n/sv-SE.json @@ -6,7 +6,7 @@ "action_common_save": "Spara", "action_common_select": "Välj", "action_common_update": "Uppdatera", - "add_a_name": "Add a name", + "add_a_name": "Lägg till namn", "add_to_album_bottom_sheet_added": "Tillagd till {album}", "add_to_album_bottom_sheet_already_exists": "Redan i {album}", "advanced_settings_log_level_title": "Loggnivå: {}", @@ -22,7 +22,7 @@ "advanced_settings_troubleshooting_title": "Felsökning", "album_info_card_backup_album_excluded": "EXKLUDERAD", "album_info_card_backup_album_included": "INKLUDERAD", - "albums": "Albums", + "albums": "Album", "album_thumbnail_card_item": "1 objekt", "album_thumbnail_card_items": "{} objekt", "album_thumbnail_card_shared": " · Delad", @@ -38,13 +38,13 @@ "album_viewer_appbar_share_remove": "Ta bort från album", "album_viewer_appbar_share_to": "Dela Till", "album_viewer_page_share_add_users": "Lägg till användare", - "all": "All", + "all": "Alla", "all_people_page_title": "Personer", "all_videos_page_title": "Videor", "app_bar_signout_dialog_content": "Är du säker på att du vill logga ut?", "app_bar_signout_dialog_ok": "Ja", "app_bar_signout_dialog_title": "Logga ut", - "archived": "Archived", + "archived": "Arkiverade", "archive_page_no_archived_assets": "Inga arkiverade objekt hittade", "archive_page_title": "Arkiv ({})", "asset_action_delete_err_read_only": "Kan inte ta bort skrivskyddade objekt, hoppar över", @@ -189,9 +189,9 @@ "control_bottom_app_bar_unarchive": "Avarkivera", "control_bottom_app_bar_unfavorite": "Avfavorisera", "control_bottom_app_bar_upload": "Ladda Upp", - "create_album": "Create album", + "create_album": "Skapa album", "create_album_page_untitled": "Namnlös", - "create_new": "CREATE NEW", + "create_new": "SKAPA NY", "create_shared_album_page_create": "Skapa", "create_shared_album_page_share": "Dela", "create_shared_album_page_share_add_assets": "LÄGG TILL OBJEKT", @@ -246,7 +246,7 @@ "experimental_settings_new_asset_list_title": "Aktivera experimentellt fotorutnät", "experimental_settings_subtitle": "Använd på egen risk!", "experimental_settings_title": "Experimentellt", - "favorites": "Favorites", + "favorites": "Favoriter", "favorites_page_no_favorites": "Inga favoritobjekt hittades", "favorites_page_title": "Favoriter", "filename_search": "Filnamn eller filändelse", @@ -274,8 +274,8 @@ "home_page_first_time_notice": "Om det här är första gången du använder appen, välj ett eller flera backup-album så att tidslinjen kan fyllas med foton och videor från albumen.", "home_page_share_err_local": "Kan inte dela lokalt objekt via länk, hoppar över", "home_page_upload_err_limit": "Kan bara ladda upp max 30 objekt åt gången, hoppar över", - "ignore_icloud_photos": "Ignore iCloud photos", - "ignore_icloud_photos_description": "Photos that are stored on iCloud will not be uploaded to the Immich server", + "ignore_icloud_photos": "Ignorera iCloud-foton", + "ignore_icloud_photos_description": "Foton lagrade i iCloud kommer inte laddas upp till Immich-servern", "image_saved_successfully": "Bild sparad", "image_viewer_page_state_provider_download_error": "Fel Vid Nedladdning", "image_viewer_page_state_provider_download_started": "Nedladdning Påbörjad", @@ -283,7 +283,7 @@ "image_viewer_page_state_provider_share_error": "Delningsfel", "invalid_date": "Felaktigt datum", "invalid_date_format": "Felaktigt datumformat", - "library": "Library", + "library": "Bibliotek", "library_page_albums": "Album", "library_page_archive": "Arkiv", "library_page_device_albums": "Album på Enheten", @@ -364,7 +364,7 @@ "motion_photos_page_title": "Rörelsefoton", "multiselect_grid_edit_date_time_err_read_only": "Kan inte ändra datum på skrivskyddade objekt, hoppar över", "multiselect_grid_edit_gps_err_read_only": "Kan inte ändra plats på skrivskyddade objekt, hoppar över", - "my_albums": "My albums", + "my_albums": "Mina album", "no_assets_to_show": "Inga objekt att visa", "no_name": "Inget namn", "notification_permission_dialog_cancel": "Avbryt", @@ -373,7 +373,7 @@ "notification_permission_list_tile_content": "Tillåt rättighet för att slå på notiser.", "notification_permission_list_tile_enable_button": "Aktivera Notiser", "notification_permission_list_tile_title": "Notisrättighet", - "on_this_device": "On this device", + "on_this_device": "På enheten", "partner_list_user_photos": "{user}s foton", "partner_list_view_all": "Visa alla", "partner_page_add_partner": "Lägg till partner", @@ -385,8 +385,8 @@ "partner_page_stop_sharing_content": "{} kommer inte längre att komma åt dina foton.", "partner_page_stop_sharing_title": "Sluta dela dina foton?", "partner_page_title": "Partner", - "partners": "Partners", - "people": "People", + "partners": "Partner", + "people": "Människor", "permission_onboarding_back": "Bakåt", "permission_onboarding_continue_anyway": "Fortsätt ändå", "permission_onboarding_get_started": "Kom igång", @@ -397,7 +397,7 @@ "permission_onboarding_permission_granted": "Rättigheten beviljad! Du är klar.", "permission_onboarding_permission_limited": "Rättighet begränsad. För att låta Immich säkerhetskopiera och hantera hela ditt galleri, tillåt foto- och video-rättigheter i Inställningar.", "permission_onboarding_request": "Immich kräver tillstånd för att se dina foton och videor.", - "places": "Places", + "places": "Platser", "preferences_settings_title": "Inställningar", "profile_drawer_app_logs": "Loggar", "profile_drawer_client_out_of_date_major": "Mobilappen är utdaterad. Uppdatera till senaste huvudversionen.", @@ -410,11 +410,11 @@ "profile_drawer_settings": "Inställningar", "profile_drawer_sign_out": "Logga ut", "profile_drawer_trash": "Papperskorg", - "recently_added": "Recently added", + "recently_added": "Nyligen tillagda", "recently_added_page_title": "Nyligen tillagda", "save_to_gallery": "Spara i galleri", "scaffold_body_error_occurred": "Fel uppstod", - "search_albums": "Search albums", + "search_albums": "Sök i album", "search_bar_hint": "Sök bland dina foton", "search_filter_apply": "Aktivera filter", "search_filter_camera": "Kamera", @@ -560,9 +560,9 @@ "shared_link_info_chip_upload": "Ladda upp", "shared_link_manage_links": "Hantera Delade länkar", "shared_link_public_album": "Publikt album", - "shared_links": "Shared links", + "shared_links": "Delade länkar", "share_done": "Klart", - "shared_with_me": "Shared with me", + "shared_with_me": "Delade med mig", "share_invite": "Bjuder in till album", "sharing_page_album": "Delade album", "sharing_page_description": "Skapa delade album för att dela foton och video med personer i ditt nätverk.", @@ -594,7 +594,7 @@ "theme_setting_three_stage_loading_subtitle": "Trestegsladdning kan öka prestandan, men kan också leda till signifikant högre nätverksbelastning", "theme_setting_three_stage_loading_title": "Aktivera trestegsladdning", "translated_text_options": "Val", - "trash": "Trash", + "trash": "Papperskorg", "trash_emptied": "Tömd papperskorg", "trash_page_delete": "Ta Bort", "trash_page_delete_all": "Ta Bort Alla", @@ -618,7 +618,7 @@ "version_announcement_overlay_text_2": ". Ta gärna din tid att besöka ", "version_announcement_overlay_text_3": " för att se till att din docker-compose och .env-fil är uppdaterad för att undvika felkonfiguration, speciellt om du använder WatchTower eller liknande mekanism som automatiskt uppdaterar din container", "version_announcement_overlay_title": "Ny server-version finns tillgänglig \uD83C\uDF89", - "videos": "Videos", + "videos": "Videor", "viewer_remove_from_stack": "Ta bort från Stapeln", "viewer_stack_use_as_main_asset": "Använd som Huvudobjekt", "viewer_unstack": "Stapla Av" diff --git a/mobile/assets/i18n/uk-UA.json b/mobile/assets/i18n/uk-UA.json index 8bdd9aeaf2339..8f9b6370ec698 100644 --- a/mobile/assets/i18n/uk-UA.json +++ b/mobile/assets/i18n/uk-UA.json @@ -6,7 +6,7 @@ "action_common_save": "Зберегти", "action_common_select": "Вибрати", "action_common_update": "Оновити", - "add_a_name": "Add a name", + "add_a_name": "Додати ім'я", "add_to_album_bottom_sheet_added": "Додати до {album}", "add_to_album_bottom_sheet_already_exists": "Вже є в {album}", "advanced_settings_log_level_title": "Log level: {}", @@ -22,7 +22,7 @@ "advanced_settings_troubleshooting_title": "Усунення несправностей", "album_info_card_backup_album_excluded": "ВИЛУЧЕНИЙ", "album_info_card_backup_album_included": "ВКЛЮЧЕНИЙ", - "albums": "Albums", + "albums": "Альбоми", "album_thumbnail_card_item": "1 елемент", "album_thumbnail_card_items": "{} елементів", "album_thumbnail_card_shared": " · Спільний", @@ -38,13 +38,13 @@ "album_viewer_appbar_share_remove": "Видалити з альбому", "album_viewer_appbar_share_to": "Поділитися", "album_viewer_page_share_add_users": "Додати користувачів", - "all": "All", + "all": "Усі", "all_people_page_title": "Люди", "all_videos_page_title": "Відео", "app_bar_signout_dialog_content": "Ви впевнені, що бажаєте вийти з аккаунта?", "app_bar_signout_dialog_ok": "Так", "app_bar_signout_dialog_title": "Вийти з аккаунта", - "archived": "Archived", + "archived": "Архів", "archive_page_no_archived_assets": "Немає архівних елементів", "archive_page_title": "Архів ({})", "asset_action_delete_err_read_only": "Неможливо видалити елемент(и) лише для читання, пропущено", @@ -189,9 +189,9 @@ "control_bottom_app_bar_unarchive": "Розархівувати", "control_bottom_app_bar_unfavorite": "Видалити з улюблених", "control_bottom_app_bar_upload": "Завантажити", - "create_album": "Create album", + "create_album": "Створити альбом", "create_album_page_untitled": "Без назви", - "create_new": "CREATE NEW", + "create_new": "СТВОРИТИ НОВИЙ", "create_shared_album_page_create": "Створити", "create_shared_album_page_share": "Поділитися", "create_shared_album_page_share_add_assets": "ДОДАТИ ЕЛЕМЕНТИ", @@ -216,8 +216,8 @@ "delete_shared_link_dialog_title": "Видалити спільне посилання", "description_input_hint_text": "Додати опис...", "description_input_submit_error": "Помилка оновлення опису, перевірте логи для подробиць", - "download_canceled": "\nЗавантаження скасовано", - "download_complete": "\nЗавантаження закінчено", + "download_canceled": "Завантаження скасовано", + "download_complete": "Завантаження закінчено", "download_enqueue": "Завантаження поставлено в чергу", "download_error": "Помилка завантаження", "download_failed": "Завантаження не вдалося", @@ -226,7 +226,7 @@ "downloading": "Завантаження...", "downloading_media": "Завантаження медіа", "download_notfound": "Завантаження не виявлено", - "download_paused": "\nЗавантаження призупинено", + "download_paused": "Завантаження призупинено", "download_started": "Завантаження розпочато", "download_sucess": "Успішне завантаження", "download_sucess_android": "Медіафайли завантажено в DCIM/Immich", @@ -246,7 +246,7 @@ "experimental_settings_new_asset_list_title": "Експериментальний макет знімків", "experimental_settings_subtitle": "На власний ризик!", "experimental_settings_title": "Експериментальні", - "favorites": "Favorites", + "favorites": "Вибране", "favorites_page_no_favorites": "Немає улюблених елементів", "favorites_page_title": "Улюблені", "filename_search": "Ім'я або розширення файлу", @@ -274,8 +274,8 @@ "home_page_first_time_notice": "Якщо ви вперше користуєтеся програмою, переконайтеся, що ви вибрали альбоми для резервування, щоб могти заповнювати хронологію знімків та відео в альбомах.", "home_page_share_err_local": "Неможливо поділитися локальними елементами через посилання, пропущено", "home_page_upload_err_limit": "Можна вантажити не більше 30 елементів водночас, пропущено", - "ignore_icloud_photos": "Ignore iCloud photos", - "ignore_icloud_photos_description": "Photos that are stored on iCloud will not be uploaded to the Immich server", + "ignore_icloud_photos": "Пропускати файли з iCloud", + "ignore_icloud_photos_description": "Не завантажувати файли в Immich, якщо вони зберігаються в iCloud", "image_saved_successfully": "Зображення збережено", "image_viewer_page_state_provider_download_error": "Помилка завантаження", "image_viewer_page_state_provider_download_started": "Завантаження почалося", @@ -283,7 +283,7 @@ "image_viewer_page_state_provider_share_error": "Помилка спільного доступу", "invalid_date": "Недійсна дата", "invalid_date_format": "Недійсний формат дати", - "library": "Library", + "library": "Бібліотека", "library_page_albums": "Альбоми", "library_page_archive": "Архів", "library_page_device_albums": "Альбоми на пристрої", @@ -364,7 +364,7 @@ "motion_photos_page_title": "Рухомі Знімки", "multiselect_grid_edit_date_time_err_read_only": "Неможливо редагувати дату елементів лише для читання, пропущено", "multiselect_grid_edit_gps_err_read_only": "Неможливо редагувати місцезнаходження елементів лише для читання, пропущено", - "my_albums": "My albums", + "my_albums": "Мої альбоми", "no_assets_to_show": "Елементи відсутні", "no_name": "Без імені", "notification_permission_dialog_cancel": "Скасувати", @@ -373,7 +373,7 @@ "notification_permission_list_tile_content": "Надати дозвіл для сповіщень.", "notification_permission_list_tile_enable_button": "Увімкнути Сповіщення", "notification_permission_list_tile_title": "Дозвіл на Сповіщення", - "on_this_device": "On this device", + "on_this_device": "На цьому пристрої", "partner_list_user_photos": "Фотографії {user}", "partner_list_view_all": "Переглянути усі", "partner_page_add_partner": "Додати партнера", @@ -385,8 +385,8 @@ "partner_page_stop_sharing_content": "{} втратить доступ до ваших знімків.", "partner_page_stop_sharing_title": "Припинити надання ваших знімків?", "partner_page_title": "Партнер", - "partners": "Partners", - "people": "People", + "partners": "\nПартнери", + "people": "Люди", "permission_onboarding_back": "Назад", "permission_onboarding_continue_anyway": "Все одно продовжити", "permission_onboarding_get_started": "Розпочати", @@ -397,7 +397,7 @@ "permission_onboarding_permission_granted": "Доступ надано! Все готово.", "permission_onboarding_permission_limited": "Обмежений доступ. Аби дозволити Immich резервне копіювання та керування вашою галереєю, надайте доступ до знімків та відео у Налаштуваннях", "permission_onboarding_request": "Immich потребує доступу до ваших знімків та відео.", - "places": "Places", + "places": "Місця", "preferences_settings_title": "Параметри", "profile_drawer_app_logs": "Журнал", "profile_drawer_client_out_of_date_major": "Мобільний додаток застарів. Будь ласка, оновіть до останньої мажорної версії.", @@ -410,11 +410,11 @@ "profile_drawer_settings": "Налаштування", "profile_drawer_sign_out": "Вийти", "profile_drawer_trash": "Кошик", - "recently_added": "Recently added", + "recently_added": "Нещодавно додані", "recently_added_page_title": "Нещодавні", "save_to_gallery": "Зберегти в галерею", "scaffold_body_error_occurred": "Виникла помилка", - "search_albums": "Search albums", + "search_albums": "Пошук альбому", "search_bar_hint": "Шукати ваші знімки", "search_filter_apply": "Застосувати фільтр", "search_filter_camera": "Камера", @@ -560,9 +560,9 @@ "shared_link_info_chip_upload": "Завантажити", "shared_link_manage_links": "Керування спільними посиланнями", "shared_link_public_album": "Публічний альбом", - "shared_links": "Shared links", + "shared_links": "Публічні посилання", "share_done": "Готово", - "shared_with_me": "Shared with me", + "shared_with_me": "Доступні мені", "share_invite": "Запросити в альбом", "sharing_page_album": "Спільні альбоми", "sharing_page_description": "Створюйте спільні альбоми, щоб ділитися знімками та відео з людьми у вашій мережі.", @@ -594,7 +594,7 @@ "theme_setting_three_stage_loading_subtitle": "Триетапне завантаження може підвищити продуктивність завантаження, але спричинить значно більше навантаження на мережу", "theme_setting_three_stage_loading_title": "Увімкнути триетапне завантаження", "translated_text_options": "Налаштування", - "trash": "Trash", + "trash": "Кошик", "trash_emptied": "Кошик очищений", "trash_page_delete": "Видалити", "trash_page_delete_all": "Видалити усі", @@ -618,7 +618,7 @@ "version_announcement_overlay_text_2": "знайдіть хвильку навідатися на ", "version_announcement_overlay_text_3": "і переконайтеся, що ваші налаштування docker-compose та .env оновлені, аби запобігти будь-якій неправильній конфігурації, особливо, якщо ви використовуєте WatchTower або інший механізм, для автоматичних оновлень вашої серверної частини.", "version_announcement_overlay_title": "Доступна нова версія сервера \uD83C\uDF89", - "videos": "Videos", + "videos": "Відео", "viewer_remove_from_stack": "Видалити зі стеку", "viewer_stack_use_as_main_asset": "Використовувати як основний елементи", "viewer_unstack": "Розібрати стек" diff --git a/mobile/assets/i18n/vi-VN.json b/mobile/assets/i18n/vi-VN.json index c77f9427f1309..0a26e6dd70fc6 100644 --- a/mobile/assets/i18n/vi-VN.json +++ b/mobile/assets/i18n/vi-VN.json @@ -38,7 +38,7 @@ "album_viewer_appbar_share_remove": "Xoá khỏi album", "album_viewer_appbar_share_to": "Chia sẻ với", "album_viewer_page_share_add_users": "Thêm người dùng", - "all": "All", + "all": "Tất cả", "all_people_page_title": "Mọi người", "all_videos_page_title": "Video", "app_bar_signout_dialog_content": "Bạn có muốn đăng xuất?", From 497b3d995ee9ec6e814208872dadc93d405b833b Mon Sep 17 00:00:00 2001 From: "Weblate (bot)" Date: Wed, 6 Nov 2024 15:45:59 +0100 Subject: [PATCH 15/21] chore(web): update translations (#13810) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Benjamin Freeman Co-authored-by: Bezruchenko Simon Co-authored-by: Carl Dressler Co-authored-by: Diego Saint Esteben Co-authored-by: Dmitry Banny Co-authored-by: Dragonslayer Co-authored-by: Fjuro Co-authored-by: Florian Ostertag Co-authored-by: Hurricane-32 Co-authored-by: Indrek Haav Co-authored-by: Iwwww Co-authored-by: JBP Co-authored-by: Jonas Grubbauer Co-authored-by: Junghyuk Kwon Co-authored-by: Kamil Warczek Co-authored-by: Kovács Ádám Co-authored-by: Linerly Co-authored-by: Mehmet Numan Çam Co-authored-by: Miki Mrvos Co-authored-by: Polly Julien Co-authored-by: Rastislav Simcisko <21sd95@gmail.com> Co-authored-by: Samet Güzeldemirci Co-authored-by: Shawn Co-authored-by: Stan P Co-authored-by: T.Nikolaou Co-authored-by: TheGothian Co-authored-by: fmis13 Co-authored-by: pyccl Co-authored-by: qtm Co-authored-by: vytautas Co-authored-by: waclaw66 Co-authored-by: xxzp3 Co-authored-by: Вячеслав Лукьяненко Co-authored-by: 李奕寯 --- i18n/be.json | 33 ++++++- i18n/cs.json | 8 ++ i18n/da.json | 84 ++++++++++++++++ i18n/de.json | 8 ++ i18n/el.json | 46 ++++----- i18n/es.json | 8 ++ i18n/et.json | 9 ++ i18n/fr.json | 8 ++ i18n/he.json | 4 +- i18n/hr.json | 54 ++++++----- i18n/hu.json | 8 ++ i18n/id.json | 8 ++ i18n/ko.json | 208 +++++++++++++++++++++------------------- i18n/lt.json | 37 ++++--- i18n/nl.json | 8 ++ i18n/pl.json | 8 ++ i18n/pt.json | 8 ++ i18n/ru.json | 10 +- i18n/sk.json | 42 ++++---- i18n/sr_Cyrl.json | 8 ++ i18n/sr_Latn.json | 8 ++ i18n/sv.json | 21 ++-- i18n/tr.json | 42 ++++++-- i18n/uk.json | 8 ++ i18n/zh_Hant.json | 12 ++- i18n/zh_SIMPLIFIED.json | 52 +++++----- 26 files changed, 533 insertions(+), 217 deletions(-) diff --git a/i18n/be.json b/i18n/be.json index 0967ef424bce6..8747b4ac8cc6a 100644 --- a/i18n/be.json +++ b/i18n/be.json @@ -1 +1,32 @@ -{} +{ + "about": "Пра праграму", + "account": "Уліковы запіс", + "account_settings": "Налады акаўнта", + "acknowledge": "Пацвердзіць", + "action": "Дзеянне", + "actions": "Дзеянні", + "active": "Актыўны", + "activity": "Актыўнасць", + "activity_changed": "Актыўнасць {enabled, select, true {уключана} other {адключана}}", + "add": "Дадаць", + "add_a_description": "Дадаць апісанне", + "add_a_location": "Дадаць месца", + "add_a_name": "Дадаць імя", + "add_a_title": "Дадаць загаловак", + "add_exclusion_pattern": "Дадаць шаблон выключэння", + "add_import_path": "Дадаць шлях імпарту", + "add_location": "Дадайце месца", + "add_more_users": "Дадаць больш карыстальнікаў", + "add_partner": "Дадаць партнёра", + "add_path": "Дадаць шлях", + "add_photos": "Дадаць фота", + "add_to": "Дадаць у...", + "add_to_album": "Дадаць у альбом", + "add_to_shared_album": "Дадаць у агульны альбом", + "added_to_archive": "Дададзена ў архіў", + "added_to_favorites": "Дададзена ў абраныя", + "added_to_favorites_count": "Дададзена {count, number} да абранага", + "admin": { + "add_exclusion_pattern_description": "Дадайце шаблоны выключэнняў. Падтрымліваецца выкарыстанне сімвалаў * , ** і ?. Каб ігнараваць усе файлы ў любой дырэкторыі з назвай \"Raw\", выкарыстоўвайце \"**/Raw/**\". Каб ігнараваць усе файлы, якія заканчваюцца на \".tif\", выкарыстоўвайце \"**/.tif\". Каб ігнараваць абсолютны шлях, выкарыстоўвайце \"/path/to/ignore/**\"." + } +} diff --git a/i18n/cs.json b/i18n/cs.json index 12ba83b8e799b..59c60066db182 100644 --- a/i18n/cs.json +++ b/i18n/cs.json @@ -34,6 +34,11 @@ "authentication_settings_disable_all": "Opravdu chcete zakázat všechny metody přihlášení? Přihlašování bude úplně zakázáno.", "authentication_settings_reenable": "Pro opětovné povolení použijte příkaz Příkaz serveru.", "background_task_job": "Úkoly na pozadí", + "backup_database": "Zálohování databáze", + "backup_database_enable_description": "Povolit zálohování databáze", + "backup_keep_last_amount": "Počet předchozích záloh k uchování", + "backup_settings": "Nastavení zálohování", + "backup_settings_description": "Spravovat nastavení zálohování databáze", "check_all": "Vše zkontrolovat", "cleared_jobs": "Hotové úlohy pro: {job}", "config_set_by_file": "Konfigurace je aktuálně prováděna konfiguračním souborem", @@ -43,6 +48,9 @@ "confirm_reprocess_all_faces": "Opravdu chcete znovu zpracovat všechny obličeje? Tím se vymažou i pojmenované osoby.", "confirm_user_password_reset": "Opravdu chcete obnovit heslo uživatele {user}?", "create_job": "Vytvořit úlohu", + "cron_expression": "Výraz cron", + "cron_expression_description": "Nastavte interval prohledávání pomocí cron formátu. Další informace naleznete např. v Crontab Guru", + "cron_expression_presets": "Předvolby výrazů cron", "crontab_guru": "Crontab Guru", "disable_login": "Zakázat přihlášení", "disabled": "Zakázáno", diff --git a/i18n/da.json b/i18n/da.json index 9a4101b02350b..1d1ca5af02d5a 100644 --- a/i18n/da.json +++ b/i18n/da.json @@ -33,6 +33,11 @@ "authentication_settings_disable_all": "Er du sikker på at du vil deaktivere alle loginmuligheder? Login vil blive helt deaktiveret.", "authentication_settings_reenable": "Brug en server-kommando for at genaktivere.", "background_task_job": "Baggrundsopgaver", + "backup_database": "Backup Database", + "backup_database_enable_description": "Slå database-backup til", + "backup_keep_last_amount": "Mængde af tidligere backups, der skal gemmes", + "backup_settings": "Backup-indstillinger", + "backup_settings_description": "Administrer backupindstillinger for database", "check_all": "Tjek Alle", "cleared_jobs": "Ryddet jobs til: {job}", "config_set_by_file": "konfigurationen er i øjeblikket indstillet af en konfigurations fil", @@ -41,6 +46,7 @@ "confirm_email_below": "For at bekræfte, skriv \"{email}\" herunder", "confirm_reprocess_all_faces": "Er du sikker på, at du vil genbehandle alle ansigter? Dette vil også rydde navngivne personer.", "confirm_user_password_reset": "Er du sikker på, at du vil nulstille {user}s adgangskode?", + "create_job": "Opret job", "crontab_guru": "Crontab Guru", "disable_login": "Deaktiver login", "disabled": "", @@ -54,21 +60,27 @@ "failed_job_command": "Kommando {command} mislykkedes for job: {job}", "force_delete_user_warning": "ADVARSEL: Dette vil øjeblikkeligt fjerne brugeren og alle Billeder/Videoer. Dette kan ikke fortrydes, og filerne kan ikke gendannes.", "forcing_refresh_library_files": "Tvinger genopfriskning af alle biblioteksfiler", + "image_format": "Format", "image_format_description": "WebP producerer mindre filer end JPEG, men er langsommere at komprimere.", "image_prefer_embedded_preview": "Foretræk indlejret forhåndsvisning", "image_prefer_embedded_preview_setting_description": "Brug indlejrede forhåndsvisninger i RAW fotos som input til billedbehandling, når det er tilgængeligt. Dette kan give mere nøjagtige farver for nogle billeder, men kvaliteten af forhåndsvisningen er kameraafhængig, og billedet kan have flere komprimeringsartefakter.", "image_prefer_wide_gamut": "Foretrækker bred farveskala", "image_prefer_wide_gamut_setting_description": "Brug Display P3 til miniaturebilleder. Dette bevarer billeder med brede farveskalaers dynamik bedre, men billeder kan komme til at se anderledes ud på gamle enheder med en gammel browserversion. sRGB-billeder bliver beholdt som sRGB for at undgå farveskift.", + "image_preview_description": "Mellemstørrelse billede med fjernet metadata, der bruges, når du ser en enkelt mediefil og til machine learning", "image_preview_format": "Forhåndsvisningsformat", + "image_preview_quality_description": "Kvalitet af forhåndsvisning fra 1-100. Højere er bedre, men producerer større filer og kan reducere apprespons. Valg af en lav værdi kan påvirke kvaliteten af machine learning.", "image_preview_resolution": "Forhåndsvisnings opløsning", "image_preview_resolution_description": "Bliver brugt når et enkelt billede betragtes og ved maskinlæring. Højere opløsninger kan bevare flere detaljer, men tager længere tid at indkode, har større filstørrelser, og kan gøre appoplevelsen sløvere.", + "image_preview_title": "Indstillinger for forhåndsvisning", "image_quality": "Kvalitet", "image_quality_description": "Billedkvalitet fra 1-100. Højere er bedre for kvaliteten, men producerer større filer. Denne indstilling påvirker forhåndsvisningen og miniaturebillederne.", + "image_resolution": "Opløsning", "image_settings": "Billedindstillinger", "image_settings_description": "Administrer kvaliteten og opløsningen af genererede billeder", "image_thumbnail_format": "Miniatureformat", "image_thumbnail_resolution": "Miniature opløsning", "image_thumbnail_resolution_description": "Bruges ved visning af grupper af billeder (hovedtidslinje, albumvisning osv.). Højere opløsninger kan bevare flere detaljer, men det tager længere tid at kode, har større filstørrelser og kan reducere appens reaktionsevne.", + "image_thumbnail_title": "Thumbnail-indstillinger", "job_concurrency": "{job} samtidighed", "job_not_concurrency_safe": "Denne opgave er ikke sikker at køre samtidigt med andre.", "job_settings": "Jobindstillinger", @@ -198,6 +210,7 @@ "password_settings": "Adgangskodelogin", "password_settings_description": "Administrer indstillinger for adgangskodelogin", "paths_validated_successfully": "Alle stier valideret med succes", + "person_cleanup_job": "Person-oprydning", "quota_size_gib": "Kvotestørrelse (GiB)", "refreshing_all_libraries": "Opdaterer alle biblioteker", "registration": "Administratorregistrering", @@ -209,6 +222,7 @@ "require_password_change_on_login": "Kræv at brugeren skifter adgangskode ved første login", "reset_settings_to_default": "Nulstil indstillingerne til standard", "reset_settings_to_recent_saved": "Nulstil indstillinger til de senest gemte indstillinger", + "scanning_library": "Scanner bibliotek", "scanning_library_for_changed_files": "Skanner bibliotek efter ændrede filer", "scanning_library_for_new_files": "Skanner bibliotek efter nye filer", "send_welcome_email": "Send velkomst-email", @@ -312,6 +326,7 @@ "trash_settings_description": "Administrér skraldeindstillinger", "untracked_files": "Utrackede filer", "untracked_files_description": "Applikationen holder ikke styr på disse filer. De kan være resultatet af mislykkede flytninger, afbrudte uploads eller være efterladt på grund af en fejl", + "user_cleanup_job": "Bruger-oprydning", "user_delete_delay": "{user}'s konto og mediefiler vil blive planlagt til permanent sletning om {delay, plural, one {# dag} other {# dage}}.", "user_delete_delay_settings": "Slet forsinkelse", "user_delete_delay_settings_description": "Antal dage efter fjernelse for permanent at slette en brugers konto og mediefiler. Opgaven for sletning af brugere kører ved midnat for at tjekke efter brugere, der er klar til sletning. Ændringer i denne indstilling vil blive evalueret ved næste udførelse.", @@ -356,6 +371,7 @@ "album_updated_setting_description": "Modtag en emailnotifikation når et delt album får nye mediefiler", "album_user_left": "Forlod {album}", "album_user_removed": "Fjernede {user}", + "album_with_link_access": "Lad alle med linket se billeder og personer i dette album.", "albums": "Albummer", "albums_count": "{count, plural, one {{count, number} Album} other {{count, number} Albummer}}", "all": "Alt", @@ -378,7 +394,17 @@ "archive_size": "Arkiv størelse", "archive_size_description": "Konfigurer arkivstørrelsen for downloads (i GiB)", "archived": "Arkiveret", + "are_these_the_same_person": "Er disse den samme person?", + "are_you_sure_to_do_this": "Er du sikker på, at du vil gøre det her?", + "asset_added_to_album": "Tilføjet til album", + "asset_adding_to_album": "Tilføjer til album...", + "asset_description_updated": "Mediefilsbeskrivelse er blevet opdateret", + "asset_filename_is_offline": "Mediefil {filename} er offline", "asset_offline": "Mediefil offline", + "asset_offline_description": "Denne eksterne mediefil kan ikke længere findes på drevet. Kontakt venligst din Immich-administrator for hjælp.", + "asset_skipped": "Sprunget over", + "asset_uploaded": "Uploaded", + "asset_uploading": "Uploader...", "assets": "elementer", "authorized_devices": "Tilladte enheder", "back": "Tilbage", @@ -389,6 +415,7 @@ "build_image": "Byggefil", "bulk_delete_duplicates_confirmation": "Er du sikker på, at du vil slette alle {count, plural, one {# duplicate asset} other {# duplicate assets}}? Dette vil beholde den største fil i hver gruppe og slette alle dubletter. Denne handling kan ikke fortrydes!", "bulk_keep_duplicates_confirmation": "Er du sikker på, at du vil beholde {count, plural, one {# duplicate asset} other {# duplicate assets}}? Dette vil løse alle dubletgrupper uden at slette noget.", + "buy": "Køb Immich", "camera": "Kamera", "camera_brand": "Kameramærke", "camera_model": "Kameramodel", @@ -425,7 +452,9 @@ "collapse_all": "Klap alle sammen", "color": "Farve", "color_theme": "Farvetema", + "comment_deleted": "Kommentar slettet", "comment_options": "Kommentarindstillinger", + "comments_and_likes": "Kommentarer og likes", "comments_are_disabled": "Kommentarer er slået fra", "confirm": "Bekræft", "confirm_admin_password": "Bekræft administratoradgangskode", @@ -481,6 +510,7 @@ "direction": "Retning", "disabled": "Deaktiveret", "disallow_edits": "Deaktivér redigeringer", + "discord": "Discord", "discover": "Opdag", "dismiss_all_errors": "Afvis alle fejl", "dismiss_error": "Afvis fejl", @@ -488,6 +518,7 @@ "display_order": "Display-rækkefølge", "display_original_photos": "Vis originale billeder", "display_original_photos_setting_description": "Foretræk at vise det originale billede frem for miniaturebilleder når den originale fil er web-kompatibelt. Dette kan gøre billedvisning langsommere.", + "do_not_show_again": "Vis ikke denne besked igen", "done": "Færdig", "download": "Hent", "download_settings": "Download", @@ -502,6 +533,7 @@ "months": "{months, plural, one {måned} other {{months, number} måneder}}", "years": "{years, plural, one {år} other {{years, number} år}}" }, + "edit": "Rediger", "edit_album": "Redigér album", "edit_avatar": "Redigér avatar", "edit_date": "Redigér dato", @@ -519,6 +551,9 @@ "edit_user": "Redigér bruger", "edited": "Redigeret", "editor": "Redaktør", + "editor_close_without_save_prompt": "Ændringerne vil ikke blive gemt", + "editor_close_without_save_title": "Luk editor?", + "editor_crop_tool_h2_rotation": "Rotation", "email": "E-mail", "empty": "", "empty_album": "Tomt album", @@ -528,12 +563,30 @@ "end_date": "Slutdato", "error": "Fejl", "error_loading_image": "Fejl ved indlæsning af billede", + "error_title": "Fejl - Noget gik galt", "errors": { + "cannot_navigate_next_asset": "Kan ikke navigere til næste mediefil", + "cannot_navigate_previous_asset": "Kan ikke navigere til forrige mediefil", "cleared_jobs": "Ryddede opgaver for: {job}", + "error_adding_assets_to_album": "Fejl i tilføjelse af mediefiler til album", + "error_adding_users_to_album": "Fejl i tilføjelse af brugere til album", + "error_deleting_shared_user": "Fejl i sletning af delt bruger", + "error_downloading": "Fejl i download af {filename}", + "error_hiding_buy_button": "Fejl i skjulning af køb-knap", + "error_removing_assets_from_album": "Fejl i fjernelse af mediefiler fra album. Tjek konsol for flere detaljer", "exclusion_pattern_already_exists": "Denne udelukkelsesmønster findes allerede.", "failed_job_command": "Kommando {command} slog fejl for opgave: {job}", + "failed_to_create_album": "Oprettelse af album mislykkedes", + "failed_to_create_shared_link": "Oprettelse af delt link mislykkedes", + "failed_to_edit_shared_link": "Redigering af delt link mislykkedes", + "failed_to_load_asset": "Indlæsning af mediefil mislykkedes", + "failed_to_load_assets": "Indlæsning af mediefiler mislykkedes", + "failed_to_load_people": "Indlæsning af personer mislykkedes", + "failed_to_remove_product_key": "Fjernelse af produktnøgle mislykkedes", "import_path_already_exists": "Denne importsti findes allerede.", + "incorrect_email_or_password": "Forkert email eller kodeord", "paths_validation_failed": "{paths, plural, one {# sti} other {# stier}} slog fejl ved validering", + "profile_picture_transparent_pixels": "Profilbilleder kan ikke have gennemsigtige pixels. Zoom venligst ind og/eller flyt billedet.", "quota_higher_than_disk_size": "Du har sat en kvote der er større end disken", "repair_unable_to_check_items": "Kunne ikke tjekke {count, select, one {element} other {elementer}}", "unable_to_add_album_users": "Ikke i stand til at tilføje brugere til album", @@ -554,6 +607,7 @@ "unable_to_create_user": "Ikke i stand til at oprette bruger", "unable_to_delete_album": "Ikke i stand til at slette album", "unable_to_delete_asset": "Kan ikke slette mediefil", + "unable_to_delete_assets": "Fejl i sletning af mediefiler", "unable_to_delete_exclusion_pattern": "Kunne ikke slette udelukkelsesmønster", "unable_to_delete_import_path": "Kunne ikke slette importsti", "unable_to_delete_shared_link": "Kunne ikke slette delt link", @@ -606,10 +660,12 @@ "every_night_at_midnight": "", "every_night_at_twoam": "", "every_six_hours": "", + "exif": "Exif", "exit_slideshow": "Forlad slideshow", "expand_all": "Udvid alle", "expire_after": "Udløb efter", "expired": "Udløbet", + "expires_date": "Udløber {date}", "explore": "Udforsk", "export": "Eksportér", "export_as_json": "Eksportér som JSON", @@ -623,6 +679,8 @@ "feature": "", "feature_photo_updated": "Forsidebillede uploadet", "featurecollection": "", + "features": "Funktioner", + "features_setting_description": "Administrer app-funktioner", "file_name": "Filnavn", "file_name_or_extension": "Filnavn eller filtype", "filename": "Filnavn", @@ -631,6 +689,7 @@ "filter_people": "Filtrér personer", "find_them_fast": "Find dem hurtigt med søgning via navn", "fix_incorrect_match": "Fix forkert match", + "folders": "Mapper", "force_re-scan_library_files": "Tving genskanning af alle biblioteksfiler", "forward": "Fremad", "general": "Generel", @@ -640,10 +699,15 @@ "go_to_search": "Gå til søgning", "go_to_share_page": "Gå til delingsside", "group_albums_by": "Gruppér albummer efter...", + "group_no": "Ingen gruppering", "has_quota": "Har kvote", + "hi_user": "Hej {name} ({email})", + "hide_all_people": "Skjul alle personer", "hide_gallery": "Gem galleri", + "hide_named_person": "Skjul person {name}", "hide_password": "Gem adgangskode", "hide_person": "Gem person", + "hide_unnamed_people": "Skjul unavngivne personer", "host": "Host", "hour": "Time", "image": "Billede", @@ -669,10 +733,12 @@ "job_settings_description": "", "jobs": "Opgaver", "keep": "Behold", + "keep_all": "Behold alle", "keyboard_shortcuts": "Tastaturgenveje", "language": "Sprog", "language_setting_description": "Vælg dit foretrukne sprog", "last_seen": "Sidst set", + "latest_version": "Seneste version", "leave": "Forlad", "let_others_respond": "Lad andre svare", "level": "Niveau", @@ -687,7 +753,12 @@ "loading_search_results_failed": "At loade søgeresultater slog fejl", "log_out": "Log ud", "log_out_all_devices": "Log ud af alle enheder", + "logged_out_all_devices": "Logget ud af alle enheder", + "logged_out_device": "Logget ud af enhed", + "login": "Log ind", "login_has_been_disabled": "Login er blevet deaktiveret.", + "logout_all_device_confirmation": "Er du sikker på, at du vil logge ud af alle enheder?", + "logout_this_device_confirmation": "Er du sikker på, at du vil logge denne enhed ud?", "look": "Kig", "loop_videos": "Gentag videoer", "loop_videos_description": "Aktivér for at genafspille videoer automatisk i detaljeret visning.", @@ -721,15 +792,19 @@ "name": "Navn", "name_or_nickname": "Navn eller kælenavn", "never": "aldrig", + "new_album": "Nyt album", "new_api_key": "Ny API-nøgle", "new_password": "Ny adgangskode", "new_person": "Ny person", "new_user_created": "Ny bruger oprettet", + "new_version_available": "NY VERSION TILGÆNGELIG", "newest_first": "Nyeste først", "next": "Næste", "next_memory": "Næste minde", "no": "Nej", "no_albums_message": "Opret et album for at organisere dine billeder og videoer", + "no_albums_with_name_yet": "Det ser ud til, at du ikke har noget album med dette navn endnu.", + "no_albums_yet": "Det ser ud til, at du ikke har nogen album endnu.", "no_archived_assets_message": "Arkivér billeder og fotos for at gemme dem væk fra dit Billed-view", "no_assets_message": "KLIK FOR AT UPLOADE DIT FØRSTE BILLEDE", "no_duplicates_found": "Ingen duplikater fundet.", @@ -740,6 +815,7 @@ "no_name": "Intet navn", "no_places": "Ingen steder", "no_results": "Ingen resultater", + "no_results_description": "Prøv et synonym eller et mere generelt søgeord", "no_shared_albums_message": "Opret et album for at dele billeder og videoer med personer i dit netværk", "not_in_any_album": "Ikke i noget album", "note_apply_storage_label_to_previously_uploaded assets": "Bemærk: For at anvende Lagringsmærkat på tidligere uploadede medier, kør", @@ -749,17 +825,24 @@ "notifications": "Notifikationer", "notifications_setting_description": "Administrér notifikationer", "oauth": "OAuth", + "official_immich_resources": "Officielle Immich-ressourcer", "offline": "Offline", "offline_paths": "Offline-stier", "offline_paths_description": "Disse resultater kan være på grund af manuel sletning af filer, som ikke er en del af et eksternt bibliotek.", "ok": "Ok", "oldest_first": "Ældste først", + "onboarding_privacy_description": "Følgende (valgfrie) funktioner er afhængige af eksterne tjenester, og kan til enhver tid deaktiveres i administrationsindstillingerne.", + "onboarding_welcome_user": "Velkommen, {user}", "online": "Online", "only_favorites": "Kun favoritter", "only_refreshes_modified_files": "Kun genopfrisk ændrede filer", + "open_in_map_view": "Åben i kortvisning", + "open_in_openstreetmap": "Åben i OpenStreetMap", "open_the_search_filters": "Åbn søgefiltre", "options": "Handlinger", + "or": "eller", "organize_your_library": "Organisér dit bibliotek", + "original": "original", "other": "Andet", "other_devices": "Andre enheder", "other_variables": "Andre variable", @@ -792,6 +875,7 @@ "permanent_deletion_warning_setting_description": "Vis en advarsel, når medier slettes permanent", "permanently_delete": "Slet permanent", "permanently_deleted_asset": "Permanent slettet medie", + "person": "Person", "photos": "Billeder", "photos_count": "{count, plural, one {{count, number} Billede} other {{count, number} Billeder}}", "photos_from_previous_years": "Billeder fra tidligere år", diff --git a/i18n/de.json b/i18n/de.json index 5bff3eb817a9f..a22e4f2e15a38 100644 --- a/i18n/de.json +++ b/i18n/de.json @@ -34,6 +34,11 @@ "authentication_settings_disable_all": "Bist du sicher, dass du alle Anmeldemethoden deaktivieren willst? Die Anmeldung wird vollständig deaktiviert.", "authentication_settings_reenable": "Nutze einen Server-Befehl zur Reaktivierung.", "background_task_job": "Hintergrund-Aufgaben", + "backup_database": "Datenbank sichern", + "backup_database_enable_description": "Sicherung der Datenbank aktivieren", + "backup_keep_last_amount": "Anzahl der aufzubewahrenden früheren Sicherungen", + "backup_settings": "Datensicherungs-Einstellungen", + "backup_settings_description": "Datensicherungs-Einstellungen verwalten", "check_all": "Alle überprüfen", "cleared_jobs": "Folgende Aufgaben zurückgesetzt: {job}", "config_set_by_file": "Ist derzeit in einer Konfigurationsdatei festgelegt", @@ -43,6 +48,9 @@ "confirm_reprocess_all_faces": "Bist du sicher, dass du alle Gesichter erneut verarbeiten möchtest? Dies löscht auch alle bereits benannten Personen.", "confirm_user_password_reset": "Bist du sicher, dass du das Passwort für {user} zurücksetzen möchtest?", "create_job": "Aufgabe erstellen", + "cron_expression": "Cron-Ausdruck", + "cron_expression_description": "Stellen Sie das Scanintervall im Cron-Format ein. Weitere Informationen finden Sie beispielsweise unter Crontab Guru", + "cron_expression_presets": "Cron-Ausdruck-Vorlagen", "crontab_guru": "Crontab Guru", "disable_login": "Login deaktvieren", "disabled": "Deaktiviert", diff --git a/i18n/el.json b/i18n/el.json index b29e95b9c4cc8..f656b14df5277 100644 --- a/i18n/el.json +++ b/i18n/el.json @@ -5,7 +5,7 @@ "acknowledge": "Έλαβα γνώση", "action": "Ενέργεια", "actions": "Ενέργειες", - "active": "Ενεργά", + "active": "Ενεργές", "activity": "Δραστηριότητα", "activity_changed": "Η δραστηριότητα είναι {enabled, select, true {ενεργοποιημένη} other {απενεργοποιημένη}}", "add": "Προσθήκη", @@ -13,52 +13,52 @@ "add_a_location": "Προσθήκη μιας τοποθεσίας", "add_a_name": "Προσθήκη ονόματος", "add_a_title": "Προσθήκη τίτλου", - "add_exclusion_pattern": "Προσθήκη προτύπου αποκλεισμού", - "add_import_path": "Προσθήκη διαδρομής εισαγωγής", + "add_exclusion_pattern": "Προσθήκη μοτίβου αποκλεισμού", + "add_import_path": "Προσθήκη μονοπατιού εισαγωγής", "add_location": "Προσθήκη τοποθεσίας", "add_more_users": "Προσθήκη επιπλέον χρηστών", - "add_partner": "Προσθήκη συνεργάτη", - "add_path": "Προσθήκη διαδρομής", + "add_partner": "Προσθήκη συντρόφου", + "add_path": "Προσθήκη μονοπατιού", "add_photos": "Προσθήκη φωτογραφιών", "add_to": "Προσθήκη σε...", "add_to_album": "Προσθήκη σε άλμπουμ", "add_to_shared_album": "Προσθήκη σε κοινόχρηστο άλμπουμ", - "added_to_archive": "Αρχειοθέτηση", - "added_to_favorites": "Προστέθηκε στα αγαπημένα", + "added_to_archive": "Έγινε αρχειοθέτηση", + "added_to_favorites": "Έγινε προσθήκη στα αγαπημένα", "added_to_favorites_count": "Προστέθηκαν {count, number} στα αγαπημένα", "admin": { - "add_exclusion_pattern_description": "Προσθέστε πρότυπα αποκλεισμού. Υποστηρίζεται η επιλογή πολλών με *, **, και ?. Για να αγνοηθούν όλα τα αρχεία σε έναν φάκελο με το όνομα \"Raw\", χρησιμοποιήστε \"**/Raw/**\". Για να αγνοηθούν όλα τα αρχεία με κατάληξη \".tif\", χρησιμοποιήστε \"**/*.tif\". Για να αγνοηθεί μία απόλυτη διαδρομή, χρησιμοποιήστε \"/path/to/ignore/**\".", - "asset_offline_description": "Αυτό το στοιχείο εξωτερικής βιβλιοθήκης δε βρίσκεται πλέον στο δίσκο και έχει μεταφερθεί στα σκουπίδια. Εάν το αρχείο έχει μετακινηθεί εντός της βιβλιοθήκης, ελέγξτε το χρονοδιάγραμμα σας για το νέο αντίστοιχο στοιχείο. Για να επαναφέρετε αυτό το στοιχείο, βεβαιωθείτε ότι το παρακάτω μονοπάτι αρχείου είναι προσβάσιμο από το Immich και ότι μπορεί να σαρώσει τη βιβλιοθήκη.", + "add_exclusion_pattern_description": "Προσθέστε μοτίβα αποκλεισμού. Υποστηρίζεται η επιλογή πολλών με *, **, και ?. Για να αγνοηθούν όλα τα αρχεία σε έναν φάκελο με το όνομα \"Raw\", χρησιμοποιήστε \"**/Raw/**\". Για να αγνοηθούν όλα τα αρχεία με κατάληξη \".tif\", χρησιμοποιήστε \"**/*.tif\". Για να αγνοηθεί ένα απόλυτο μονοπάτι, χρησιμοποιήστε \"/path/to/ignore/**\".", + "asset_offline_description": "Αυτό το στοιχείο εξωτερικής βιβλιοθήκης δε βρίσκεται πλέον στο δίσκο και έχει μεταφερθεί στα απορρίμματα. Εάν το αρχείο έχει μετακινηθεί εντός της βιβλιοθήκης, ελέγξτε το χρονολόγιο φωτογραφιών σας για το νέο αντίστοιχο στοιχείο. Για να επαναφέρετε αυτό το στοιχείο, βεβαιωθείτε ότι το παρακάτω μονοπάτι αρχείου είναι προσβάσιμο από το Immich και σαρώστε τη βιβλιοθήκη.", "authentication_settings": "Ρυθμίσεις ελέγχου ταυτότητας", "authentication_settings_description": "Διαχείριση κωδικού πρόσβασης, OAuth και άλλες ρυθμίσεις ελέγχου ταυτότητας", "authentication_settings_disable_all": "Είστε βέβαιοι ότι θέλετε να απενεργοποιήσετε όλες τις μεθόδους σύνδεσης; Η σύνδεση θα απενεργοποιηθεί πλήρως.", - "authentication_settings_reenable": "Για να επαναενεργοποιηθεί, χρησιμοποιήστε μία Server Command.", + "authentication_settings_reenable": "Για επαναενεργοποίηση, χρησιμοποιήστε μία Εντολή Διακομηστή.", "background_task_job": "Εργασίες Παρασκηνίου", "check_all": "Έλεγχος Όλων", - "cleared_jobs": "Εκκαθάριση εργασιών για: {job}", - "config_set_by_file": "Η διαμόρφωση γίνεται προς το παρόν από ένα αρχείο config", + "cleared_jobs": "Εκκαθαρίστηκαν εργασίες για: {job}", + "config_set_by_file": "Η παραμετροποίηση γίνεται προς το παρόν από ένα αρχείο παραμέτρων", "confirm_delete_library": "Είστε βέβαιοι ότι θέλετε να διαγράψετε τη βιβλιοθήκη {library};", - "confirm_delete_library_assets": "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτή τη βιβλιοθήκη; Αυτό θα διαγράψει τα {count, plural, one {# contained asset} other {all # contained assets}} από το Immich και δεν μπορεί να αναιρεθεί. Τα αρχεία θα παραμείνουν στον δίσκο.", + "confirm_delete_library_assets": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτή τη βιβλιοθήκη; Αυτό θα διαγράψει τα {count, plural, one {# contained asset} other {all # contained assets}} από το Immich και δεν μπορεί να αναιρεθεί. Τα αρχεία θα παραμείνουν στον δίσκο.", "confirm_email_below": "Για επιβεβαίωση, πληκτρολογήστε \"{email}\" παρακάτω", "confirm_reprocess_all_faces": "Είστε βέβαιοι ότι θέλετε να επεξεργαστείτε ξανά όλα τα πρόσωπα; Αυτό θα διαγράψει επίσης άτομα με όνομα.", "confirm_user_password_reset": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε τον κωδικό πρόσβασης του χρήστη {user};", "create_job": "Δημιουργία εργασίας", - "disable_login": "Απενεργοποίηση σύνδεσης κατά την είσοδο", - "duplicate_detection_job_description": "Εκτελέστε τη εκμάθηση μηχανής σε στοιχεία για να εντοπίσετε παρόμοιες εικόνες. Βασίζεται στην Έξυπνη Αναζήτηση", - "exclusion_pattern_description": "Τα πρότυπα αποκλεισμού σας επιτρέπουν να αγνοείται αρχεία κκαι φακέλους όσο σαρώνεται η βιβλιοθήκη. Αυτό είναι χρήσιμο εάν εχετε φακέλους που περιέχουν αρχεία που δεν θέλετε να εισαγάγετε, όπως αρχεία RAW.", + "disable_login": "Απενεργοποίηση σύνδεσης", + "duplicate_detection_job_description": "Εκτελέστε μηχανική μάθηση σε στοιχεία για να εντοπίσετε παρόμοιες εικόνες. Βασίζεται στην Έξυπνη Αναζήτηση", + "exclusion_pattern_description": "Τα μοτίβα αποκλεισμού σας επιτρέπουν να αγνοείται αρχεία και φακέλους κατά τη σάρωση της βιβλιοθήκης σας. Αυτό είναι χρήσιμο εάν εχετε φακέλους που περιέχουν αρχεία που δεν θέλετε να εισάγετε, όπως αρχεία RAW.", "external_library_created_at": "Εξωτερική βιβλιοθήκη (δημιουργήθηκε {date})", "external_library_management": "Διαχείριση Εξωτερικών Βιβλιοθηκών", - "face_detection": "Αναγνώριση προσώπου", - "face_detection_description": "Εντοπίστε τα πρόσωπα σε στοιχεία χρησιμοποιώντας μηχανική εκμάθηση. Για βίντεο, λαμβάνεται υπόψη μόνο η μικρογραφία. Η επιλογή \"Ανανέωση\" επεξεργάζεται εκ νέου όλα τα στοιχεία και η επιλογή \"Επαναφορά\", επιπλέον επαναφέρει ολα τα δεδομένα προσώπου. Η επιλογή \"Όσα Λείπουν\" προσθέτει στην ουρά στοιχεία που δεν έχουν υποστεί ακόμη επεξεργασία. Τα πρόσωπα που έχουν εντοπιστεί θα μπουν στην ουρά για την Αναγνώριση Προσώπου μετά την ολοκλήρωση της Ανίχνευσης Προσώπου, ομαδοποιώντας τα σε υπάρχοντα ή νέα άτομα.", - "facial_recognition_job_description": "Ομαδοποιήστε εντοπισμένα πρόσωπα σε άτομα. Αυτό το βήμα εκτελείται αφού ολοκληρωθεί η Ανίχνευση προσώπου. Η επιλογή \"Επαναφορά\" ομαδοποιεί εκ νέου όλα τα πρόσωπα. Η επιλογή \"Όσα Λείπουν\" ομαδοποιεί πρόσωπα που δεν έχουν αντιστοιχηθεί σε κάποιο άτομο.", - "failed_job_command": "Η Εντολή {command} απέτυχε για την εργασία: {job}", + "face_detection": "Ανίχνευση προσώπου", + "face_detection_description": "Ανιχνεύστε τα πρόσωπα σε στοιχεία χρησιμοποιώντας μηχανική μάθηση. Για βίντεο, λαμβάνεται υπόψη μόνο η μικρογραφία. Η επιλογή \"Ανανέωση\" επεξεργάζεται εκ νέου όλα τα στοιχεία. Η επιλογή \"Επαναφορά\", επιπλέον εκκαθαρίζει όλα τα δεδομένα προσώπου. Η επιλογή \"Ελλείποντα\" προσθέτει στην ουρά στοιχεία που δεν έχουν υποστεί ακόμη επεξεργασία. Τα πρόσωπα που έχουν εντοπιστεί θα μπουν στην ουρά για την Αναγνώριση Προσώπου μετά την ολοκλήρωση της Ανίχνευσης Προσώπου, ομαδοποιώντας τα σε υπάρχοντα ή νέα άτομα.", + "facial_recognition_job_description": "Ομαδοποιήστε ανιχνευμένα πρόσωπα σε άτομα. Αυτό το βήμα εκτελείται αφού ολοκληρωθεί η Ανίχνευση Προσώπου. Η επιλογή \"Επαναφορά\" ομαδοποιεί εκ νέου όλα τα πρόσωπα. Η επιλογή \"Ελλείποντα\" βάζει στην ουρά για ομαδοποίηση πρόσωπα που δεν έχουν αντιστοιχηθεί σε κάποιο άτομο.", + "failed_job_command": "Η εντολή {command} απέτυχε για την εργασία: {job}", "force_delete_user_warning": "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Αυτό θα αφαιρέσει άμεσα το χρήστη και όλα τα στοιχεία. Αυτό δεν μπορεί να αναιρεθεί και τα αρχεία δεν μπορούν να ανακτηθούν.", "forcing_refresh_library_files": "Επιβολή ανανέωσης όλων των αρχείων της βιβλιοθήκης", "image_format": "Μορφή", "image_format_description": "Η μορφή WebP παράγει μικρότερα αρχεία από τη μορφή JPEG, αλλά είναι πιο αργή στην κωδικοποίηση.", "image_prefer_embedded_preview": "Προτίμηση ενσωματωμένης προεπισκόπησης", - "image_prefer_embedded_preview_setting_description": "Χρησιμοποιήστε ενσωματωμένες προεπισκοπίσεις για εικόνες RAW ως εισαγωγή στην επεξεργασία εικόνας όταν είναι διαθέσιμο. Αυτό μπορεί να δημιουργήσει πιο ακριβή χρωματα για κάποιες εικόνες, αλλά η ποιότητα των προεπισκοπίσεων εξαρτάται από την κάμερα και ενδέχεται να υπάρχουν περισσότερα μπιμπίκια λόγω συμπίεσης.", - "image_prefer_wide_gamut": "Προτίμηση ευρείας γκάμας", + "image_prefer_embedded_preview_setting_description": "Χρησιμοποιήστε ενσωματωμένες προεπισκοπίσεις για εικόνες RAW ως είσοδο για την επεξεργασία εικόνας όταν είναι διαθέσιμες. Αυτό μπορεί να δημιουργήσει πιο ακριβή χρώματα για κάποιες εικόνες, αλλά η ποιότητα των προεπισκοπίσεων εξαρτάται από την κάμερα και ενδέχεται να υπάρχουν περισσότερες αλλοιώσεις στην εικόνα λόγω συμπίεσης.", + "image_prefer_wide_gamut": "Προτίμηση ευρέος φάσματος", "image_prefer_wide_gamut_setting_description": "Χρησιμοποιήστε Display P3 για τις μικρογραφίες. Αυτό διατηρεί την ζωντάνια των χρωμάτων σε εικόνες μεγάλου χρωματικού εύρους, αλλά ενδέχεται να εμφανίζονται αλλιώς σε παλαιότερες συσκευές με παλαιότερες εκδόσεις περιηγητών. Οι εικόνες sRGB μένουν ως έχουν για να αποφευχθούν χρωματικές αλλαγές.", "image_preview_description": "Μεσαίου μεγέθους εικόνες, χωρίς μεταδεδομένα, οι οποίες χρησιμοποιύνται όταν γίνεται θέαση ενός αντικειμένου και για μηχανική μάθηση", "image_preview_format": "Μορφή προεπισκόπησης", @@ -644,7 +644,7 @@ "warning": "Προειδοποίηση", "week": "Εβδομάδα", "welcome": "Καλωσορίσατε", - "welcome_to_immich": "Καλωσορίσατε στο immich", + "welcome_to_immich": "Καλωσορίσατε στο Ιmmich", "year": "Έτος", "years_ago": "πριν από {years, plural, one {# χρόνο} other {# χρόνια}}", "yes": "Ναι", diff --git a/i18n/es.json b/i18n/es.json index c58888a57073e..52e0384359826 100644 --- a/i18n/es.json +++ b/i18n/es.json @@ -34,6 +34,11 @@ "authentication_settings_disable_all": "¿Está seguro de que deseas desactivar todos los métodos de inicio de sesión? El inicio de sesión se desactivará por completo.", "authentication_settings_reenable": "Para volver a activarlo, utiliza un Comando del servidor .", "background_task_job": "Tareas en segundo plano", + "backup_database": "Respaldar base de datos", + "backup_database_enable_description": "Activar respaldo de base de datos", + "backup_keep_last_amount": "Cantidad de respaldos previos a mantener", + "backup_settings": "Ajustes de respaldo", + "backup_settings_description": "Administrar configuración de respaldo de base de datos", "check_all": "Verificar todo", "cleared_jobs": "Trabajos borrados para: {job}", "config_set_by_file": "La configuración está definida por un archivo de configuración", @@ -43,6 +48,9 @@ "confirm_reprocess_all_faces": "¿Estás seguro de que deseas reprocesar todas las caras? Esto borrará a todas las personas que nombraste.", "confirm_user_password_reset": "¿Estás seguro de que quieres restablecer la contraseña de {user}?", "create_job": "Crear trabajo", + "cron_expression": "Expresión CRON", + "cron_expression_description": "Establece el intervalo de escaneo utilizando el formato CRON. Para más información puede consultar, por ejemplo, Crontab Guru", + "cron_expression_presets": "Valores predefinidos de expresión cron", "crontab_guru": "Crontab Guru", "disable_login": "Deshabilitar inicio de sesión", "disabled": "Deshabilitado", diff --git a/i18n/et.json b/i18n/et.json index d46714abe94f2..1f46a8b8539f3 100644 --- a/i18n/et.json +++ b/i18n/et.json @@ -34,6 +34,11 @@ "authentication_settings_disable_all": "Kas oled kindel, et soovid kõik sisselogimismeetodid välja lülitada? Sisselogimine lülitatakse täielikult välja.", "authentication_settings_reenable": "Et taas lubada, kasuta serveri käsku.", "background_task_job": "Tausttegumid", + "backup_database": "Varunda andmebaas", + "backup_database_enable_description": "Luba andmebaasi varundamine", + "backup_keep_last_amount": "Varukoopiate arv, mida alles hoida", + "backup_settings": "Varundamise seaded", + "backup_settings_description": "Halda andmebaasi varundamise seadeid", "check_all": "Märgi kõik", "cleared_jobs": "Tööted eemaldatud: {job}", "config_set_by_file": "Konfiguratsioon on määratud konfifaili abil", @@ -43,6 +48,9 @@ "confirm_reprocess_all_faces": "Kas oled kindel, et soovid kõik näod uuesti töödelda? See eemaldab kõik nimega isikud.", "confirm_user_password_reset": "Kas oled kindel, et soovid kasutaja {user} parooli lähtestada?", "create_job": "Lisa tööde", + "cron_expression": "Cron avaldis", + "cron_expression_description": "Sea skaneerimise intervall cron formaadis. Rohkema info jaoks vaata nt. Crontab Guru", + "cron_expression_presets": "Eelseadistatud cron avaldised", "disable_login": "Keela sisselogimine", "duplicate_detection_job_description": "Rakenda üksustele masinõpet, et leida sarnaseid pilte. Kasutab nutiotsingut", "exclusion_pattern_description": "Välistamismustrid võimaldavad ignoreerida faile ja kaustu kogu skaneerimisel. See on kasulik, kui sul on kaustu, mis sisaldavad faile, mida sa ei soovi importida, nagu RAW failid.", @@ -1116,6 +1124,7 @@ "server_online": "Server ühendatud", "server_stats": "Serveri statistika", "server_version": "Serveri versioon", + "set": "Määra", "set_as_album_cover": "Sea albumi kaanepildiks", "set_as_profile_picture": "Sea profiilipildiks", "set_date_of_birth": "Määra sünnikuupäev", diff --git a/i18n/fr.json b/i18n/fr.json index 781f801bb9f36..9e4b925c885ec 100644 --- a/i18n/fr.json +++ b/i18n/fr.json @@ -34,6 +34,11 @@ "authentication_settings_disable_all": "Êtes-vous sûr de vouloir désactiver toutes les méthodes de connexion ? La connexion sera complètement désactivée.", "authentication_settings_reenable": "Pour réactiver, utilisez une Commande Serveur.", "background_task_job": "Tâches de fond", + "backup_database": "Sauvegarde de la base de données", + "backup_database_enable_description": "Activer la sauvegarde", + "backup_keep_last_amount": "Nombre de sauvegardes à conserver", + "backup_settings": "Paramètres de la sauvegarde", + "backup_settings_description": "Gérer les paramètres de la sauvegarde", "check_all": "Vérifier tout", "cleared_jobs": "Tâches supprimées pour : {job}", "config_set_by_file": "La configuration est actuellement définie par un fichier de configuration", @@ -43,6 +48,9 @@ "confirm_reprocess_all_faces": "Êtes-vous sûr de vouloir retraiter tous les visages ? Cela effacera également les personnes déjà identifiées.", "confirm_user_password_reset": "Êtes-vous sûr de vouloir réinitialiser le mot de passe de {user} ?", "create_job": "Créer une tâche", + "cron_expression": "Expression cron", + "cron_expression_description": "Définir l'intervalle d'analyse à l'aide d'une expression cron. Pour plus d'informations, voir Crontab Guru", + "cron_expression_presets": "Préréglages expression cron", "crontab_guru": "Générateur de règles Cron", "disable_login": "Désactiver la connexion", "disabled": "Désactivé", diff --git a/i18n/he.json b/i18n/he.json index 7cb896f1f0b3f..13353f5d86a8a 100644 --- a/i18n/he.json +++ b/i18n/he.json @@ -433,7 +433,7 @@ "blurred_background": "רקע מטושטש", "bugs_and_feature_requests": "באגים & בקשות לתכונות", "build": "Build", - "build_image": "Build Image", + "build_image": "בניית Image", "bulk_delete_duplicates_confirmation": "האם את/ה בטוח/ה שברצונך למחוק בכמות גדולה {count, plural, one {נכס # כפול} other {# נכסים כפולים}}? זה ישמור על הנכס הכי גדול של כל קבוצה וימחק לצמיתות את כל שאר הכפילויות. את/ה לא יכול/ה לבטל את הפעולה הזו!", "bulk_keep_duplicates_confirmation": "האם את/ה בטוח/ה שברצונך להשאיר {count, plural, one {נכס # כפול} other {# נכסים כפולים}}? זה יפתור את כל הקבוצות הכפולות מבלי למחוק דבר.", "bulk_trash_duplicates_confirmation": "האם את/ה בטוח/ה שברצונך להעביר לאשפה בכמות גדולה {count, plural, one {נכס # כפול} other {# נכסים כפולים}}? זה ישמור על הנכס הגדול ביותר של כל קבוצה ויעביר לאשפה את כל שאר הכפילויות.", @@ -1391,7 +1391,7 @@ "warning": "אזהרה", "week": "שבוע", "welcome": "ברוכים הבאים", - "welcome_to_immich": "ברוכים הבאים אל immich", + "welcome_to_immich": "ברוכים הבאים לimmich", "year": "שנה", "years_ago": "לפני {years, plural, one {שנה #} other {# שנים}}", "yes": "כן", diff --git a/i18n/hr.json b/i18n/hr.json index 0b1c6c64badba..260cf0b3460ff 100644 --- a/i18n/hr.json +++ b/i18n/hr.json @@ -529,6 +529,7 @@ "direction": "Smjer", "disabled": "Onemogućeno", "disallow_edits": "Zabrani izmjene", + "discord": "Discord", "discover": "Otkrij", "dismiss_all_errors": "Odbaci sve pogreške", "dismiss_error": "Odbaci pogrešku", @@ -537,6 +538,7 @@ "display_original_photos": "Prikaz originalnih fotografija", "display_original_photos_setting_description": "Radije prikažite izvornu fotografiju kada gledate materijal umjesto sličica kada je izvorni materijal kompatibilan s webom. To može rezultirati sporijim brzinama prikaza fotografija.", "do_not_show_again": "Ne prikazuj više ovu poruku", + "documentation": "Dokumentacija", "done": "Gotovo", "download": "Preuzmi", "download_include_embedded_motion_videos": "Ugrađeni videozapisi", @@ -1082,6 +1084,7 @@ "say_something": "Reci nešto", "scan_all_libraries": "Skeniraj sve Knjižnice", "scan_all_library_files": "Ponovno skenirajte sve datoteke Knjižnice", + "scan_library": "Skeniraj", "scan_new_library_files": "Skeniraj nove datoteke Knjižnice", "scan_settings": "Postavke skeniranja", "scanning_for_album": "Skeniranje albuma...", @@ -1102,49 +1105,56 @@ "search_places": "Traži mjesta", "search_settings": "Postavke pretraživanja", "search_state": "", - "search_timezone": "", + "search_timezone": "Pretraži vremenske zone", "search_type": "", "search_your_photos": "", "searching_locales": "", "second": "", "select_album_cover": "", - "select_all": "", + "select_all": "Odaberi sve", + "select_all_duplicates": "Odaberi sve duplikate", "select_avatar_color": "", - "select_face": "", + "select_face": "Odaberi lice", "select_featured_photo": "", "select_keep_all": "", "select_library_owner": "", "select_new_face": "", "select_photos": "", "select_trash_all": "", - "selected": "", + "selected": "Odabrano", "send_message": "", - "send_welcome_email": "", + "send_welcome_email": "Pošalji email dobrodošlice", "server": "", - "server_stats": "", - "set": "", + "server_offline": "Server izvan mreže", + "server_online": "Server na mreži", + "server_stats": "Statistike servera", + "server_version": "Verzija servera", + "set": "Postavi", "set_as_album_cover": "", - "set_as_profile_picture": "", - "set_date_of_birth": "", - "set_profile_picture": "", + "set_as_profile_picture": "Postavi kao profilnu sliku", + "set_date_of_birth": "Postavi datum rođenja", + "set_profile_picture": "Postavi profilnu sliku", "set_slideshow_to_fullscreen": "", - "settings": "", - "settings_saved": "", - "share": "", - "shared": "", - "shared_by": "", - "shared_by_you": "", - "shared_from_partner": "", + "settings": "Postavke", + "settings_saved": "Postavke su spremljene", + "share": "Podijeli", + "shared": "Podijeljeno", + "shared_by": "Podijelio", + "shared_by_user": "Podijelio {user}", + "shared_by_you": "Podijelili vi", + "shared_from_partner": "Fotografije od {partner}", "shared_links": "", "shared_with_partner": "", "sharing": "", "sharing_sidebar_description": "", "show_album_options": "", - "show_and_hide_people": "", - "show_file_location": "", - "show_gallery": "", - "show_hidden_people": "", - "show_in_timeline": "", + "show_albums": "Prikaži albume", + "show_all_people": "Prikaži sve osobe", + "show_and_hide_people": "Prikaži i sakrij osobe", + "show_file_location": "Pokaži mjesto datoteke", + "show_gallery": "Prikaži galeriju", + "show_hidden_people": "Prikaži skrivene osobe", + "show_in_timeline": "Prikaži na vremenskoj crti", "show_in_timeline_setting_description": "", "show_keyboard_shortcuts": "", "show_metadata": "", diff --git a/i18n/hu.json b/i18n/hu.json index 4bde75b5ef7fa..525275efc676d 100644 --- a/i18n/hu.json +++ b/i18n/hu.json @@ -34,6 +34,11 @@ "authentication_settings_disable_all": "Biztosan letiltod az összes bejelentkezési módot? A bejelentkezés teljesen le lesz tiltva.", "authentication_settings_reenable": "Az újbóli engedélyezéshez használj egySzerver Parancsot.", "background_task_job": "Háttérfeladatok", + "backup_database": "Tartalék Adatbázis", + "backup_database_enable_description": "Adatbázis biztonsági mentések engedélyezése", + "backup_keep_last_amount": "Megőrizendő korábbi biztonsági mentések száma", + "backup_settings": "Biztonsági mentés beállításai", + "backup_settings_description": "Adatbázis mentési beállításainak kezelése", "check_all": "Összes Kipiálása", "cleared_jobs": "{job}: feladatai törölve", "config_set_by_file": "A konfigurációt jelenleg egy konfigurációs fájl állítja be", @@ -43,6 +48,9 @@ "confirm_reprocess_all_faces": "Biztos vagy benne, hogy újra fel szeretnéd dolgozni az összes arcot? Ez a már elnevezett személyeket is törli.", "confirm_user_password_reset": "Biztosan vissza szeretnéd állítani {user} jelszavát?", "create_job": "Feladat létrehozása", + "cron_expression": "Cron kifejezés", + "cron_expression_description": "A beolvasási időköz beállítása a cron formátummal. További információért lásd pl. Crontab Guru", + "cron_expression_presets": "Cron kifejezés előbeállítások", "crontab_guru": "Crontab Guru", "disable_login": "Belépés letiltása", "disabled": "Letiltva", diff --git a/i18n/id.json b/i18n/id.json index 6b9a352dc8834..0aa3e408c7477 100644 --- a/i18n/id.json +++ b/i18n/id.json @@ -34,6 +34,11 @@ "authentication_settings_disable_all": "Anda yakin untuk menonaktifkan semua cara login? Login akan dinonaktikan secara menyeluruh.", "authentication_settings_reenable": "Untuk mengaktifkan ulang, gunakan Perintah Server.", "background_task_job": "Tugas Latar Belakang", + "backup_database": "Basis Data Cadangan", + "backup_database_enable_description": "Aktifkan pencadangan basis data", + "backup_keep_last_amount": "Jumlah cadangan untuk disimpan", + "backup_settings": "Pengaturan Pencadangan", + "backup_settings_description": "Kelola pengaturan pencadangan basis data", "check_all": "Periksa Semua", "cleared_jobs": "Tugas terselesaikan untuk: {job}", "config_set_by_file": "Konfigurasi saat ini ditetapkan oleh berkas konfigurasi", @@ -43,6 +48,9 @@ "confirm_reprocess_all_faces": "Apakah Anda yakin ingin memproses semua wajah? Ini juga akan menghapus nama orang.", "confirm_user_password_reset": "Apakah Anda yakin ingin mengatur ulang kata sandi {user}?", "create_job": "Buat tugas", + "cron_expression": "Ekspresi cron", + "cron_expression_description": "Tetapkan interval pemindaian menggunakan format cron. Untuk informasi lebih lanjut, silakan merujuk misalnya ke Crontab Guru", + "cron_expression_presets": "Prasetel ekspresi cron", "disable_login": "Nonaktifkan log masuk", "duplicate_detection_job_description": "Jalankan pembelajaran mesin pada aset untuk mendeteksi gambar yang serupa. Bergantung pada Pencarian Pintar", "exclusion_pattern_description": "Pola pengecualian memungkinkan Anda mengabaikan berkas dan folder ketika memindai pustaka Anda. Ini berguna jika Anda memiliki folder yang berisi berkas yang tidak ingin diimpor, seperti berkas RAW.", diff --git a/i18n/ko.json b/i18n/ko.json index d3fd6c9022389..74c919a715aa6 100644 --- a/i18n/ko.json +++ b/i18n/ko.json @@ -27,13 +27,18 @@ "added_to_favorites": "즐겨찾기에 추가되었습니다.", "added_to_favorites_count": "즐겨찾기에 항목 {count, number}개 추가됨", "admin": { - "add_exclusion_pattern_description": "규칙에 *, ** 및 ? 를 사용할 수 있습니다. \"Raw\" 디렉터리의 모든 파일을 제외하려면 **/Raw/**를, \".tif\"로 끝나는 파일을 제외하려면 **/*.tif를 사용합니다. 절대 경로는 /path/to/ignore/** 와 같은 방식으로 사용하세요.", - "asset_offline_description": "이 외부 라이브러리 항목을 디스크에서 찾을 수 없어 휴지통으로 이동되었습니다. 라이브러리 내에서 파일이 이동된 경우 해당하는 새 항목을 타임라인에서 확인하세요. 이 항목을 복원하려면 파일 경로에 Immich가 접근할 수 있는지 확인한 후, 라이브러리 스캔을 진행하세요.", + "add_exclusion_pattern_description": "규칙에 *, ** 및 ? 를 사용할 수 있습니다. 이름이 \"Raw\"인 디렉터리의 모든 파일을 제외하려면 \"**/Raw/**\"를, \".tif\"로 끝나는 모든 파일을 제외하려면 \"**/*.tif\"를 사용하고, 절대 경로의 경우 \"/path/to/ignore/**\"와 같은 방식으로 사용합니다.", + "asset_offline_description": "외부 라이브러리에 포함된 이 항목을 디스크에서 더이상 찾을 수 없어 휴지통으로 이동되었습니다. 파일이 라이브러리 내에서 이동된 경우 타임라인에서 새로 연결된 항목을 확인하세요. 이 항목을 복원하려면 아래 파일 경로에 Immich가 접근할 수 있는지 확인하고 라이브러리 스캔을 진행하세요.", "authentication_settings": "인증 설정", "authentication_settings_description": "비밀번호, OAuth 및 기타 인증 설정 관리", "authentication_settings_disable_all": "로그인 기능을 모두 비활성화하시겠습니까? 로그인하지 않아도 서버에 접근할 수 있습니다.", "authentication_settings_reenable": "다시 활성화하려면 서버 커맨드를 사용하세요.", "background_task_job": "백그라운드 작업", + "backup_database": "데이터베이스 백업", + "backup_database_enable_description": "데이터베이스 백업 활성화", + "backup_keep_last_amount": "보관할 백업의 개수", + "backup_settings": "백업 설정", + "backup_settings_description": "데이터베이스 백업 설정 관리", "check_all": "모두 확인", "cleared_jobs": "작업 중단: {job}", "config_set_by_file": "현재 설정은 구성 파일에 의해 관리됩니다.", @@ -43,28 +48,31 @@ "confirm_reprocess_all_faces": "모든 얼굴을 다시 처리하시겠습니까? 이름이 지정된 인물을 포함한 모든 인물이 삭제됩니다.", "confirm_user_password_reset": "{user}님의 비밀번호를 재설정하시겠습니까?", "create_job": "작업 생성", + "cron_expression": "Cron 표현식", + "cron_expression_description": "Cron 형식을 사용하여 스캔 주기를 설정합니다. 자세한 내용과 예시는 Crontab Guru를 참조하세요.", + "cron_expression_presets": "Cron 표현식 사전 설정", "crontab_guru": "Crontab Guru", "disable_login": "로그인 비활성화", "disabled": "비활성화", "duplicate_detection_job_description": "기계 학습을 통해 유사한 이미지를 감지합니다. 스마트 검색이 활성화되어 있어야 합니다.", - "exclusion_pattern_description": "제외 규칙을 사용하면 스캔 중 특정 파일과 폴더를 제외할 수 있습니다. 가져오고 싶지 않은 파일(RAW 파일 등)이 존재하는 경우 유용합니다.", + "exclusion_pattern_description": "제외 규칙을 사용하여 라이브러리 스캔 시 특정 파일과 폴더를 제외할 수 있습니다. 폴더에 원하지 않는 파일(RAW 파일 등)이 존재하는 경우 유용합니다.", "external_library_created_at": "외부 라이브러리 ({date}에 생성됨)", "external_library_management": "외부 라이브러리 관리", "face_detection": "얼굴 감지", - "face_detection_description": "기계 학습을 통해 항목에 존재하는 얼굴을 감지합니다. 동영상의 경우 섬네일만 사용합니다. \"새로고침\"은 이미 처리된 항목을 포함한 모든 항목 다시 처리합니다. \"초기화\"는 모든 얼굴 데이터를 삭제합니다. \"누락\"은 처리되지 않은 항목을 대기열에 추가합니다. 얼굴 감지 작업이 완료된 후 얼굴 인식 작업을 진행하여 얼굴을 기존 인물이나 새 인물로 그룹화합니다.", - "facial_recognition_job_description": "감지된 얼굴을 인물로 그룹화합니다. 이 작업은 얼굴 감지 작업이 완료된 후 진행됩니다. \"초기화\"는 모든 얼굴의 그룹화를 다시 진행합니다. \"누락\"은 그룹화가 완료되지 않은 얼굴을 대기열에 추가합니다.", + "face_detection_description": "기계 학습을 통해 항목에 존재하는 얼굴을 감지합니다. 동영상의 경우 섬네일만 사용합니다. \"새로고침\"은 이미 처리된 항목을 포함한 모든 항목을 다시 처리합니다. \"초기화\"는 모든 얼굴 데이터를 삭제합니다. \"누락\"은 처리되지 않은 항목을 대기열에 추가합니다. 얼굴 감지 작업이 완료되면 얼굴 인식 작업이 진행되어 감지된 얼굴을 기존 인물이나 새 인물로 그룹화합니다.", + "facial_recognition_job_description": "감지된 얼굴을 인물로 그룹화합니다. 이 작업은 얼굴 감지 작업이 완료된 후 진행됩니다. \"초기화\"는 모든 얼굴의 그룹화를 다시 진행합니다. \"누락\"은 그룹화되지 않은 얼굴을 대기열에 추가합니다.", "failed_job_command": "{job} 작업에서 {command} 실패", "force_delete_user_warning": "경고: 사용자 및 사용자가 업로드한 모든 항목이 즉시 삭제됩니다. 이 작업은 되돌릴 수 없으며 파일을 복구할 수 없습니다.", - "forcing_refresh_library_files": "모든 파일을 다시 스캔하는 중...", + "forcing_refresh_library_files": "라이브러리의 모든 파일을 다시 스캔하는 중...", "image_format": "형식", "image_format_description": "WebP는 JPEG보다 파일 크기가 작지만 변환에 더 많은 시간이 소요됩니다.", "image_prefer_embedded_preview": "포함된 미리 보기 선호", "image_prefer_embedded_preview_setting_description": "가능한 경우 이미지 처리 시 RAW 사진에 포함된 미리 보기를 사용합니다. 포함된 미리 보기는 카메라에서 생성된 것으로 카메라마다 품질이 다릅니다. 일부 이미지의 경우 더 정확한 색상이 표현될 수 있지만 반대로 더 많은 아티팩트가 있을 수도 있습니다.", "image_prefer_wide_gamut": "넓은 색 영역 선호", "image_prefer_wide_gamut_setting_description": "섬네일 이미지에 Display P3을 사용합니다. 많은 색상을 표현할 수 있어 더 정확한 표현이 가능하지만, 오래된 브라우저를 사용하는 경우 이미지가 다르게 보일 수 있습니다. 색상 왜곡을 방지하기 위해 sRGB 이미지는 이 설정이 적용되지 않습니다.", - "image_preview_description": "메타데이터를 제거한 중간 크기 이미지, 한장씩 볼때나 기계학습에 사용됨", + "image_preview_description": "메타데이터를 제거한 중간 크기의 이미지, 단일 항목을 보는 경우 및 기계 학습에 사용됨", "image_preview_format": "미리 보기 형식", - "image_preview_quality_description": "1부터 100 사이의 미리보기 품질. 값이 높을수록 좋지만 파일 크기가 커져 앱의 반응성이 떨어질 수 있습니다. 또한 값이 낮으면 기계 학습의 품질이 떨어질 수 있습니다.", + "image_preview_quality_description": "1부터 100 사이의 미리보기 품질. 값이 높을수록 좋지만 파일 크기가 커져 앱의 반응성이 떨어질 수 있으며, 값이 낮으면 기계 학습의 품질이 떨어질 수 있습니다.", "image_preview_resolution": "미리 보기 해상도", "image_preview_resolution_description": "사진을 보거나 기계 학습을 실행할 때 사용되는 사진의 해상도를 설정합니다. 높은 해상도를 선택하면 세부 묘사의 손실을 최소화할 수 있지만, 인코딩 시간과 파일 크기가 증가하여 앱의 반응 속도가 느려질 수 있습니다.", "image_preview_title": "미리보기 설정", @@ -102,38 +110,38 @@ "library_tasks_description": "라이브러리 구성 및 확인 작업 수행", "library_watching_enable_description": "외부 라이브러리의 파일 변경 감시", "library_watching_settings": "라이브러리 감시 (실험 기능)", - "library_watching_settings_description": "변경된 파일을 자동으로 감지", - "logging_enable_description": "로깅 활성화", - "logging_level_description": "로깅이 활성화된 경우 사용할 로그 레벨을 선택합니다.", - "logging_settings": "로깅", + "library_watching_settings_description": "파일 변겅을 자동으로 감지", + "logging_enable_description": "로그 기록 활성화", + "logging_level_description": "활성화된 경우 사용할 로그 레벨을 선택합니다.", + "logging_settings": "로그 설정", "machine_learning_clip_model": "CLIP 모델", - "machine_learning_clip_model_description": "CLIP 모델의 종류는 이곳을 참조하세요. 한국어로 검색하려면 Multilingual CLIP 모델을 선택하세요. 변경 후 모든 항목에 대한 스마트 검색 작업을 다시 진행해야 합니다.", + "machine_learning_clip_model_description": "CLIP 모델의 종류는 이곳을 참조하세요. 한국어 등 다국어 검색을 사용하려면 Multilingual CLIP 모델을 선택하세요. 모델을 변경한 후 모든 항목에 대한 스마트 검색 작업을 다시 진행해야 합니다.", "machine_learning_duplicate_detection": "비슷한 항목 감지", "machine_learning_duplicate_detection_enabled": "비슷한 항목 감지 활성화", - "machine_learning_duplicate_detection_enabled_description": "비활성화된 경우에도 완전히 일치하는 항목은 여전히 감지됩니다.", + "machine_learning_duplicate_detection_enabled_description": "비활성화된 경우에도 완전히 동일한 항목은 중복 제거됩니다.", "machine_learning_duplicate_detection_setting_description": "CLIP 임베딩을 사용하여 비슷한 항목 찾기", "machine_learning_enabled": "기계 학습 활성화", - "machine_learning_enabled_description": "비활성화하는 경우 기계 학습 설정 여부와 관계없이 모든 기계 학습 기능이 비활성화됩니다.", + "machine_learning_enabled_description": "비활성화된 경우 아래 설정 여부와 관계없이 모든 기계 학습 기능이 비활성화됩니다.", "machine_learning_facial_recognition": "얼굴 인식", "machine_learning_facial_recognition_description": "이미지에서 얼굴 감지, 인식 및 그룹화", "machine_learning_facial_recognition_model": "얼굴 인식 모델", - "machine_learning_facial_recognition_model_description": "크기에 따라 내림차순으로 나열됩니다. 크기가 큰 모델은 느리고 메모리를 많이 사용하지만 더 나은 결과를 생성합니다. 변경 후 모든 항목의 얼굴 감지 작업을 다시 진행해야 합니다.", + "machine_learning_facial_recognition_model_description": "크기에 따라 내림차순으로 나열됩니다. 크기가 큰 모델은 느리고 메모리를 많이 사용하지만 더 나은 결과를 보입니다. 모델을 변경한 이후 모든 항목의 얼굴 감지 작업을 다시 진행해야 합니다.", "machine_learning_facial_recognition_setting": "얼굴 인식 활성화", "machine_learning_facial_recognition_setting_description": "비활성화된 경우 이미지에서 얼굴 인식을 진행하지 않으며, 탐색 페이지에 인물 목록이 표시되지 않습니다.", "machine_learning_max_detection_distance": "최대 감지 거리", "machine_learning_max_detection_distance_description": "두 이미지를 유사한 이미지로 간주하는 거리의 최댓값을 0.001에서 0.1 사이로 설정합니다. 값이 높으면 민감도가 낮아져 유사한 이미지로 감지하는 비율이 높아지나, 잘못된 결과를 보일 수 있습니다.", "machine_learning_max_recognition_distance": "최대 인식 거리", - "machine_learning_max_recognition_distance_description": "두 얼굴을 동일한 인물로 판단하는 거리의 최댓값을 0에서 2 사이로 설정합니다. 이 값을 낮추면 다른 인물을 동일한 인물로 판단하는 것을 방지할 수 있고, 값을 높이면 동일한 인물을 다른 인물로 판단하는 것을 방지할 수 있습니다. 두 인물을 병합하는 것이 하나의 인물을 둘로 나누는 것보다 쉽기에, 가능한 낮은 임계값을 사용하세요.", - "machine_learning_min_detection_score": "최소 탐지 점수", - "machine_learning_min_detection_score_description": "감지된 얼굴의 최소 신뢰 점수를 0에서 1 사이로 설정합니다. 값이 낮으면 많은 얼굴을 감지하지만 잘못된 결과를 보일 수 있습니다.", + "machine_learning_max_recognition_distance_description": "두 얼굴을 동일인으로 인식하는 거리의 최댓값을 0에서 2 사이로 설정합니다. 이 값을 낮추면 다른 인물을 동일인으로 인식하는 것을 방지할 수 있고, 값을 높이면 동일인을 다른 인물로 인식하는 것을 방지할 수 있습니다. 두 인물을 병합하는 것이 한 인물을 두 명으로 분리하는 것보다 쉬우므로, 가능한 낮은 임계값을 사용하세요.", + "machine_learning_min_detection_score": "최소 신뢰도 점수", + "machine_learning_min_detection_score_description": "감지된 얼굴의 최소 신뢰도 점수를 0에서 1 사이로 설정합니다. 값이 낮으면 많은 얼굴을 감지하지만 잘못된 결과를 보일 수 있습니다.", "machine_learning_min_recognized_faces": "최소 인식 얼굴", - "machine_learning_min_recognized_faces_description": "얼굴을 인식하여 인물을 생성하기 위한 최소 인식 얼굴 수를 설정합니다. 값이 높으면 얼굴 인식이 정확해지지만, 감지된 얼굴이 인물로 그룹화되지 않을 가능성이 증가합니다.", + "machine_learning_min_recognized_faces_description": "인물을 생성하기 위해 인식할 얼굴 수의 최솟값을 설정합니다. 값이 높으면 얼굴 인식이 정확해지지만 감지된 얼굴이 인물에 할당되지 않을 가능성이 증가합니다.", "machine_learning_settings": "기계 학습 설정", "machine_learning_settings_description": "기계 학습 기능 및 설정 관리", "machine_learning_smart_search": "스마트 검색", - "machine_learning_smart_search_description": "CLIP 임베딩을 사용하여 이미지 자연어 검색 지원", + "machine_learning_smart_search_description": "CLIP 임베딩으로 자연어를 사용하여 이미지 검색", "machine_learning_smart_search_enabled": "스마트 검색 활성화", - "machine_learning_smart_search_enabled_description": "비활성화 시 스마트 검색을 위한 이미지 처리를 진행하지 않습니다.", + "machine_learning_smart_search_enabled_description": "비활성화된 경우 스마트 검색을 위한 이미지 처리를 진행하지 않습니다.", "machine_learning_url_description": "기계 학습 서버 URL", "manage_concurrency": "동시성 관리", "manage_log_settings": "로그 설정 관리", @@ -141,7 +149,7 @@ "map_enable_description": "지도 기능 활성화", "map_gps_settings": "지도 및 GPS 설정", "map_gps_settings_description": "지도 및 GPS (역지오코딩) 설정 관리", - "map_implications": "지도 기능은 외부 타일 서비스(tiles.immich.clou를 사용합니다.", + "map_implications": "지도 기능은 외부 타일 서비스(tiles.immich.cloud)에 의존합니다.", "map_light_style": "라이트 스타일", "map_manage_reverse_geocoding_settings": "역지오코딩 설정 관리", "map_reverse_geocoding": "역지오코딩", @@ -162,7 +170,7 @@ "no_pattern_added": "추가된 규칙 없음", "note_apply_storage_label_previous_assets": "참고: 이전에 업로드한 항목에도 스토리지 레이블을 적용하려면 다음을 실행합니다,", "note_cannot_be_changed_later": "주의: 추후 변경할 수 없습니다!", - "note_unlimited_quota": "참고: 할당량을 설정하지 않으려면 0을 입력하세요.", + "note_unlimited_quota": "참고: 무제한 할당량의 경우 0을 입력하세요.", "notification_email_from_address": "보낸 사람 이메일", "notification_email_from_address_description": "보낸 사람의 이메일 주소, 예: \"Immich Photo Server \"", "notification_email_host_description": "이메일 서버의 호스트 (예: smtp.immich.app)", @@ -203,7 +211,7 @@ "oauth_storage_quota_claim": "스토리지 할당량 선택", "oauth_storage_quota_claim_description": "스토리지 할당량을 사용자가 입력한 값으로 자동 설정합니다.", "oauth_storage_quota_default": "스토리지 할당량 기본값 (GiB)", - "oauth_storage_quota_default_description": "입력하지 않은 경우 사용할 GiB 단위의 기본 할당량 (할당량을 설정하지 않으려면 0 입력)", + "oauth_storage_quota_default_description": "입력하지 않은 경우 사용할 GiB 단위의 기본 할당량 (무제한 할당량의 경우 0 입력)", "offline_paths": "누락된 파일", "offline_paths_description": "외부 라이브러리의 항목이 아닌 파일을 수동으로 삭제한 경우 발생할 수 있습니다.", "password_enable_description": "이메일과 비밀번호로 로그인", @@ -213,11 +221,11 @@ "person_cleanup_job": "인물 정리", "quota_size_gib": "할당량 (GiB)", "refreshing_all_libraries": "모든 라이브러리 다시 스캔 중...", - "registration": "관리자 가입", - "registration_description": "첫 번째 사용자이기 때문에 관리자로 지정되었습니다. 관리 작업 및 사용자 생성이 가능합니다.", + "registration": "관리자 계정 생성", + "registration_description": "첫 번째로 생성되는 사용자는 관리자 권한을 부여받으며, 관리 및 사용자 생성이 가능합니다.", "removing_deleted_files": "누락된 파일을 제거하는 중...", "repair_all": "모두 수리", - "repair_matched_items": "동일한 항목 {count, plural, one {#개} other {#개}}를 확인했습니다.", + "repair_matched_items": "동일 항목 {count, plural, one {#개} other {#개}}를 확인했습니다.", "repaired_items": "항목 {count, plural, one {#개} other {#개}}를 수리했습니다.", "require_password_change_on_login": "첫 로그인 시 비밀번호 변경 요구", "reset_settings_to_default": "설정을 기본값으로 복원", @@ -232,10 +240,10 @@ "server_settings": "서버 설정", "server_settings_description": "서버 설정 관리", "server_welcome_message": "환영 메시지", - "server_welcome_message_description": "로그인 페이지에 표시되는 메시지를 설정합니다.", + "server_welcome_message_description": "로그인 페이지에 표시되는 메시지입니다.", "sidecar_job": "사이드카 메타데이터", "sidecar_job_description": "파일 시스템에서 사이드카 메타데이터 파일 탐색 및 동기화", - "slideshow_duration_description": "각 사진을 표시할 초 단위의 시간", + "slideshow_duration_description": "개별 사진이 표시되는 초 단위의 시간", "smart_search_job_description": "기계 학습을 진행하여 스마트 검색 기능 지원", "storage_template_date_time_description": "항목이 생성된 날짜의 타임스탬프를 날짜 및 시간 정보로 사용합니다.", "storage_template_date_time_sample": "시간 형식 예: {date}", @@ -258,7 +266,7 @@ "theme_custom_css_settings_description": "Immich에 적용할 사용자 정의 CSS(Cascading Style Sheets) 설정", "theme_settings": "테마 설정", "theme_settings_description": "Immich 웹 인터페이스 사용자 정의", - "these_files_matched_by_checksum": "동일한 체크섬을 가진 파일 목록입니다.", + "these_files_matched_by_checksum": "체크섬이 동일한 파일 목록입니다.", "thumbnail_generation_job": "섬네일 생성", "thumbnail_generation_job_description": "각 항목에 대한 큰 섬네일, 작은 섬네일, 흐린 섬네일 및 인물 섬네일 생성", "transcode_policy_description": "", @@ -278,7 +286,7 @@ "transcoding_audio_codec": "오디오 코덱", "transcoding_audio_codec_description": "Opus는 가장 좋은 품질의 옵션이지만 기기 및 소프트웨어가 오래된 경우 호환되지 않을 수 있습니다.", "transcoding_bitrate_description": "최대 비트레이트를 초과하는 동영상 또는 허용되지 않는 형식의 동영상", - "transcoding_codecs_learn_more": "이곳에서 사용되는 용어에 대한 자세한 내용은 FFmpeg 문서의 H.264 코덱, HEVC 코덱VP9 코덱을 참조하세요.", + "transcoding_codecs_learn_more": "여기에서 사용되는 용어에 대한 자세한 내용은 FFmpeg 문서의 H.264 코덱, HEVC 코덱VP9 코덱 항목을 참조하세요.", "transcoding_constant_quality_mode": "Constant quality mode", "transcoding_constant_quality_mode_description": "ICQ는 CQP보다 나은 성능을 보이나 일부 기기의 하드웨어 가속에서 지원되지 않을 수 있습니다. 이 옵션을 설정하면 품질 기반 인코딩 시 지정된 모드를 우선적으로 사용합니다. NVENC에서는 ICQ를 지원하지 않아 이 설정이 적용되지 않습니다.", "transcoding_constant_rate_factor": "Constant rate factor (-crf)", @@ -386,7 +394,7 @@ "allow_public_user_to_upload": "모든 사용자의 업로드 허용", "anti_clockwise": "반시계 방향", "api_key": "API 키", - "api_key_description": "이 값은 한 번만 표시됩니다. 창을 닫기 전 반드시 복사하세요.", + "api_key_description": "이 값은 한 번만 표시됩니다. 창을 닫기 전 반드시 복사해주세요.", "api_key_empty": "키 이름은 비어 있을 수 없습니다.", "api_keys": "API 키", "app_settings": "앱 설정", @@ -458,7 +466,7 @@ "change_password": "비밀번호 변경", "change_password_description": "첫 로그인이거나 비밀번호가 초기화되어 비밀번호를 설정해야 합니다. 아래에 새 비밀번호를 입력하세요.", "change_your_password": "비밀번호 변경", - "changed_visibility_successfully": "숨김 여부가 성공적으로 변경되었습니다.", + "changed_visibility_successfully": "표시 여부가 성공적으로 변경되었습니다.", "check_all": "모두 확인", "check_logs": "로그 확인", "choose_matching_people_to_merge": "병합할 인물 선택", @@ -549,7 +557,7 @@ "display_order": "표시 순서", "display_original_photos": "원본 이미지 표시", "display_original_photos_setting_description": "원본 사진이 웹과 호환되는 경우 섬네일 대신 원본을 표시합니다. 사진이 표시되는 속도가 느려질 수 있습니다.", - "do_not_show_again": "다시 표시하지 않음", + "do_not_show_again": "이 메시지를 다시 표시하지 않음", "documentation": "문서", "done": "완료", "download": "다운로드", @@ -572,24 +580,24 @@ }, "edit": "편집", "edit_album": "앨범 수정", - "edit_avatar": "프로필 편집", + "edit_avatar": "프로필 수정", "edit_date": "날짜 변경", "edit_date_and_time": "날짜 및 시간 변경", - "edit_exclusion_pattern": "제외 규칙 편집", - "edit_faces": "인물 변경", - "edit_import_path": "가져올 경로 편집", - "edit_import_paths": "가져올 경로 편집", + "edit_exclusion_pattern": "제외 규칙 수정", + "edit_faces": "얼굴 수정", + "edit_import_path": "가져올 경로 수정", + "edit_import_paths": "가져올 경로 수정", "edit_key": "키 수정", - "edit_link": "링크 편집", + "edit_link": "링크 수정", "edit_location": "위치 변경", "edit_name": "이름 변경", - "edit_people": "인물 변경", - "edit_tag": "태그 편집", + "edit_people": "인물 수정", + "edit_tag": "태그 수정", "edit_title": "제목 변경", "edit_user": "사용자 수정", "edited": "공유 링크가 수정되었습니다.", "editor": "편집자", - "editor_close_without_save_prompt": "변경 사항이 반영되지 않습니다.", + "editor_close_without_save_prompt": "변경 사항이 저장되지 않습니다.", "editor_close_without_save_title": "편집을 종료하시겠습니까?", "editor_crop_tool_h2_aspect_ratios": "종횡비", "editor_crop_tool_h2_rotation": "회전", @@ -597,7 +605,7 @@ "empty": "", "empty_album": "", "empty_trash": "휴지통 비우기", - "empty_trash_confirmation": "휴지통을 비우시겠습니까? 휴지통에 있는 모든 항목이 Immich에서 영구적으로 제거됩니다. 이 작업은 되돌릴 수 없습니다!", + "empty_trash_confirmation": "휴지통을 비우시겠습니까? 휴지통에 있는 모든 항목이 Immich에서 영구적으로 삭제됩니다. 이 작업은 되돌릴 수 없습니다!", "enable": "활성화", "enabled": "활성화됨", "end_date": "종료일", @@ -609,29 +617,29 @@ "cannot_navigate_previous_asset": "이전 항목으로 이동할 수 없습니다.", "cant_apply_changes": "변경 사항을 적용할 수 없습니다.", "cant_change_activity": "활동을 {enabled, select, true {비활성화} other {활성화}}할 수 없습니다.", - "cant_change_asset_favorite": "즐겨찾기를 변경할 수 없습니다.", + "cant_change_asset_favorite": "즐겨찾기에 추가/제거할 수 없습니다.", "cant_change_metadata_assets_count": "항목 {count, plural, one {#개} other {#개}}의 메타데이터를 변경할 수 없습니다.", "cant_get_faces": "얼굴을 불러올 수 없음", "cant_get_number_of_comments": "댓글 수를 불러올 수 없음", "cant_search_people": "인물을 검색할 수 없음", "cant_search_places": "장소를 검색할 수 없음", "cleared_jobs": "{job} 작업 중단됨", - "error_adding_assets_to_album": "앨범에 항목을 추가하는 중 문제가 발생했습니다.", - "error_adding_users_to_album": "앨범에 사용자를 추가하는 중 문제가 발생했습니다.", - "error_deleting_shared_user": "공유한 사용자를 제거하는 중 문제가 발생했습니다.", - "error_downloading": "{filename} 다운로드 중 문제가 발생했습니다.", - "error_hiding_buy_button": "구매 버튼을 숨기는 중 문제가 발생했습니다.", - "error_removing_assets_from_album": "앨범에서 항목을 제거하는 중 문제가 발생했습니다. 콘솔에서 세부 정보를 확인하세요.", - "error_selecting_all_assets": "모든 항목을 선택하는 중 문제가 발생했습니다.", + "error_adding_assets_to_album": "앨범에 항목을 추가하던 중 오류가 발생했습니다.", + "error_adding_users_to_album": "앨범에 사용자를 추가하던 중 오류가 발생했습니다.", + "error_deleting_shared_user": "공유된 사용자를 제거하던 중 오류가 발생했습니다.", + "error_downloading": "{filename} 다운로드 오류", + "error_hiding_buy_button": "구매 버튼을 숨기던 중 오류가 발생했습니다.", + "error_removing_assets_from_album": "앨범에서 항목을 제거하던 중 오류가 발생했습니다. 콘솔에서 세부 정보를 확인하세요.", + "error_selecting_all_assets": "모든 항목을 선택하던 중 오류가 발생했습니다.", "exclusion_pattern_already_exists": "이 제외 규칙은 이미 존재합니다.", "failed_job_command": "{job} 작업 {command} 실패", "failed_to_create_album": "앨범을 생성하지 못했습니다.", "failed_to_create_shared_link": "공유 링크를 생성하지 못했습니다.", - "failed_to_edit_shared_link": "공유 링크를 편집하지 못했습니다.", - "failed_to_get_people": "인물을 불러오지 못했습니다.", - "failed_to_load_asset": "항목을 불러오지 못했습니다.", - "failed_to_load_assets": "항목을 불러오지 못했습니다.", - "failed_to_load_people": "인물을 불러오지 못했습니다.", + "failed_to_edit_shared_link": "공유 링크를 수정하지 못했습니다.", + "failed_to_get_people": "인물 로드 실패", + "failed_to_load_asset": "항목 로드 실패", + "failed_to_load_assets": "항목 로드 실패", + "failed_to_load_people": "인물 로드 실패", "failed_to_remove_product_key": "제품 키를 제거하지 못했습니다.", "failed_to_stack_assets": "스택을 만들지 못했습니다.", "failed_to_unstack_assets": "스택을 해제하지 못했습니다.", @@ -652,10 +660,10 @@ "unable_to_archive_unarchive": "{archived, select, true {보관함으로 항목을 이동할} other {보관함에서 항목을 제거할}} 수 없습니다.", "unable_to_change_album_user_role": "사용자의 역할을 변경할 수 없습니다.", "unable_to_change_date": "날짜를 변경할 수 없습니다.", - "unable_to_change_favorite": "즐겨찾기 상태를 변경할 수 없습니다.", + "unable_to_change_favorite": "즐겨찾기에 추가/제거할 수 없습니다.", "unable_to_change_location": "위치를 변경할 수 없습니다.", "unable_to_change_password": "비밀번호를 변경할 수 없습니다.", - "unable_to_change_visibility": "인물 {count, plural, one {#명} other {#명}}의 숨김 여부를 변경할 수 없습니다.", + "unable_to_change_visibility": "인물 {count, plural, one {#명} other {#명}}의 표시 여부를 변경할 수 없음", "unable_to_check_item": "", "unable_to_check_items": "", "unable_to_complete_oauth_login": "OAuth 로그인을 완료할 수 없습니다.", @@ -668,18 +676,18 @@ "unable_to_create_user": "사용자를 생성할 수 없습니다.", "unable_to_delete_album": "앨범을 삭제할 수 없습니다.", "unable_to_delete_asset": "항목을 삭제할 수 없습니다.", - "unable_to_delete_assets": "항목을 삭제하는 중 문제가 발생했습니다.", + "unable_to_delete_assets": "항목 삭제 중 오류 발생", "unable_to_delete_exclusion_pattern": "제외 규칙을 삭제할 수 없습니다.", - "unable_to_delete_import_path": "가져올 경로를 삭제할 수 없습니다.", + "unable_to_delete_import_path": "가져오기 경로를 삭제할 수 없습니다.", "unable_to_delete_shared_link": "공유 링크를 삭제할 수 없습니다.", "unable_to_delete_user": "사용자를 삭제할 수 없습니다.", "unable_to_download_files": "파일을 다운로드할 수 없습니다.", - "unable_to_edit_exclusion_pattern": "제외 규칙을 편집할 수 없습니다.", - "unable_to_edit_import_path": "가져올 경로를 편집할 수 없습니다.", + "unable_to_edit_exclusion_pattern": "제외 규칙을 수정할 수 없습니다.", + "unable_to_edit_import_path": "가져오기 경로를 수정할 수 없습니다.", "unable_to_empty_trash": "휴지통을 비울 수 없습니다.", "unable_to_enter_fullscreen": "전체 화면으로 전환할 수 없습니다.", - "unable_to_exit_fullscreen": "전체 화면을 종료할 수 없습니다.", - "unable_to_get_comments_number": "댓글의 개수를 불러올 수 없습니다.", + "unable_to_exit_fullscreen": "전체 화면에서 나갈 수 없습니다.", + "unable_to_get_comments_number": "댓글 수를 불러올 수 없습니다.", "unable_to_get_shared_link": "공유 링크를 불러오지 못했습니다.", "unable_to_hide_person": "인물을 숨길 수 없습니다.", "unable_to_link_motion_video": "모션 비디오를 연결할 수 없습니다", @@ -692,7 +700,7 @@ "unable_to_log_out_device": "기기에서 로그아웃할 수 없습니다.", "unable_to_login_with_oauth": "OAuth로 로그인할 수 없습니다.", "unable_to_play_video": "동영상을 재생할 수 없습니다.", - "unable_to_reassign_assets_existing_person": "항목을 {name, select, null {다른 인물에} other {#에}} 할당할 수 없습니다.", + "unable_to_reassign_assets_existing_person": "항목을 {name, select, null {다른 인물에게} other {{name}에게}} 할당할 수 없습니다.", "unable_to_reassign_assets_new_person": "항목을 새 인물에 할당할 수 없습니다.", "unable_to_refresh_user": "사용자를 새로 고칠 수 없습니다.", "unable_to_remove_album_users": "앨범에서 사용자를 제거할 수 없습니다.", @@ -708,7 +716,7 @@ "unable_to_reset_password": "비밀번호를 초기화할 수 없습니다.", "unable_to_resolve_duplicate": "비슷한 항목을 처리할 수 없습니다.", "unable_to_restore_assets": "항목을 복원할 수 없습니다.", - "unable_to_restore_trash": "휴지통을 복원할 수 없습니다.", + "unable_to_restore_trash": "휴지통에서 항목을 복원할 수 없음", "unable_to_restore_user": "사용자 삭제를 취소할 수 없습니다.", "unable_to_save_album": "앨범을 저장할 수 없습니다.", "unable_to_save_api_key": "API 키를 수정할 수 없습니다.", @@ -721,7 +729,7 @@ "unable_to_set_feature_photo": "대표 사진을 지정할 수 없습니다.", "unable_to_set_profile_picture": "프로필 사진을 설정할 수 없습니다.", "unable_to_submit_job": "작업을 수행할 수 없습니다.", - "unable_to_trash_asset": "휴지통으로 이동할 수 없습니다.", + "unable_to_trash_asset": "휴지통으로 항목을 이동할 수 없음", "unable_to_unlink_account": "계정 연결을 해제할 수 없습니다.", "unable_to_unlink_motion_video": "모션 비디오 연결을 해제할 수 없습니다.", "unable_to_update_album_cover": "앨범 커버를 변경할 수 없습니다.", @@ -729,7 +737,7 @@ "unable_to_update_library": "라이브러리를 업데이트할 수 없습니다.", "unable_to_update_location": "위치를 변경할 수 없습니다.", "unable_to_update_settings": "설정을 변경할 수 없습니다.", - "unable_to_update_timeline_display_status": "타임라인 표시 설정을 변경할 수 없습니다.", + "unable_to_update_timeline_display_status": "타임라인 표시 여부를 변경할 수 없습니다.", "unable_to_update_user": "사용자를 업데이트할 수 없습니다.", "unable_to_upload_file": "파일을 업로드할 수 없습니다." }, @@ -753,7 +761,7 @@ "face_unassigned": "알 수 없음", "failed_to_get_people": "인물 불러오기 실패", "favorite": "즐겨찾기", - "favorite_or_unfavorite_photo": "즐겨찾기 추가 및 제거", + "favorite_or_unfavorite_photo": "즐겨찾기 추가/제거", "favorites": "즐겨찾기", "feature": "", "feature_photo_updated": "대표 사진 업데이트됨", @@ -870,7 +878,7 @@ "longitude": "경도", "look": "보기", "loop_videos": "동영상 반복", - "loop_videos_description": "상세 보기에서 동영상을 자동으로 반복 재생합니다.", + "loop_videos_description": "상세 보기에서 자동으로 동영상을 반복 재생합니다.", "main_branch_warning": "현재 개발 버전을 사용 중입니다. 정식 버전을 사용하는 것을 강력히 권장합니다!", "make": "제조사", "manage_shared_links": "공유 링크 관리", @@ -893,10 +901,10 @@ "menu": "메뉴", "merge": "병합", "merge_people": "인물 병합", - "merge_people_limit": "한 번에 최대 5개의 얼굴만 병합할 수 있습니다.", + "merge_people_limit": "한 번에 최대 5개의 얼굴만 합칠 수 있습니다.", "merge_people_prompt": "인물들을 병합하시겠습니까? 이 작업은 되돌릴 수 없습니다.", - "merge_people_successfully": "인물을 성공적으로 병합했습니다.", - "merged_people_count": "인물 {count, plural, one {#명} other {#명}}을 병합했습니다.", + "merge_people_successfully": "인물을 성공적으로 합쳤습니다.", + "merged_people_count": "인물 {count, plural, one {#명} other {#명}}을 합쳤습니다.", "minimize": "최소화", "minute": "분", "missing": "누락", @@ -922,12 +930,12 @@ "no_albums_with_name_yet": "아직 해당하는 이름의 앨범이 없는 것 같습니다.", "no_albums_yet": "아직 앨범이 없는 것 같습니다.", "no_archived_assets_message": "사진과 동영상을 보관함으로 이동하여 목록에서 숨기기", - "no_assets_message": "이곳을 클릭하여 첫 이미지를 업로드하세요", + "no_assets_message": "여기를 클릭하여 첫 사진을 업로드하세요.", "no_duplicates_found": "비슷한 항목을 찾을 수 없습니다.", "no_exif_info_available": "EXIF 정보 없음", "no_explore_results_message": "더 많은 사진을 업로드하여 탐색 기능을 사용하세요.", "no_favorites_message": "즐겨찾기에 좋아하는 사진과 동영상을 추가하기", - "no_libraries_message": "외부 라이브러리를 생성하여 사진과 동영상 가져오기", + "no_libraries_message": "외부 라이브러리를 생성하여 기존 사진과 동영상을 확인하세요.", "no_name": "이름 없음", "no_places": "장소 없음", "no_results": "결과가 없습니다.", @@ -954,9 +962,9 @@ "onboarding_welcome_description": "몇 가지 일반적인 설정을 진행하겠습니다.", "onboarding_welcome_user": "{user}님, 환영합니다", "online": "온라인", - "only_favorites": "즐겨찾기만 표시", + "only_favorites": "즐겨찾기만", "only_refreshes_modified_files": "변경된 파일만 다시 스캔", - "open_in_map_view": "지도 뷰에서 보기", + "open_in_map_view": "지도 보기에서 열기", "open_in_openstreetmap": "OpenStreetMap에서 열기", "open_the_search_filters": "검색 필터 열기", "options": "옵션", @@ -990,7 +998,7 @@ "paused": "일시 정지됨", "pending": "진행 중", "people": "인물", - "people_edits_count": "인물 {count, plural, one {#명} other {#명}}을 변경했습니다.", + "people_edits_count": "인물 {count, plural, one {#명} other {#명}}을 수정했습니다.", "people_feature_description": "사진 및 동영상을 인물 그룹별로 탐색", "people_sidebar_description": "사이드바에 인물 링크 표시", "perform_library_tasks": "", @@ -1024,7 +1032,7 @@ "previous_memory": "이전 추억", "previous_or_next_photo": "이전 또는 다음 이미지로", "primary": "주요", - "privacy": "프라이버시", + "privacy": "개인 정보", "profile_image_of_user": "{user}님의 프로필 이미지", "profile_picture_set": "프로필 사진이 설정되었습니다.", "public_album": "공개 앨범", @@ -1042,7 +1050,7 @@ "purchase_button_select": "선택", "purchase_failed_activation": "등록하지 못했습니다. 이메일로 전송된 키를 정확히 입력했는지 확인하세요!", "purchase_individual_description_1": "개인 사용자용", - "purchase_individual_description_2": "서포터 배지 및 표시", + "purchase_individual_description_2": "서포터 배지", "purchase_individual_title": "개인", "purchase_input_suggestion": "제품 키를 보유하고 있나요? 아래에 제품 키를 입력하세요.", "purchase_license_subtitle": "Immich를 구매하여 지속적인 개발에 도움을 주세요.", @@ -1058,21 +1066,21 @@ "purchase_remove_server_product_key": "서버 제품 키 제거", "purchase_remove_server_product_key_prompt": "서버 제품 키를 제거하시겠습니까?", "purchase_server_description_1": "서버 전체에 적용", - "purchase_server_description_2": "서포터 배지 및 표시", + "purchase_server_description_2": "서포터 배지", "purchase_server_title": "서버", "purchase_settings_server_activated": "서버 제품 키는 관리자가 관리합니다.", "range": "", "rating": "등급", "rating_clear": "등급 초기화", "rating_count": "{count, plural, one {#점} other {#점}}", - "rating_description": "상세 정보에 EXIF의 등급 정보 표시", + "rating_description": "상세 정보 패널에 EXIF 등급 태그 표시", "raw": "", "reaction_options": "반응 옵션", "read_changelog": "변경 사항 보기", "reassign": "다시 할당", "reassigned_assets_to_existing_person": "항목 {count, plural, one {#개} other {#개}}가 {name, select, null {다른 인물에} other {{name}에}} 할당되었습니다.", "reassigned_assets_to_new_person": "항목 {count, plural, one {#개} other {#개}}가 새 인물에 할당되었습니다.", - "reassing_hint": "선택한 항목의 인물 변경", + "reassing_hint": "기존 인물에 선택한 항목 할당", "recent": "최근", "recent_searches": "최근 검색", "refresh": "새로고침", @@ -1083,8 +1091,8 @@ "refreshed": "새로고침이 완료되었습니다.", "refreshes_every_file": "기존 파일 및 새 파일 스캔", "refreshing_encoded_video": "인코딩을 다시 진행하는 중...", - "refreshing_faces": "얼굴 새로고침 중", - "refreshing_metadata": "메타데이터를 갱신하는 중...", + "refreshing_faces": "얼굴 새로고침 중...", + "refreshing_metadata": "메타데이터를 새로 고치는 중...", "regenerating_thumbnails": "섬네일을 다시 생성하는 중...", "remove": "제거", "remove_assets_album_confirmation": "앨범에서 항목 {count, plural, one {#개} other {#개}}를 제거하시겠습니까?", @@ -1103,14 +1111,14 @@ "removed_tagged_assets": "항목 {count, plural, one {#개} other {#개}}에서 태그를 제거함", "rename": "이름 바꾸기", "repair": "수리", - "repair_no_results_message": "추적되지 않거나 누락된 파일이 이곳에 표시됩니다.", + "repair_no_results_message": "추적되지 않거나 누락된 파일이 여기에 표시됩니다.", "replace_with_upload": "파일 바꾸기", "repository": "리포지터리", "require_password": "비밀번호 필요", "require_user_to_change_password_on_first_login": "사용자가 처음 로그인할 때 비밀번호를 변경하도록 요구", "reset": "초기화", "reset_password": "비밀번호 재설정", - "reset_people_visibility": "인물 숨김 여부 초기화", + "reset_people_visibility": "인물 표시 여부 초기화", "reset_settings_to_default": "", "reset_to_default": "기본값으로 복원", "resolve_duplicates": "비슷한 항목 확인", @@ -1209,12 +1217,12 @@ "show_and_hide_people": "인물 숨기기", "show_file_location": "파일 위치 표시", "show_gallery": "갤러리 표시", - "show_hidden_people": "숨긴 인물 표시", + "show_hidden_people": "숨겨진 인물 표시", "show_in_timeline": "타임라인에 표시", - "show_in_timeline_setting_description": "이 사용자의 사진 및 동영상을 타임라인에 표시", + "show_in_timeline_setting_description": "타임라인에 이 사용자의 사진과 동영상을 표시", "show_keyboard_shortcuts": "키보드 단축키 표시", "show_metadata": "메타데이터 표시", - "show_or_hide_info": "정보 표시 및 숨기기", + "show_or_hide_info": "정보 표시/숨기기", "show_password": "비밀번호 표시", "show_person_options": "인물 옵션 표시", "show_progress_bar": "진행 표시줄 표시", @@ -1224,7 +1232,7 @@ "show_supporter_badge_description": "서포터 배지 표시", "shuffle": "셔플", "sidebar": "사이드바", - "sidebar_display_description": "뷰 링크를 사이드바에 표시", + "sidebar_display_description": "보기 링크를 사이드바에 표시", "sign_out": "로그아웃", "sign_up": "로그인", "size": "크기", @@ -1297,7 +1305,7 @@ "trash_all": "모두 삭제", "trash_count": "{count, number}개 삭제", "trash_delete_asset": "휴지통 이동/삭제", - "trash_no_results_message": "휴지통으로 이동된 항목이 이곳에 표시됩니다.", + "trash_no_results_message": "삭제된 사진과 동영상이 여기에 표시됩니다.", "trashed_items_will_be_permanently_deleted_after": "휴지통으로 이동된 항목은 {days, plural, one {#일} other {#일}} 후 영구적으로 삭제됩니다.", "type": "형식", "unarchive": "보관함에서 제거", @@ -1326,7 +1334,7 @@ "updated_password": "비밀번호가 변경되었습니다.", "upload": "업로드", "upload_concurrency": "업로드 동시성", - "upload_errors": "업로드가 완료되었습니다. 항목 {count, plural, one {#개} other {#개}}는 업로드하지 못했습니다. 업로드된 항목을 보려면 페이지를 새로고침하세요.", + "upload_errors": "업로드가 완료되었습니다. 항목 {count, plural, one {#개} other {#개}}를 업로드하지 못했습니다. 업로드된 항목을 보려면 페이지를 새로고침하세요.", "upload_progress": "전체 {total, number}개 중 {processed, number}개 완료, {remaining, number}개 대기 중", "upload_skipped_duplicates": "동일한 항목 {count, plural, one {#개} other {#개}}를 건너뛰었습니다.", "upload_status_duplicates": "중복", @@ -1351,8 +1359,8 @@ "version": "버전", "version_announcement_closing": "당신의 친구, Alex가", "version_announcement_message": "안녕하세요, 새 버전의 Immich를 사용할 수 있습니다. 자세한 내용은 릴리스 노트를 참조하세요. WatchTower 등의 자동 업데이트 기능을 사용하는 경우 의도하지 않은 동작을 방지하기 위해 docker-compose.yml.env 구성이 최신인지 확인하세요.", - "version_history": "버전 히스토리", - "version_history_item": "버전 {version}, {date} 설치됨", + "version_history": "버전 기록", + "version_history_item": "{date} 버전 {version} 설치", "video": "동영상", "video_hover_setting": "마우스 오버 재생", "video_hover_setting_description": "마우스를 동영상 위에 올리면 재생이 시작됩니다. 비활성화된 경우에도 재생 아이콘에 마우스를 올리면 재생이 시작됩니다.", @@ -1363,12 +1371,12 @@ "view_all": "모두 보기", "view_all_users": "모든 사용자 보기", "view_in_timeline": "타임라인에서 보기", - "view_links": "링크 보기", + "view_links": "링크 확인", "view_next_asset": "다음 항목 보기", "view_previous_asset": "이전 항목 보기", "view_stack": "스택 보기", "viewer": "뷰어", - "visibility_changed": "인물 {count, plural, one {#명} other {#명}}의 숨김 여부가 변경되었습니다.", + "visibility_changed": "인물 {count, plural, one {#명} other {#명}}의 표시 여부가 변경됨", "waiting": "대기", "warning": "경고", "week": "주", @@ -1378,5 +1386,5 @@ "years_ago": "{years, plural, one {#년} other {#년}} 전", "yes": "네", "you_dont_have_any_shared_links": "생성한 공유 링크가 없습니다.", - "zoom_image": "확대" + "zoom_image": "이미지 확대" } diff --git a/i18n/lt.json b/i18n/lt.json index 399ef31c3e3fe..b148ccb8e1c05 100644 --- a/i18n/lt.json +++ b/i18n/lt.json @@ -50,6 +50,7 @@ "failed_job_command": "Darbo {job} komanda {command} nepavyko", "force_delete_user_warning": "ĮSPĖJIMAS: Šis veiksmas iš karto pašalins naudotoją ir visą jo informaciją. Šis žingsnis nesugrąžinamas ir failų nebus galima atkurti.", "forcing_refresh_library_files": "Priverstinai atnaujinami visi failai bilbiotekoje", + "image_format": "Formatas", "image_format_description": "WebP sukuria mažesnius failus nei JPEG, bet lėčiau juos apdoroja.", "image_prefer_embedded_preview": "Pageidautinai rodyti įterptą peržiūrą", "image_prefer_embedded_preview_setting_description": "", @@ -60,6 +61,7 @@ "image_preview_resolution_description": "Naudojama peržiūrint vieną nuotrauką ir mašininiam mokymui. Didesnė rezoliucija gali išsaugoti daugiau detalių, bet ilgiau užtrukti apdoroti ir sumažinti programos greitumą.", "image_quality": "Kokybė", "image_quality_description": "Vaizdo kokybė nuo 1 iki 100. Aukštesnė kokybė yra geresnė, tačiau sukuriami didesni failai. Ši parinktis turi įtakos peržiūros ir miniatiūrų vaizdams.", + "image_resolution": "Rezoliucija", "image_settings": "Nuotraukos nustatymai", "image_settings_description": "Keisti sugeneruotų nuotraukų kokybę ir rezoliuciją", "image_thumbnail_format": "Miniatūros formatas", @@ -119,7 +121,7 @@ "manage_concurrency": "Tvarkyti lygiagretumą", "manage_log_settings": "", "map_dark_style": "Tamsioji tema", - "map_enable_description": "", + "map_enable_description": "Įgalinti žemėlapio funkcijas", "map_gps_settings": "Žemėlapio ir GPS nustatymai", "map_gps_settings_description": "Tvarkyti žemėlapio ir GPS (atvirkštinio geokodavimo) nustatymus", "map_light_style": "Šviesioji tema", @@ -132,9 +134,13 @@ "map_style_description": "", "metadata_extraction_job": "Metaduomenų nuskaitymas", "metadata_extraction_job_description": "Kiekvieno bibliotekos elemento metaduomenų nuskaitymas, tokių kaip GPS koordinatės, veidai ar rezoliucija", + "metadata_settings": "Metaduomenų nustatymai", + "metadata_settings_description": "Tvarkyti metaduomenų nustatymus", + "migration_job": "Migracija", "migration_job_description": "", "no_paths_added": "Keliai nepridėti", "no_pattern_added": "Šablonas nepridėtas", + "note_cannot_be_changed_later": "PASTABA: Vėliau to pakeisti negalima!", "notification_email_from_address": "", "notification_email_from_address_description": "", "notification_email_host_description": "", @@ -148,7 +154,7 @@ "notification_email_test_email_failed": "Nepavyko išsiųsti bandomojo el. laiško, patikrinkite savo nustatymus", "notification_email_test_email_sent": "Bandomasis el. laiškas buvo išsiųstas į {email}. Patikrinkite savo pašto dėžutę.", "notification_email_username_description": "", - "notification_enable_email_notifications": "", + "notification_enable_email_notifications": "Įgalinti el. pašto pranešimus", "notification_settings": "Pranešimų nustatymai", "notification_settings_description": "Tvarkyti pranešimų nustatymus, įskaitant el. pašto", "oauth_auto_launch": "Paleisti automatiškai", @@ -179,15 +185,18 @@ "password_settings_description": "Tvarkyti prisijungimo slaptažodžiu nustatymus", "paths_validated_successfully": "Visi keliai patvirtinti sėkmingai", "refreshing_all_libraries": "Perkraunamos visos bibliotekos", + "registration": "Administratoriaus registracija", "registration_description": "Kadangi esate pirmasis šio sistemos naudotojas, jums bus priskirta administratoriaus rolė, ir būsite atsakingas už administracines užduotis ir papildomų naudotojų kūrimą.", "repair_all": "Pataisyti visus", "require_password_change_on_login": "Reikalauti, kad naudotojas pasikeistų slaptažodį po pirmojo prisijungimo", "reset_settings_to_default": "Atstatyti nustatymus į numatytuosius", + "reset_settings_to_recent_saved": "Nustatymų atstatymas į neseniai išsaugotus nustatymus", + "send_welcome_email": "Siųsti sveikinimo el. laišką", "server_external_domain_settings": "Išorinis domenas", "server_external_domain_settings_description": "", "server_settings": "Serverio nustatymai", "server_settings_description": "Tvarkyti serverio nustatymus", - "server_welcome_message": "", + "server_welcome_message": "Sveikinimo pranešimas", "server_welcome_message_description": "Žinutė, rodoma prisijungimo puslapyje.", "sidecar_job_description": "", "slideshow_duration_description": "", @@ -200,7 +209,7 @@ "storage_template_settings_description": "", "system_settings": "Sistemos nustatymai", "tag_cleanup_job": "Žymų išvalymas", - "theme_custom_css_settings": "", + "theme_custom_css_settings": "Individualizuotas CSS", "theme_custom_css_settings_description": "", "theme_settings": "Temos nustatymai", "theme_settings_description": "", @@ -227,9 +236,9 @@ "transcoding_constant_rate_factor": "", "transcoding_constant_rate_factor_description": "", "transcoding_disabled_description": "", - "transcoding_hardware_acceleration": "", + "transcoding_hardware_acceleration": "Techninės įrangos spartinimas", "transcoding_hardware_acceleration_description": "", - "transcoding_hardware_decoding": "", + "transcoding_hardware_decoding": "Aparatinis dekodavimas", "transcoding_hardware_decoding_setting_description": "", "transcoding_hevc_codec": "HEVC kodekas", "transcoding_max_b_frames": "", @@ -249,7 +258,7 @@ "transcoding_settings": "", "transcoding_settings_description": "", "transcoding_target_resolution": "", - "transcoding_target_resolution_description": "", + "transcoding_target_resolution_description": "Didesnės skiriamosios gebos gali išsaugoti daugiau detalių, tačiau jas koduoti užtrunka ilgiau, failų dydžiai yra didesni ir gali sumažėti programos jautrumas.", "transcoding_temporal_aq": "", "transcoding_temporal_aq_description": "", "transcoding_threads": "", @@ -263,7 +272,7 @@ "transcoding_two_pass_encoding_setting_description": "", "transcoding_video_codec": "Video kodekas", "transcoding_video_codec_description": "", - "trash_enabled_description": "", + "trash_enabled_description": "Įgalinti šiukšliadėžės funkcijas", "trash_number_of_days": "Dienų skaičius", "trash_number_of_days_description": "", "trash_settings": "Šiukšliadėžės nustatymai", @@ -1050,8 +1059,10 @@ "unknown_year": "Nežinomi metai", "unlink_oauth": "", "unlinked_oauth_account": "", + "unnamed_album_delete_confirmation": "Ar tikrai norite ištrinti šį albumą?", "unsaved_change": "Neišsaugoti pakeitimai", "unselect_all": "", + "unselect_all_duplicates": "Atžymėti visus dublikatus", "unstack": "Išgrupuoti", "unstacked_assets_count": "{count, plural, one {Išgrupuotas # elementas} few {Išgrupuoti # elementai} other {Išgrupuota # elementų}}", "up_next": "", @@ -1062,7 +1073,7 @@ "upload_status_duplicates": "Dublikatai", "upload_status_errors": "Klaidos", "upload_status_uploaded": "Įkelta", - "url": "", + "url": "URL", "usage": "", "user": "Naudotojas", "user_id": "Naudotojo ID", @@ -1070,19 +1081,19 @@ "username": "Naudotojo vardas", "users": "Naudotojai", "utilities": "Priemonės", - "validate": "", + "validate": "Validuoti", "variables": "Kintamieji", "version": "Versija", "version_announcement_closing": "Tavo draugas, Alex", "version_history": "Versijų istorija", "version_history_item": "Versija {version} įdiegta {date}", "video": "Vaizdo įrašas", - "video_hover_setting_description": "", + "video_hover_setting_description": "Atkurti vaizdo įrašo miniatiūrą, kai pelė užvedama ant elemento. Net ir išjungus, atkūrimą galima pradėti užvedus pelės žymeklį ant atkūrimo piktogramos.", "videos": "Video", "videos_count": "{count, plural, one {# vaizdo įrašas} few {# vaizdo įrašai} other {# vaizdo įrašų}}", "view": "Rodyti", "view_album": "Rodyti albumą", - "view_all": "", + "view_all": "Peržiūrėti viską", "view_all_users": "Peržiūrėti visus naudotojus", "view_links": "Rodyti nuorodas", "view_next_asset": "", @@ -1092,7 +1103,7 @@ "waiting": "Laukiama", "warning": "Įspėjimas", "week": "Savaitė", - "welcome_to_immich": "", + "welcome_to_immich": "Sveiki atvykę į Immich", "year": "Metai", "yes": "Taip", "zoom_image": "Priartinti vaizdą" diff --git a/i18n/nl.json b/i18n/nl.json index d437ae17f7361..43df47474a4e7 100644 --- a/i18n/nl.json +++ b/i18n/nl.json @@ -34,6 +34,11 @@ "authentication_settings_disable_all": "Weet je zeker dat je alle inlogmethoden wilt uitschakelen? Inloggen zal volledig worden uitgeschakeld.", "authentication_settings_reenable": "Gebruik een servercommando om opnieuw in te schakelen.", "background_task_job": "Achtergrondtaken", + "backup_database": "Backup Database", + "backup_database_enable_description": "Database back-ups activeren", + "backup_keep_last_amount": "Maximaal aantal back-ups om te bewaren", + "backup_settings": "Back-up instellingen", + "backup_settings_description": "Database back-up instellingen beheren", "check_all": "Controleer het logboek", "cleared_jobs": "Taken gewist voor: {job}", "config_set_by_file": "Instellingen worden momenteel beheerd door een configuratiebestand", @@ -43,6 +48,9 @@ "confirm_reprocess_all_faces": "Weet je zeker dat je alle gezichten opnieuw wilt verwerken? Hiermee worden ook alle mensen gewist.", "confirm_user_password_reset": "Weet u zeker dat je het wachtwoord van {user} wilt resetten?", "create_job": "Taak maken", + "cron_expression": "Cron expressie", + "cron_expression_description": "Stel de scaninterval in met het cron-formaat. Voor meer informatie kun je kijken naar bijvoorbeeld Crontab Guru", + "cron_expression_presets": "Cron-expressie presets", "crontab_guru": "Crontab Guru", "disable_login": "Inloggen uitschakelen", "disabled": "Uitgeschakeld", diff --git a/i18n/pl.json b/i18n/pl.json index 26b89008a740b..0629a89f358ad 100644 --- a/i18n/pl.json +++ b/i18n/pl.json @@ -34,6 +34,11 @@ "authentication_settings_disable_all": "Czy jesteś pewny, że chcesz wyłączyć wszystkie metody logowania? Logowanie będzie całkowicie wyłączone.", "authentication_settings_reenable": "Aby ponownie włączyć, użyj Polecenia serwera.", "background_task_job": "Zadania w Tle", + "backup_database": "Kopia zapasowa bazy danych", + "backup_database_enable_description": "Włącz kopię zapasową bazy danych", + "backup_keep_last_amount": "Ile poprzednich kopii zapasowych przechowywać", + "backup_settings": "Ustawienia kopii zapasowej", + "backup_settings_description": "Zarządzaj ustawieniami kopii zapasowej bazy dnaych", "check_all": "Zaznacz Wszystko", "cleared_jobs": "Usunięto zadania dla: {job}", "config_set_by_file": "Konfiguracja pochodzi z pliku konfiguracyjnego", @@ -43,6 +48,9 @@ "confirm_reprocess_all_faces": "Czy na pewno chcesz ponownie przetworzyć wszystkie twarze? Spowoduje to utratę nazwanych osób.", "confirm_user_password_reset": "Czy na pewno chcesz zresetować hasło użytkownika {user}?", "create_job": "Utwórz zadanie", + "cron_expression": "Wyrażenie Cron", + "cron_expression_description": "Ustaw intwerwał skanowania przy pomocy formatu Cron'a. Po więcej informacji na temat formatu Cron zobacz . Crontab Guru", + "cron_expression_presets": "Predefiniowane wyrażenia Cron'a", "crontab_guru": "Crontab Guru", "disable_login": "Wyłącz logowanie", "disabled": "Wyłączone", diff --git a/i18n/pt.json b/i18n/pt.json index dda003243e4b6..55ac6c31946c5 100644 --- a/i18n/pt.json +++ b/i18n/pt.json @@ -34,6 +34,11 @@ "authentication_settings_disable_all": "Tem a certeza que deseja desativar todos os métodos de início de sessão? O início de sessão será completamente desativado.", "authentication_settings_reenable": "Para reativar, use um Comando de servidor.", "background_task_job": "Tarefas em segundo plano", + "backup_database": "Cópia de Segurança da Base de Dados", + "backup_database_enable_description": "Ativar cópias de segurança da base de dados", + "backup_keep_last_amount": "Quantidade de cópias de segurança anteriores a manter", + "backup_settings": "Definições de Cópia de Segurança", + "backup_settings_description": "Gerir definições de cópia de segurança da base de dados", "check_all": "Selecionar Tudo", "cleared_jobs": "Eliminadas as tarefas de: {job}", "config_set_by_file": "A configuração está atualmente definida por um ficheiro de configuração", @@ -43,6 +48,9 @@ "confirm_reprocess_all_faces": "Tem a certeza de que deseja reprocessar todos os rostos? Isto também limpará os nomes das pessoas.", "confirm_user_password_reset": "Tem a certeza de que deseja redefinir a palavra-passe de {user}?", "create_job": "Criar tarefa", + "cron_expression": "Expressão Cron", + "cron_expression_description": "Definir o intervalo de análise utilizando o formato Cron. Para mais informações, por favor veja o Crontab Guru", + "cron_expression_presets": "Predefinições das expressões Cron", "crontab_guru": "Guru do Crontab", "disable_login": "Desativar inicio de sessão", "disabled": "", diff --git a/i18n/ru.json b/i18n/ru.json index fd4be156ebc0c..98e150a6b372e 100644 --- a/i18n/ru.json +++ b/i18n/ru.json @@ -34,6 +34,11 @@ "authentication_settings_disable_all": "Вы уверены, что хотите отключить все методы входа? Вход будет полностью отключен.", "authentication_settings_reenable": "Чтобы снова включить, используйте Команда Сервера.", "background_task_job": "Фоновые задачи", + "backup_database": "Резервное копирование базы данных", + "backup_database_enable_description": "Включить резервное копирование базы данных", + "backup_keep_last_amount": "Количество хранимых резервных копий", + "backup_settings": "Настройки резервного копирования", + "backup_settings_description": "Управление настройками резервного копирования базы данных", "check_all": "Проверить все", "cleared_jobs": "Очищены задачи для: {job}", "config_set_by_file": "Настроено с помощью файла конфигурации", @@ -43,6 +48,9 @@ "confirm_reprocess_all_faces": "Вы уверены, что хотите повторно определить все лица? Будут также удалены имена со всех лиц.", "confirm_user_password_reset": "Вы уверены, что хотите сбросить пароль пользователя {user}?", "create_job": "Создать задание", + "cron_expression": "Выражение cron", + "cron_expression_description": "Задайте интервал сканирований в формате cron. Для получения дополнительной информации, ознакомьтесь с Crontab Guru", + "cron_expression_presets": "Предустановки выражений cron", "crontab_guru": "Crontab Guru", "disable_login": "Отключить вход", "disabled": "Выключено", @@ -771,7 +779,7 @@ "folders": "Папки", "folders_feature_description": "Просмотр папок с фотографиями и видео в файловой системе", "force_re-scan_library_files": "Принудительное повторное сканирование всех файлов библиотеки", - "forward": "Переслать", + "forward": "Вперёд", "general": "Общие", "get_help": "Получить помощь", "getting_started": "Приступая к работе", diff --git a/i18n/sk.json b/i18n/sk.json index 975229b51da81..112c080835d16 100644 --- a/i18n/sk.json +++ b/i18n/sk.json @@ -38,6 +38,7 @@ "cleared_jobs": "Hotové úlohy pre: {job}", "config_set_by_file": "Konfigurácia je v súčasnosti nastavená konfiguračným súborom", "confirm_delete_library": "Naozaj chcete vymazať knižnicu {library}?", + "confirm_delete_library_assets": "Ste si isti, že chcete vymazať túto knižnicu? Tato operácia nenávratne odstráni {count, plural, one {# contained asset} other {all # contained assets}} súborov z Immich. Súbory sa budu ponechané na disku.", "confirm_email_below": "Pre potvrdenie zadajte \"{email}\" nižšie", "confirm_reprocess_all_faces": "Naozaj chcete spracovať všetky tváre znova? Tento proces vymaže pomenovaných ľudí.", "confirm_user_password_reset": "Naozaj chcete resetovať heslo pre {user}?", @@ -130,18 +131,21 @@ "machine_learning_settings": "Nastavenia strojového učenia", "machine_learning_settings_description": "Spravovať funkcie a nastavenia strojového učenia", "machine_learning_smart_search": "Inteligentné vyhľadávanie", - "machine_learning_smart_search_description": "", + "machine_learning_smart_search_description": "Významove vyhladavanie v obrázkoch pomocou CLIP vzorov", "machine_learning_smart_search_enabled": "Povoliť inteligentné vyhľadávanie", - "machine_learning_smart_search_enabled_description": "", + "machine_learning_smart_search_enabled_description": "Ak je vypnuté, obrázky nebudú spracované pre inteligentné vyhľadávanie.", "machine_learning_url_description": "URL adresa servera pre strojové učenie", + "manage_concurrency": "Správa súbežnosti", "manage_log_settings": "Spravovať nastavenia logovania", "map_dark_style": "Tmavý štýl", "map_enable_description": "Povoliť funkcie mapy", "map_gps_settings": "Nastavenia Mapy & GPS", + "map_gps_settings_description": "Sprava Mapovych a GPS (Reverzne Geokodovanie) Nastavení", + "map_implications": "Táto funkčnosť sa spolieha na externý servis spracovania mapových dlaždíc (tiles.immich.cloud)", "map_light_style": "Svetlý štýl", - "map_reverse_geocoding": "", + "map_reverse_geocoding": "Reverzné Geokódovanie", "map_reverse_geocoding_enable_description": "Povoliť reverzné geokódovanie", - "map_reverse_geocoding_settings": "", + "map_reverse_geocoding_settings": "Nastavenia reverzného geokódovania", "map_settings": "Mapa", "map_settings_description": "Spravovať nastavenia mapy", "map_style_description": "", @@ -152,12 +156,13 @@ "metadata_settings_description": "Spravovať nastavenia metadát", "migration_job": "Migrácia", "migration_job_description": "", + "note_unlimited_quota": "Poznámka: Použite 0 pre neobmedzený limit", "notification_email_from_address": "Z adresy", - "notification_email_from_address_description": "", - "notification_email_host_description": "", + "notification_email_from_address_description": "E-mailová adresa odosielateľa, príklad: \"Immich Photo Server \"", + "notification_email_host_description": "Adresa emailového serveru (príklad: smtp.immich.app)", "notification_email_ignore_certificate_errors": "Ignorovať chyby certifikátu", - "notification_email_ignore_certificate_errors_description": "", - "notification_email_password_description": "", + "notification_email_ignore_certificate_errors_description": "Ignorovať chyby pri overení TLS certifikátu (neodporúča sa)", + "notification_email_password_description": "Heslo pre komunikáciu s emailovým serverom", "notification_email_port_description": "Porty e-mailového servera (napr. 25, 465, alebo 587)", "notification_email_sent_test_email_button": "Odoslať testovací e-mail a uložiť", "notification_email_setting_description": "Nastavenie pre odosielanie e-mailových upozornení", @@ -168,11 +173,11 @@ "notification_enable_email_notifications": "Povoliť e-mailové upozornenia", "notification_settings": "Nastavenia upozornení", "notification_settings_description": "Spravovať nastavenia upozornení, vrátane emailu", - "oauth_auto_launch": "", - "oauth_auto_launch_description": "", - "oauth_auto_register": "", - "oauth_auto_register_description": "", - "oauth_button_text": "", + "oauth_auto_launch": "Automatické spustenie", + "oauth_auto_launch_description": "Automatické spustenie OAuth prihlásenia, pri otvorení prihlasovacej stránky", + "oauth_auto_register": "Automatická regristrácia", + "oauth_auto_register_description": "Automatické zaregistrovanie nového požívateľa pri prihlásení pomocou OAuth", + "oauth_button_text": "Text tlačítka", "oauth_client_id": "Client ID", "oauth_client_secret": "Client Secret", "oauth_enable_description": "Prihlásiť sa pomocou OAuth", @@ -183,32 +188,37 @@ "oauth_scope": "", "oauth_settings": "OAuth", "oauth_settings_description": "Spravovať nastavenia prihlásenia OAuth", + "oauth_settings_more_details": "Pre viac informácii o tejto funkcii, prejdite na docs.", "oauth_signing_algorithm": "", "oauth_storage_label_claim": "", "oauth_storage_label_claim_description": "", "oauth_storage_quota_claim": "", "oauth_storage_quota_claim_description": "", - "oauth_storage_quota_default": "", + "oauth_storage_quota_default": "Predvolený limit úložiska (GiB)", "oauth_storage_quota_default_description": "", "password_enable_description": "Prihlásiť sa pomocou emailu a hesla", "password_settings": "Prihlásenie cez heslo", "password_settings_description": "Spravovať nastavenia prihlásenia cez heslo", "refreshing_all_libraries": "Obnovujú sa všetky knižnice", "registration": "Registrácia administrátora", + "registration_description": "Keďže ste prvým používateľom v systéme, budú vám pridelené správcovské práva na vykonávanie všetkých úloh a vrátane tvorby nových používateľov.", "repair_all": "Opraviť Všetko", + "repair_matched_items": "Zhody {count, plural, one {# item} other {# items}}", + "repaired_items": "Opravených {count, plural, one {# item} other {# items}}", "require_password_change_on_login": "Vyžadovať od používateľa zmenu hesla pri prvom prihlásení", "reset_settings_to_default": "Obnoviť pôvodné nastavenia", + "reset_settings_to_recent_saved": "Obnoviť naposledy uložené nastavenia", "scanning_library": "Knižnica sa skenuje", "search_jobs": "Vyhľadať úlohy...", "send_welcome_email": "Odoslať uvítací e-mail", "server_external_domain_settings": "Externá doména", - "server_external_domain_settings_description": "", + "server_external_domain_settings_description": "Verejná doména pre zdieľané odkazy, vrátane http(s)://", "server_settings": "Nastavenia servera", "server_settings_description": "Spravovať nastavenia servera", "server_welcome_message": "Uvítacia správa", "server_welcome_message_description": "Správa, ktorá sa zobrazí na prihlasovacej stránke.", "sidecar_job_description": "", - "slideshow_duration_description": "", + "slideshow_duration_description": "Čas zobrazenia obrázku v sekundách", "smart_search_job_description": "", "storage_template_enable_description": "", "storage_template_hash_verification_enabled": "", diff --git a/i18n/sr_Cyrl.json b/i18n/sr_Cyrl.json index a14c5bbee4c05..6becd38278624 100644 --- a/i18n/sr_Cyrl.json +++ b/i18n/sr_Cyrl.json @@ -34,6 +34,11 @@ "authentication_settings_disable_all": "Да ли сте сигурни да желите да oneмогућите све методе пријављивања? Пријава ће бити потпуно oneмогућена.", "authentication_settings_reenable": "Да бисте поново омогућили, користите команду сервера.", "background_task_job": "Позадински задаци", + "backup_database": "Резервна копија базе података", + "backup_database_enable_description": "Омогућите резервне копије базе података", + "backup_keep_last_amount": "Количина претходних резервних копија за чување", + "backup_settings": "Подешавања резервне копије", + "backup_settings_description": "Управљајте поставкама резервне копије базе података", "check_all": "Провери све", "cleared_jobs": "Очишћени послови за {job}", "config_set_by_file": "Конфигурацију тренутно поставља конфигурациони фајл", @@ -43,6 +48,9 @@ "confirm_reprocess_all_faces": "Да ли сте сигурни да желите да поново обрадите сва лица? Ово ће такође обрисати именоване особе.", "confirm_user_password_reset": "Да ли сте сигурни да желите да ресетујете лозинку корисника {user}?", "create_job": "Креирајте посао", + "cron_expression": "Cron израз (expression)", + "cron_expression_description": "Подесите интервал скенирања користећи cron формат. За више информација погледајте нпр. Crontab Guru", + "cron_expression_presets": "Предефинисана подешавања Cron израза (expression)", "crontab_guru": "Guru servisnih zadataka", "disable_login": "oneмогући пријаву", "disabled": "", diff --git a/i18n/sr_Latn.json b/i18n/sr_Latn.json index f871cb12b0f6e..b13a9ccc73175 100644 --- a/i18n/sr_Latn.json +++ b/i18n/sr_Latn.json @@ -34,6 +34,11 @@ "authentication_settings_disable_all": "Da li ste sigurni da želite da onemogućite sve metode prijavljivanja? Prijava će biti potpuno onemogućena.", "authentication_settings_reenable": "Da biste ponovo omogućili, koristite komandu servera.", "background_task_job": "Pozadinski zadaci", + "backup_database": "Rezervna kopija baze podataka", + "backup_database_enable_description": "Omogućite rezervne kopije baze podataka", + "backup_keep_last_amount": "Količina prethodnih rezervnih kopija za čuvanje", + "backup_settings": "Podešavanja rezervne kopije", + "backup_settings_description": "Upravljajte postavkama rezervne kopije baze podataka", "check_all": "Proveri sve", "cleared_jobs": "Očišćeni poslovi za: {job}", "config_set_by_file": "Konfiguraciju trenutno postavlja konfiguracioni fajl", @@ -43,6 +48,9 @@ "confirm_reprocess_all_faces": "Da li ste sigurni da želite da ponovo obradite sva lica? Ovo će takođe obrisati imenovane osobe.", "confirm_user_password_reset": "Da li ste sigurni da želite da resetujete lozinku korisnika {user}?", "create_job": "Kreirajte posao", + "cron_expression": "Cron izraz (expression)", + "cron_expression_description": "Podesite interval skeniranja koristeći cron format. Za više informacija pogledajte npr. Crontab Guru", + "cron_expression_presets": "Predefinisana podešavanja Cron izraza (expression)", "crontab_guru": "Guru servisnih zadataka", "disable_login": "Onemogući prijavu", "disabled": "", diff --git a/i18n/sv.json b/i18n/sv.json index 804ff50b2e17b..aa91ec61e1a37 100644 --- a/i18n/sv.json +++ b/i18n/sv.json @@ -34,6 +34,9 @@ "authentication_settings_disable_all": "Är du säker på att du vill inaktivera alla inloggningsmetoder? Inloggning kommer att helt inaktiveras.", "authentication_settings_reenable": "För att återaktivera, använd Server Command.", "background_task_job": "Bakgrundsaktiviteter", + "backup_database": "Databassäkerhetskopia", + "backup_database_enable_description": "Slå på säkerhetskopia", + "backup_keep_last_amount": "Antal säkerhetskopior att behålla", "check_all": "Välj alla", "cleared_jobs": "Rensade jobben för:{job}", "config_set_by_file": "Konfigurationen är satt av en konfigurationsfil", @@ -43,6 +46,8 @@ "confirm_reprocess_all_faces": "Är du säker på att du vill återprocessa alla ansikten? Detta kommer också rensa namngivna personer.", "confirm_user_password_reset": "Är du säker på att du vill återställa {user}’s lösenord?", "create_job": "Skapa jobb", + "cron_expression": "Cron uttryck", + "cron_expression_description": "Sätt skanningsintervall genom att använda cron format. För mer information se Crontab Guru", "crontab_guru": "Crontab-guru", "disable_login": "Inaktivera inloggning", "disabled": "Inaktiverad", @@ -311,7 +316,7 @@ "transcoding_temporal_aq_description": "Gäller endast NVENC. Ökar kvaliteten på scener med hög detaljrikedom och låg rörelse. Kanske inte är kompatibel med äldre enheter.", "transcoding_threads": "Trådar", "transcoding_threads_description": "Högre värden leder till snabbare kodning, men lämnar mindre utrymme för servern att bearbeta andra uppgifter medan den är aktiv. Detta värde bör inte vara mer än antalet CPU-kärnor. Maximerar användningen om den är inställd på 0.", - "transcoding_tone_mapping": "", + "transcoding_tone_mapping": "Ton mappning", "transcoding_tone_mapping_description": "Försöker att bevara utseendet på HDR-videor när de konverteras till SDR. Varje algoritm gör olika avvägningar för färg, detaljer och ljusstyrka. Hable bevarar detaljer, Mobius bevarar färg och Reinhard bevarar ljusstyrkan.", "transcoding_tone_mapping_npl": "", "transcoding_tone_mapping_npl_description": "Färgerna kommer att justeras för att se normala ut för en visning av denna ljusstyrka. Kontraintuitivt ökar lägre värden videons ljusstyrka och vice versa eftersom det kompenserar för skärmens ljusstyrka. 0 ställer in detta värde automatiskt.", @@ -536,6 +541,7 @@ "direction": "Riktning", "disabled": "Inaktiverad", "disallow_edits": "Tillåt inte redigeringar", + "discord": "Discord", "discover": "Upptäck", "dismiss_all_errors": "Avvisa alla fel", "dismiss_error": "Avvisa fel", @@ -680,21 +686,24 @@ "unable_to_link_oauth_account": "Det gick inte att länka OAuth-kontot", "unable_to_load_album": "Det gick inte att ladda albumet", "unable_to_load_asset_activity": "", - "unable_to_load_items": "", - "unable_to_load_liked_status": "", + "unable_to_load_items": "Kunde inte ladda objekt", + "unable_to_load_liked_status": "kunde inte ladda gillade status", "unable_to_log_out_all_devices": "Det gick inte att logga ut alla enheter", "unable_to_log_out_device": "Det gick inte att logga ut enheten", "unable_to_login_with_oauth": "Det gick inte att logga in med OAuth", "unable_to_play_video": "Kunde inte spela upp video", - "unable_to_refresh_user": "", - "unable_to_remove_album_users": "", + "unable_to_reassign_assets_new_person": "Kunde inte tilldela objekt till en annan person", + "unable_to_refresh_user": "Kunde inte ladda om användaren", + "unable_to_remove_album_users": "Kunde inte ta bort personen från albumet", "unable_to_remove_api_key": "Det gick inte att ta bort API Keyet", + "unable_to_remove_assets_from_shared_link": "Kunde inte ta bort objekt från delade länkar", "unable_to_remove_comment": "", + "unable_to_remove_deleted_assets": "Kunde inte ta bort offline filer", "unable_to_remove_library": "Kunde inte ta bort bibliotek", "unable_to_remove_partner": "Kunde inte ta bort partner", "unable_to_remove_reaction": "Kunde inte ta bort reaktion", "unable_to_remove_user": "", - "unable_to_repair_items": "", + "unable_to_repair_items": "kunde inte reparera objekt", "unable_to_reset_password": "Kunde inte återställa lösenord", "unable_to_resolve_duplicate": "", "unable_to_restore_assets": "", diff --git a/i18n/tr.json b/i18n/tr.json index b2f0559ce89a3..93f7beddedb86 100644 --- a/i18n/tr.json +++ b/i18n/tr.json @@ -34,6 +34,11 @@ "authentication_settings_disable_all": "Tüm giriş yöntemlerini devre dışı bırakmak istediğinize emin misiniz? Giriş yapma fonksiyonu tamamen devre dışı bırakılacak.", "authentication_settings_reenable": "Yeniden aktif etmek için Sunucu Komutu'nu kullanın.", "background_task_job": "Arka Plan Görevleri", + "backup_database": "Yedek Veritabanı", + "backup_database_enable_description": "Veritabanı Yedeklerinş Etkinleştir", + "backup_keep_last_amount": "Önceki yedeklemeden saklanacak miktar", + "backup_settings": "Yedekleme Ayarları", + "backup_settings_description": "Veritabanı Yedekleme Ayarlarını Yönet", "check_all": "Hepsini Kontrol Et", "cleared_jobs": "{job} için işler temizlendi", "config_set_by_file": "Ayarlar şuanda config dosyası tarafından ayarlanmıştır", @@ -43,6 +48,9 @@ "confirm_reprocess_all_faces": "Tüm yüzleri tekrardan işlemek istediğinize emin misiniz? Bu işlem isimlendirilmiş insanları da silecek.", "confirm_user_password_reset": "{user} adlı kullanıcının şifresini sıfırlamak istediğinize emin misiniz?", "create_job": "Görev oluştur", + "cron_expression": "Cron İfadesi", + "cron_expression_description": "Cron formatını kullanarak tarama aralığını belirle. Daha fazla bilgi için örneğin Crontab Guru’ya bakın", + "cron_expression_presets": "Cron İfadesi Önayarları", "crontab_guru": "", "disable_login": "Girişi devre dışı bırak", "duplicate_detection_job_description": "Benzer fotoğrafları bulmak için makine öğrenmesini çalıştır. Bu işlem Akıllı Arama'ya bağlıdır", @@ -607,26 +615,42 @@ "cant_change_activity": "Etkinliği {etkinleştiremiyor, seçemiyor, doğru {devre dışı bırakamıyor} diğer durumda {etkinleştiremiyor}}", "cant_change_asset_favorite": "Varlığın favori durumunu değiştiremiyor", "cant_change_metadata_assets_count": "{count} varlığın metadatası (meta verisi) değiştirilemiyor", + "cant_get_faces": "Yüzler alınamadı", + "cant_get_number_of_comments": "Yorumların sayısı alınamadı", "cant_search_people": "Kişiler aranamıyor", "cant_search_places": "Mekanlar aranamıyor", "cleared_jobs": "İşler temizlendi: {job}", - "exclusion_pattern_already_exists": "", - "failed_job_command": "", + "error_adding_assets_to_album": "Albüme varlık ekleme hatası", + "error_adding_users_to_album": "Albüme kullanıcı ekleme hatası", + "error_deleting_shared_user": "Paylaşılan kullanıcı silme hatası", + "error_downloading": "{filename} indirme hatası", + "error_hiding_buy_button": "Satın alma butonu gizleme hatası", + "error_removing_assets_from_album": "Varlığı albümden silme hatası, daha fazla detay için konsolu kontrol et", + "error_selecting_all_assets": "Bütün varlıkları seçme hatası", + "exclusion_pattern_already_exists": "Bu dışlama modeli halihazırda mevcut.", + "failed_job_command": "{command} komutu iş: {job} için tamamlanamadı", "failed_to_create_album": "Albüm oluşturulamadı", "failed_to_create_shared_link": "Paylaşılan bağlantı oluşturulamadı", "failed_to_edit_shared_link": "Paylaşılan bağlantı düzenlenemedi", + "failed_to_get_people": "Kişiler alınamadı", + "failed_to_load_asset": "Varlık yüklenemedi", + "failed_to_load_assets": "Varlıklar yüklenemedi", + "failed_to_load_people": "Kişiler yüklenemedi", "failed_to_remove_product_key": "Ürün anahtarı kaldırılamadı", - "import_path_already_exists": "", + "failed_to_stack_assets": "Varlıklar yığınlanamadı", + "failed_to_unstack_assets": "Varıkların yığını kaldırılamadı", + "import_path_already_exists": "Bu içe aktarma yolu halihazırda mevcut.", "incorrect_email_or_password": "Yanlış e-posta veya şifre", - "paths_validation_failed": "", + "paths_validation_failed": "{paths, plural, one {# Yol} other {# Yollar}} doğrulanamadı", "profile_picture_transparent_pixels": "Profil resimleri şeffaf piksele sahip olamaz. Lütfen resme yakınlaştırın ve/veya resmi hareket ettirin.", - "quota_higher_than_disk_size": "", - "repair_unable_to_check_items": "", + "quota_higher_than_disk_size": "Disk boyutundan daha yüksek bir kota belirlediniz", + "repair_unable_to_check_items": "{count, select, one {Öğe} other {Öğeler}} kontrol edilemedi", "unable_to_add_album_users": "Kullanıcılar albüme eklenemiyor", + "unable_to_add_assets_to_shared_link": "Varlıklar paylaşılan bağlantıya eklenemiyor", "unable_to_add_comment": "Yorum eklenemiyor", - "unable_to_add_exclusion_pattern": "", - "unable_to_add_import_path": "", - "unable_to_add_partners": "", + "unable_to_add_exclusion_pattern": "Hariç tutma modeli eklenemiyor", + "unable_to_add_import_path": "İçe aktarma yolu eklenemiyor", + "unable_to_add_partners": "Ortaklar eklenemiyor", "unable_to_change_album_user_role": "", "unable_to_change_date": "Tarih değiştirilemiyor", "unable_to_change_location": "", diff --git a/i18n/uk.json b/i18n/uk.json index 39415765201bf..65d2850877033 100644 --- a/i18n/uk.json +++ b/i18n/uk.json @@ -34,6 +34,11 @@ "authentication_settings_disable_all": "Ви впевнені, що хочете вимкнути всі методи входу? Вхід буде повністю вимкнений.", "authentication_settings_reenable": "Для повторного ввімкнення використовуйте Команду сервера.", "background_task_job": "Фонові Завдання", + "backup_database": "Резервна копія бази даних", + "backup_database_enable_description": "Увімкнути резервне копіювання бази даних", + "backup_keep_last_amount": "Кількість резервних копій для зберігання", + "backup_settings": "Налаштування резервного копіювання", + "backup_settings_description": "Керування налаштуваннями резервного копіювання бази даних", "check_all": "Перевірити все", "cleared_jobs": "Очищені завдання для: {job}", "config_set_by_file": "Налаштовано за допомогою конфіг-файлу", @@ -43,6 +48,9 @@ "confirm_reprocess_all_faces": "Ви впевнені, що хочете повторно визначити всі обличчя? Це також призведе до видалення імен з усіх облич.", "confirm_user_password_reset": "Ви впевнені, що хочете скинути пароль користувача {user}?", "create_job": "Створити завдання", + "cron_expression": "Cron вираз", + "cron_expression_description": "Встановіть інтервал сканування, використовуючи формат cron. Для отримання додаткової інформації зверніться до напр. Crontab Guru", + "cron_expression_presets": "Попередні налаштування cron виразів", "crontab_guru": "", "disable_login": "Вимкнути вхід", "disabled": "", diff --git a/i18n/zh_Hant.json b/i18n/zh_Hant.json index 8b1e1e5e15aeb..0adf6dc2c609a 100644 --- a/i18n/zh_Hant.json +++ b/i18n/zh_Hant.json @@ -1,7 +1,7 @@ { "about": "關於", - "account": "賬號", - "account_settings": "賬號設定", + "account": "帳號", + "account_settings": "帳號設定", "acknowledge": "收到", "action": "操作", "actions": "操作", @@ -34,6 +34,11 @@ "authentication_settings_disable_all": "確定要停用所有登入方式嗎?這樣會完全無法登入。", "authentication_settings_reenable": "如需重新啟用,請使用 伺服器指令。", "background_task_job": "背景任務", + "backup_database": "備份資料庫", + "backup_database_enable_description": "啟用資料庫備份", + "backup_keep_last_amount": "保留先前備份的數量", + "backup_settings": "備份設定", + "backup_settings_description": "管理資料庫備份設定", "check_all": "全選", "cleared_jobs": "已為「{job}」清除作業", "config_set_by_file": "目前的設定已透過配置文檔調整", @@ -43,6 +48,9 @@ "confirm_reprocess_all_faces": "確定要重新處理所有臉孔嗎?這會清除已命名的人物。", "confirm_user_password_reset": "您確定要重設 {user} 的密碼嗎?", "create_job": "建立作業", + "cron_expression": "Cron 運算式", + "cron_expression_description": "以 Cron 格式設定掃描時段。詳細資訊請參閱 Crontab Guru", + "cron_expression_presets": "現成的 Cron 運算式", "crontab_guru": "", "disable_login": "停用登入", "disabled": "已禁用", diff --git a/i18n/zh_SIMPLIFIED.json b/i18n/zh_SIMPLIFIED.json index c2e1a873500e7..bb062d9792e08 100644 --- a/i18n/zh_SIMPLIFIED.json +++ b/i18n/zh_SIMPLIFIED.json @@ -28,12 +28,17 @@ "added_to_favorites_count": "添加{count, number}项到收藏", "admin": { "add_exclusion_pattern_description": "添加排除规则。支持使用 *、** 和 ? 通配符。比如要忽略任何名为 “Raw” 的文件夹中的所有文件,请使用 “**/Raw/**”;要忽略所有以 “.tif” 结尾的文件,请使用 “**/*.tif”;要忽略绝对路径,请使用 “/path/to/ignore/**”。", - "asset_offline_description": "此外部库项目已无法从磁盘中找到,并已移至回收站。如果文件已在库中移动,请检查时间线中是否有新的对应项目。要恢复此项目,请确保 Immich 可以访问以下文件路径并执行扫描库任务。", + "asset_offline_description": "磁盘上已找不到此外部库项目,已将其移至回收站。如果文件已在库中移动,请检查时间线中是否有对应项目。要恢复此项目,请确保 Immich 可以访问以下文件路径并执行“扫描库”任务。", "authentication_settings": "认证设置", "authentication_settings_description": "管理密码、OAuth 和其它认证设置", "authentication_settings_disable_all": "确定要禁用所有的登录方式?该操作将完全禁止登录。", "authentication_settings_reenable": "如需再次启用,使用 服务器指令。", "background_task_job": "后台任务", + "backup_database": "备份数据库", + "backup_database_enable_description": "启用数据库备份", + "backup_keep_last_amount": "要保留的先前备份数量", + "backup_settings": "备份设置", + "backup_settings_description": "管理数据库备份设置", "check_all": "检查全部", "cleared_jobs": "已清理任务:{job}", "config_set_by_file": "当前配置已通过配置文件设置", @@ -41,8 +46,11 @@ "confirm_delete_library_assets": "确定要删除该图库吗?这将删除所有包含在Immich中的{count, plural, one {#个项目} other {#个项目}},且无法撤销。但文件仍将保留在磁盘中。", "confirm_email_below": "输入“{email}”来确认", "confirm_reprocess_all_faces": "确定要对全部照片重新进行面部识别吗?这将同时清除所有已命名人物。", - "confirm_user_password_reset": "确定要重置用户{user}的密码吗?", + "confirm_user_password_reset": "确定要重置用户“{user}”的密码吗?", "create_job": "创建任务", + "cron_expression": "Cron表达式", + "cron_expression_description": "使用 cron 格式设置扫描间隔。更多详细信息请参阅 Crontab Guru", + "cron_expression_presets": "Cron 表达式预设", "crontab_guru": "Crontab Guru", "disable_login": "禁用登录", "disabled": "已禁用", @@ -51,10 +59,10 @@ "external_library_created_at": "外部图库(创建于{date})", "external_library_management": "外部图库管理", "face_detection": "人脸检测", - "face_detection_description": "使用机器学习检测项目中的人脸(视频只检测其缩略图中的人脸)。选择“刷新”项将会(重新)处理所有项目。选择“重置”还会清除所有当前面部数据。选择“缺失”项将尚未处理的项目进行排队处理。人脸检测完成后,检测到的人脸将排队进行面部识别,将它们分组到现有的或新的人物中。", - "facial_recognition_job_description": "将检测到的人脸按照人物分组。这一步将在人脸检测完成后执行。选择“重置”项将会(重新)分组所有面孔。选择“缺失”项将尚未分配的人脸置于队列中。", + "face_detection_description": "使用机器学习检测项目中的人脸(视频只检测其缩略图中的人脸)。选择“刷新”将会(重新)处理所有项目。选择“重置”还会清除所有当前面部数据。选择“缺失”将尚未处理的项目进行排队处理。人脸检测完成后,检测到的人脸将排队进行面部识别,将它们分组到现有的或新的人物中。", + "facial_recognition_job_description": "将检测到的人脸按照人物分组。这一步将在人脸检测完成后执行。选择“重置”将会(重新)分组所有面孔。选择“缺失”将尚未分配的人脸置于队列中。", "failed_job_command": "{command}命令执行失败的任务:{job}", - "force_delete_user_warning": "警告:这将立即移除用户以及所有项目。该操作无法撤销且文件无法恢复。", + "force_delete_user_warning": "警告:这将立即移除用户以及其所有项目。该操作无法撤销且文件无法恢复。", "forcing_refresh_library_files": "强制刷新所有图库文件", "image_format": "格式", "image_format_description": "WebP 文件比 JPEG 文件小,但编码速度较慢。", @@ -164,7 +172,7 @@ "note_cannot_be_changed_later": "注意:此项一旦设定,以后无法更改!", "note_unlimited_quota": "提示:输入0表示无限制", "notification_email_from_address": "发件人地址", - "notification_email_from_address_description": "发件人邮箱地址,例如:“张三 <12345@qq.com>”", + "notification_email_from_address_description": "发件人邮箱,例如:“张三 <12345@qq.com>”", "notification_email_host_description": "服务器地址(例如:smtp.qq.com)", "notification_email_ignore_certificate_errors": "忽略证书错误", "notification_email_ignore_certificate_errors_description": "忽略TLS证书验证错误(不建议)", @@ -196,7 +204,7 @@ "oauth_scope": "范围", "oauth_settings": "OAuth", "oauth_settings_description": "管理OAuth登录设置", - "oauth_settings_more_details": "关于本功能的更多详细信息,请查看相关文档。", + "oauth_settings_more_details": "关于此功能的更多详细信息,请查看相关文档。", "oauth_signing_algorithm": "签名算法", "oauth_storage_label_claim": "存储标签声明", "oauth_storage_label_claim_description": "自动将用户的存储标签设置为此项的值。", @@ -265,7 +273,7 @@ "transcoding_acceleration_api": "加速器API", "transcoding_acceleration_api_description": "这个API将与您的设备交互,以加速转码过程。此设置为“尽力而为”——如果转码失败,将回到软件转码。VP9是否工作取决于您的硬件配置。", "transcoding_acceleration_nvenc": "NVENC(需要 NVIDIA GPU)", - "transcoding_acceleration_qsv": "快速同步(需要Intel 7代及以上的 CPU)", + "transcoding_acceleration_qsv": "Quick Sync(需要Intel 7代及以上的 CPU)", "transcoding_acceleration_rkmpp": "RKMPP(仅适用于 Rockchip SOCs)", "transcoding_acceleration_vaapi": "VAAPI", "transcoding_accepted_audio_codecs": "支持的音频编解码器", @@ -326,8 +334,8 @@ "trash_number_of_days_description": "回收站中项目永久删除的天数", "trash_settings": "回收站设置", "trash_settings_description": "管理回收站设置", - "untracked_files": "未被追踪的文件", - "untracked_files_description": "这些文件未被系统追踪。 这可能是移动失败、上传中断或因bug而落下", + "untracked_files": "未被扫描的文件", + "untracked_files_description": "这些文件未被系统扫描。 这可能是移动失败、上传中断或因bug而落下", "user_cleanup_job": "清理用户", "user_delete_delay": "{user}的账户及项目将在{delay, plural, one {#天} other {#天}}后自动永久删除。", "user_delete_delay_settings": "延期删除", @@ -341,7 +349,7 @@ "user_restore_scheduled_removal": "恢复用户 - 计划于{date, date, long}删除", "user_settings": "用户设置", "user_settings_description": "管理用户设置", - "user_successfully_removed": "用户{email}已被成功删除。", + "user_successfully_removed": "用户“{email}”已被成功删除。", "version_check_enabled_description": "启用版本检测", "version_check_implications": "版本检查功能依赖于与 github.com 的定期通信", "version_check_settings": "版本检查", @@ -363,16 +371,16 @@ "album_delete_confirmation_description": "如果该相册是共享的,其他用户将无法再访问它。", "album_info_updated": "相册信息已更新", "album_leave": "退出相册?", - "album_leave_confirmation": "确定要退出相册{album}吗?", + "album_leave_confirmation": "确定要退出相册“{album}”吗?", "album_name": "相册名称", "album_options": "相册设置", "album_remove_user": "移除用户?", - "album_remove_user_confirmation": "你确定要移除{user}吗?", + "album_remove_user_confirmation": "你确定要移除“{user}”吗?", "album_share_no_users": "看起来您已与所有用户共享了此相册,或者您根本没有任何用户可共享。", "album_updated": "相册已更新", "album_updated_setting_description": "当共享相册有新项目时接收邮件通知", - "album_user_left": "离开{album}", - "album_user_removed": "已移除{user}", + "album_user_left": "离开“{album}”", + "album_user_removed": "已移除“{user}”", "album_with_link_access": "拥有此链接的任何人均可查看本相册中的照片和人物。", "albums": "相册", "albums_count": "{count, plural, one {{count, number} 个相册} other {{count, number} 个相册}}", @@ -386,7 +394,7 @@ "allow_public_user_to_upload": "允许所有用户上传", "anti_clockwise": "逆时针", "api_key": "API 密钥", - "api_key_description": "该应用密钥只会展示一次。请确保在关闭窗口前复制下来。", + "api_key_description": "该应用密钥只会显示一次。请确保在关闭窗口前复制下来。", "api_key_empty": "API Key的名称不可以为空", "api_keys": "API 密钥", "app_settings": "应用设置", @@ -402,7 +410,7 @@ "asset_added_to_album": "已添加至相册", "asset_adding_to_album": "正在添加至相册...", "asset_description_updated": "项目描述已更新", - "asset_filename_is_offline": "项目{filename}已离线", + "asset_filename_is_offline": "项目“{filename}”已离线", "asset_has_unassigned_faces": "项目中有未分配的人脸", "asset_hashing": "哈希校验中...", "asset_offline": "项目离线", @@ -558,7 +566,7 @@ "download_settings": "下载", "download_settings_description": "管理项目下载相关设置", "downloading": "下载中", - "downloading_asset_filename": "下载项目{filename}", + "downloading_asset_filename": "下载项目“{filename}”", "drop_files_to_upload": "拖放文件以上传", "duplicates": "重复项", "duplicates_description": "审查每组疑似重复项并标记哪些是重复的(如果有的话)", @@ -603,7 +611,7 @@ "end_date": "结束日期", "error": "错误", "error_loading_image": "加载图片时出错", - "error_title": "错误 - 出了点问题", + "error_title": "错误 - 好像出了问题", "errors": { "cannot_navigate_next_asset": "无法导航到下一个项目", "cannot_navigate_previous_asset": "无法导航到上一个项目", @@ -761,7 +769,7 @@ "features": "功能", "features_setting_description": "管理App功能", "file_name": "文件名", - "file_name_or_extension": "文件名或扩展名", + "file_name_or_extension": "文件名", "filename": "文件名", "files": "", "filetype": "文件类型", @@ -821,7 +829,7 @@ "interval": { "day_at_onepm": "每天下午1点", "hours": "每 {hours, plural, one {小时} other {{hours, number} 小时}}", - "night_at_midnight": "每晚24点", + "night_at_midnight": "每晚0点", "night_at_twoam": "每晚凌晨2点" }, "invite_people": "邀请人员", @@ -1155,7 +1163,7 @@ "search": "搜索", "search_albums": "搜索相册", "search_by_context": "搜索内容", - "search_by_filename": "通过文件名或扩展名搜索", + "search_by_filename": "通过文件名搜索", "search_by_filename_example": "如 IMG_1234.JPG 或 PNG", "search_camera_make": "搜索相机品牌...", "search_camera_model": "搜索相机型号...", From f1b8a9374f208b65f9c3e634c24cbec7fe2c9302 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 6 Nov 2024 16:17:29 +0000 Subject: [PATCH 16/21] chore: version v1.120.0 --- cli/package-lock.json | 6 +++--- cli/package.json | 2 +- docs/static/archived-versions.json | 4 ++++ e2e/package-lock.json | 8 ++++---- e2e/package.json | 2 +- machine-learning/pyproject.toml | 2 +- mobile/android/fastlane/Fastfile | 4 ++-- mobile/ios/fastlane/Fastfile | 2 +- mobile/openapi/README.md | 2 +- mobile/pubspec.yaml | 2 +- open-api/immich-openapi-specs.json | 2 +- open-api/typescript-sdk/package-lock.json | 4 ++-- open-api/typescript-sdk/package.json | 2 +- open-api/typescript-sdk/src/fetch-client.ts | 2 +- server/package-lock.json | 4 ++-- server/package.json | 2 +- web/package-lock.json | 8 ++++---- web/package.json | 2 +- 18 files changed, 32 insertions(+), 28 deletions(-) diff --git a/cli/package-lock.json b/cli/package-lock.json index 66211c21dd648..4f8b28168d100 100644 --- a/cli/package-lock.json +++ b/cli/package-lock.json @@ -1,12 +1,12 @@ { "name": "@immich/cli", - "version": "2.2.28", + "version": "2.2.29", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@immich/cli", - "version": "2.2.28", + "version": "2.2.29", "license": "GNU Affero General Public License version 3", "dependencies": { "fast-glob": "^3.3.2", @@ -52,7 +52,7 @@ }, "../open-api/typescript-sdk": { "name": "@immich/sdk", - "version": "1.119.1", + "version": "1.120.0", "dev": true, "license": "GNU Affero General Public License version 3", "dependencies": { diff --git a/cli/package.json b/cli/package.json index 2a4fb7f5b8955..ab7db104f659d 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "@immich/cli", - "version": "2.2.28", + "version": "2.2.29", "description": "Command Line Interface (CLI) for Immich", "type": "module", "exports": "./dist/index.js", diff --git a/docs/static/archived-versions.json b/docs/static/archived-versions.json index ac1594e81aaa5..86570d9ce3581 100644 --- a/docs/static/archived-versions.json +++ b/docs/static/archived-versions.json @@ -1,4 +1,8 @@ [ + { + "label": "v1.120.0", + "url": "https://v1.120.0.archive.immich.app" + }, { "label": "v1.119.1", "url": "https://v1.119.1.archive.immich.app" diff --git a/e2e/package-lock.json b/e2e/package-lock.json index 5abf21cb0b4ab..eb17fe1e1afc6 100644 --- a/e2e/package-lock.json +++ b/e2e/package-lock.json @@ -1,12 +1,12 @@ { "name": "immich-e2e", - "version": "1.119.1", + "version": "1.120.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "immich-e2e", - "version": "1.119.1", + "version": "1.120.0", "license": "GNU Affero General Public License version 3", "devDependencies": { "@eslint/eslintrc": "^3.1.0", @@ -45,7 +45,7 @@ }, "../cli": { "name": "@immich/cli", - "version": "2.2.28", + "version": "2.2.29", "dev": true, "license": "GNU Affero General Public License version 3", "dependencies": { @@ -92,7 +92,7 @@ }, "../open-api/typescript-sdk": { "name": "@immich/sdk", - "version": "1.119.1", + "version": "1.120.0", "dev": true, "license": "GNU Affero General Public License version 3", "dependencies": { diff --git a/e2e/package.json b/e2e/package.json index 5fed58b2d03cb..f2afa1f00d7be 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -1,6 +1,6 @@ { "name": "immich-e2e", - "version": "1.119.1", + "version": "1.120.0", "description": "", "main": "index.js", "type": "module", diff --git a/machine-learning/pyproject.toml b/machine-learning/pyproject.toml index 4a7f7d4d6ab53..4286b9e5d4e36 100644 --- a/machine-learning/pyproject.toml +++ b/machine-learning/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "machine-learning" -version = "1.119.1" +version = "1.120.0" description = "" authors = ["Hau Tran "] readme = "README.md" diff --git a/mobile/android/fastlane/Fastfile b/mobile/android/fastlane/Fastfile index 04400658b59da..1477ca2575ba4 100644 --- a/mobile/android/fastlane/Fastfile +++ b/mobile/android/fastlane/Fastfile @@ -35,8 +35,8 @@ platform :android do task: 'bundle', build_type: 'Release', properties: { - "android.injected.version.code" => 164, - "android.injected.version.name" => "1.119.1", + "android.injected.version.code" => 165, + "android.injected.version.name" => "1.120.0", } ) upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab') diff --git a/mobile/ios/fastlane/Fastfile b/mobile/ios/fastlane/Fastfile index 77dc24e006069..70308e97e11a4 100644 --- a/mobile/ios/fastlane/Fastfile +++ b/mobile/ios/fastlane/Fastfile @@ -19,7 +19,7 @@ platform :ios do desc "iOS Release" lane :release do increment_version_number( - version_number: "1.119.1" + version_number: "1.120.0" ) increment_build_number( build_number: latest_testflight_build_number + 1, diff --git a/mobile/openapi/README.md b/mobile/openapi/README.md index 4cdb08ce9988a..0c52b4b683af2 100644 --- a/mobile/openapi/README.md +++ b/mobile/openapi/README.md @@ -3,7 +3,7 @@ Immich API This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: -- API version: 1.119.1 +- API version: 1.120.0 - Generator version: 7.8.0 - Build package: org.openapitools.codegen.languages.DartClientCodegen diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index 454c5bfe93790..41b364e77adbb 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -2,7 +2,7 @@ name: immich_mobile description: Immich - selfhosted backup media file on mobile phone publish_to: 'none' -version: 1.119.1+164 +version: 1.120.0+165 environment: sdk: '>=3.3.0 <4.0.0' diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index 8465b6bb40e65..1b6f8acf76147 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -7385,7 +7385,7 @@ "info": { "title": "Immich", "description": "Immich API", - "version": "1.119.1", + "version": "1.120.0", "contact": {} }, "tags": [], diff --git a/open-api/typescript-sdk/package-lock.json b/open-api/typescript-sdk/package-lock.json index 3155c7d245713..10d4b1078a8ea 100644 --- a/open-api/typescript-sdk/package-lock.json +++ b/open-api/typescript-sdk/package-lock.json @@ -1,12 +1,12 @@ { "name": "@immich/sdk", - "version": "1.119.1", + "version": "1.120.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@immich/sdk", - "version": "1.119.1", + "version": "1.120.0", "license": "GNU Affero General Public License version 3", "dependencies": { "@oazapfts/runtime": "^1.0.2" diff --git a/open-api/typescript-sdk/package.json b/open-api/typescript-sdk/package.json index 21cc5ff75cad7..aadc1bc8b69aa 100644 --- a/open-api/typescript-sdk/package.json +++ b/open-api/typescript-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@immich/sdk", - "version": "1.119.1", + "version": "1.120.0", "description": "Auto-generated TypeScript SDK for the Immich API", "type": "module", "main": "./build/index.js", diff --git a/open-api/typescript-sdk/src/fetch-client.ts b/open-api/typescript-sdk/src/fetch-client.ts index 6a66906f31d6b..1d032f799c7a7 100644 --- a/open-api/typescript-sdk/src/fetch-client.ts +++ b/open-api/typescript-sdk/src/fetch-client.ts @@ -1,6 +1,6 @@ /** * Immich - * 1.119.1 + * 1.120.0 * DO NOT MODIFY - This file has been generated using oazapfts. * See https://www.npmjs.com/package/oazapfts */ diff --git a/server/package-lock.json b/server/package-lock.json index ec6c53b07255b..4771d6c2561f9 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1,12 +1,12 @@ { "name": "immich", - "version": "1.119.1", + "version": "1.120.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "immich", - "version": "1.119.1", + "version": "1.120.0", "license": "GNU Affero General Public License version 3", "dependencies": { "@nestjs/bullmq": "^10.0.1", diff --git a/server/package.json b/server/package.json index 91eee75a755f7..6c716b13f36a5 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "immich", - "version": "1.119.1", + "version": "1.120.0", "description": "", "author": "", "private": true, diff --git a/web/package-lock.json b/web/package-lock.json index f2185f7bba682..d8eb0a791b795 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,12 +1,12 @@ { "name": "immich-web", - "version": "1.119.1", + "version": "1.120.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "immich-web", - "version": "1.119.1", + "version": "1.120.0", "license": "GNU Affero General Public License version 3", "dependencies": { "@formatjs/icu-messageformat-parser": "^2.7.8", @@ -74,13 +74,13 @@ }, "../open-api/typescript-sdk": { "name": "@immich/sdk", - "version": "1.119.1", + "version": "1.120.0", "license": "GNU Affero General Public License version 3", "dependencies": { "@oazapfts/runtime": "^1.0.2" }, "devDependencies": { - "@types/node": "^22.8.5", + "@types/node": "^22.8.6", "typescript": "^5.3.3" } }, diff --git a/web/package.json b/web/package.json index b67f1cf4713e9..6df4894102953 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "immich-web", - "version": "1.119.1", + "version": "1.120.0", "license": "GNU Affero General Public License version 3", "scripts": { "dev": "vite dev --host 0.0.0.0 --port 3000", From b29e4ec39f2b792bd5e5f8e88bf088576910bbd7 Mon Sep 17 00:00:00 2001 From: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com> Date: Wed, 6 Nov 2024 20:45:52 +0100 Subject: [PATCH 17/21] fix: docker link (#13956) --- docs/docs/install/requirements.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/install/requirements.md b/docs/docs/install/requirements.md index b96705203aa8f..f3f4d2c23dcb4 100644 --- a/docs/docs/install/requirements.md +++ b/docs/docs/install/requirements.md @@ -8,7 +8,7 @@ Hardware and software requirements for Immich: ## Software -- [Docker](https://docs.docker.com/get-docker/) +- [Docker](https://docs.docker.com/engine/install/) - [Docker Compose](https://docs.docker.com/compose/install/) :::note From 3b5f5ec57a06a6d681c5312b606ba755245d23dc Mon Sep 17 00:00:00 2001 From: slamp Date: Wed, 6 Nov 2024 20:49:23 +0100 Subject: [PATCH 18/21] docs: improve custom-locations wording to be easier to read (#13849) * Improve wording to make it easier to read custom-locations.md It's only grammatical change * Update docs/docs/guides/custom-locations.md Co-authored-by: bo0tzz * Update custom-locations.md Revert to 'because of' and remove 'hard drive' --------- Co-authored-by: bo0tzz --- docs/docs/guides/custom-locations.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/docs/docs/guides/custom-locations.md b/docs/docs/guides/custom-locations.md index b364cccf837d2..6afb47f8ac252 100644 --- a/docs/docs/guides/custom-locations.md +++ b/docs/docs/guides/custom-locations.md @@ -1,15 +1,15 @@ # Files Custom Locations -This guide explains storing generated and raw files with docker's volume mount in different locations. +This guide explains how to store generated and raw files with docker's volume mount in different locations. :::caution Backup It is important to remember to update the backup settings after following the guide to back up the new backup paths if using automatic backup tools, especially `profile/`. ::: -In our `.env` file, we will define variables that will help us in the future when we want to move to a more advanced server in the future +In our `.env` file, we will define variables that will help us in the future when we want to move to a more advanced server ```diff title=".env" -# You can find documentation for all the supported env variables [here](/docs/install/environment-variables) +# You can find documentation for all the supported environment variables [here](/docs/install/environment-variables) # Custom location where your uploaded, thumbnails, and transcoded video files are stored - UPLOAD_LOCATION=./library @@ -20,7 +20,7 @@ In our `.env` file, we will define variables that will help us in the future whe ... ``` -After defining the locations for these files, we will edit the `docker-compose.yml` file accordingly and add the new variables to the `immich-server` container. +After defining the locations of these files, we will edit the `docker-compose.yml` file accordingly and add the new variables to the `immich-server` container. ```diff title="docker-compose.yml" services: @@ -41,12 +41,11 @@ docker compose up -d :::note Because of the underlying properties of docker bind mounts, it is not recommended to mount the `upload/` and `library/` folders as separate bind mounts if they are on the same device. -For this reason, we mount the HDD or network storage to `/usr/src/app/upload` and then mount the folders we want quick access to below this folder. +For this reason, we mount the HDD or the network storage (NAS) to `/usr/src/app/upload` and then mount the folders we want to access under that folder. -The `thumbs/` folder contains both the small thumbnails shown in the timeline, and the larger previews shown when clicking into an image. These cannot be split up. +The `thumbs/` folder contains both the small thumbnails displayed in the timeline and the larger previews shown when clicking into an image. These cannot be separated. -The storage metrics of the Immich server will track the storage available at `UPLOAD_LOCATION`, -so the administrator should setup some kind of monitoring to make sure the SSD does not run out of space. The `profile/` folder is much smaller, typically less than 1 MB. +The storage metrics of the Immich server will track available storage at `UPLOAD_LOCATION`, so the administrator must set up some sort of monitoring to ensure the storage does not run out of space. The `profile/` folder is much smaller, usually less than 1 MB. ::: Thanks to [Jrasm91](https://github.com/immich-app/immich/discussions/2110#discussioncomment-5477767) for writing the guide. From 8d8becd0f7478cd83c5528ccb0333dd411195feb Mon Sep 17 00:00:00 2001 From: Thariq Shanavas Date: Wed, 6 Nov 2024 14:09:53 -0700 Subject: [PATCH 19/21] docs: Added a note about avoiding redundant database backups (#13958) * Add note about built-in backups * npm run format:fix --- docs/docs/guides/template-backup-script.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/docs/guides/template-backup-script.md b/docs/docs/guides/template-backup-script.md index a0cd890a49745..dd0b94ebb13a0 100644 --- a/docs/docs/guides/template-backup-script.md +++ b/docs/docs/guides/template-backup-script.md @@ -6,6 +6,15 @@ This script assumes you have a second hard drive connected to your server for on The database is saved to your Immich upload folder in the `database-backup` subdirectory. The database is then backed up and versioned with your assets by Borg. This ensures that the database backup is in sync with your assets in every snapshot. +:::info +This script makes backups of your database along with your photo/video library. This is redundant with the [automatic database backup tool](https://immich.app/docs/administration/backup-and-restore#automatic-database-backups) built into Immich. Using this script to backup your database has two advantages over the built-in backup tool: + +- This script uses storage more efficiently by versioning your backups instead of making multiple copies. +- The database backups are performed at the same time as the library backup, ensuring that the backups of your database and the library are always in sync. + +If you are using this script, it is therefore safe to turn off the built-in automatic database backups from your admin panel to save storage space. +::: + ### Prerequisites - Borg needs to be installed on your server as well as the remote machine. You can find instructions to install Borg [here](https://borgbackup.readthedocs.io/en/latest/installation.html). From ebf06dc12eb30ad41ff50c5e50ca6ee0cbd445c8 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 6 Nov 2024 15:14:11 -0600 Subject: [PATCH 20/21] fix(server): cannot render email template (#13957) --- server/package-lock.json | 165 +++++++++++------- server/package.json | 2 +- .../notification.repository.spec.ts | 74 ++++++++ 3 files changed, 174 insertions(+), 67 deletions(-) create mode 100644 server/src/repositories/notification.repository.spec.ts diff --git a/server/package-lock.json b/server/package-lock.json index 4771d6c2561f9..7586c1f045e49 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -23,7 +23,7 @@ "@opentelemetry/context-async-hooks": "^1.24.0", "@opentelemetry/exporter-prometheus": "^0.54.0", "@opentelemetry/sdk-node": "^0.54.0", - "@react-email/components": "^0.0.26", + "@react-email/components": "^0.0.25", "@socket.io/redis-adapter": "^8.3.0", "archiver": "^7.0.0", "async-lock": "^1.4.0", @@ -2643,7 +2643,8 @@ "node_modules/@one-ini/wasm": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", - "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==" + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", + "license": "MIT" }, "node_modules/@opentelemetry/api": { "version": "1.8.0", @@ -3966,9 +3967,10 @@ } }, "node_modules/@react-email/button": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/@react-email/button/-/button-0.0.18.tgz", - "integrity": "sha512-uNUnpeDzz1o9HAky47JSTsUN/Ih0A3Az165AAOgAy8XOVzQJPrltUBRzHkScSVJTwRqKLASkie1yZbtNGIcRdA==", + "version": "0.0.17", + "resolved": "https://registry.npmjs.org/@react-email/button/-/button-0.0.17.tgz", + "integrity": "sha512-ioHdsk+BpGS/PqjU6JS7tUrVy9yvbUx92Z+Cem2+MbYp55oEwQ9VHf7u4f5NoM0gdhfKSehBwRdYlHt/frEMcg==", + "license": "MIT", "engines": { "node": ">=18.0.0" }, @@ -4013,12 +4015,13 @@ } }, "node_modules/@react-email/components": { - "version": "0.0.26", - "resolved": "https://registry.npmjs.org/@react-email/components/-/components-0.0.26.tgz", - "integrity": "sha512-FqxCGnQiI4zztEBAXPfjovIQ9e1l7NJNMgE8hSaH7slWySFn/PpPRQFYpxyCFNr9DqPVHtKYtpo8xvUYx2LdTg==", + "version": "0.0.25", + "resolved": "https://registry.npmjs.org/@react-email/components/-/components-0.0.25.tgz", + "integrity": "sha512-lnfVVrThEcET5NPoeaXvrz9UxtWpGRcut2a07dLbyKgNbP7vj/cXTI5TuHtanCvhCddFpMDnElNRghDOfPzwUg==", + "license": "MIT", "dependencies": { "@react-email/body": "0.0.10", - "@react-email/button": "0.0.18", + "@react-email/button": "0.0.17", "@react-email/code-block": "0.0.9", "@react-email/code-inline": "0.0.4", "@react-email/column": "0.0.12", @@ -4029,13 +4032,13 @@ "@react-email/hr": "0.0.10", "@react-email/html": "0.0.10", "@react-email/img": "0.0.10", - "@react-email/link": "0.0.11", + "@react-email/link": "0.0.10", "@react-email/markdown": "0.0.12", "@react-email/preview": "0.0.11", - "@react-email/render": "1.0.2", - "@react-email/row": "0.0.11", - "@react-email/section": "0.0.15", - "@react-email/tailwind": "1.0.0", + "@react-email/render": "1.0.1", + "@react-email/row": "0.0.10", + "@react-email/section": "0.0.14", + "@react-email/tailwind": "0.1.0", "@react-email/text": "0.0.10" }, "engines": { @@ -4120,9 +4123,10 @@ } }, "node_modules/@react-email/link": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@react-email/link/-/link-0.0.11.tgz", - "integrity": "sha512-o1/BgPn2Fi+bN4Nh+P64t4tulaOyPhkBNSpNmiYL1Ar+ilw8q0BmUAqM+lvHy8Qr/4K7BjkgFoc4GoYkoEjOig==", + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/@react-email/link/-/link-0.0.10.tgz", + "integrity": "sha512-tva3wvAWSR10lMJa9fVA09yRn7pbEki0ZZpHE6GD1jKbFhmzt38VgLO9B797/prqoDZdAr4rVK7LJFcdPx3GwA==", + "license": "MIT", "engines": { "node": ">=18.0.0" }, @@ -4156,9 +4160,10 @@ } }, "node_modules/@react-email/render": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@react-email/render/-/render-1.0.2.tgz", - "integrity": "sha512-q82eBd39TepzA/xjlm8szqJlrQk/gh7mgtxXMGlJ4dcdx89go1m9YBDpZY98SFy+2r2KAOd5A1mxvUbsPwoATg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@react-email/render/-/render-1.0.1.tgz", + "integrity": "sha512-W3gTrcmLOVYnG80QuUp22ReIT/xfLsVJ+n7ghSlG2BITB8evNABn1AO2rGQoXuK84zKtDAlxCdm3hRyIpZdGSA==", + "license": "MIT", "dependencies": { "html-to-text": "9.0.5", "js-beautify": "^1.14.11", @@ -4173,9 +4178,10 @@ } }, "node_modules/@react-email/row": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@react-email/row/-/row-0.0.11.tgz", - "integrity": "sha512-ra09h7BMoGa14ds3vh7KVuj1N3astTstEC1YbMdCiHcx/nxylglNaT7qJXU74ZTzyHiGabyiNuyabTS+HLoMCA==", + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/@react-email/row/-/row-0.0.10.tgz", + "integrity": "sha512-jPyEhG3gsLX+Eb9U+A30fh0gK6hXJwF4ghJ+ZtFQtlKAKqHX+eCpWlqB3Xschd/ARJLod8WAswg0FB+JD9d0/A==", + "license": "MIT", "engines": { "node": ">=18.0.0" }, @@ -4184,9 +4190,10 @@ } }, "node_modules/@react-email/section": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/@react-email/section/-/section-0.0.15.tgz", - "integrity": "sha512-xfM3Qy5eU7fbkwvktlTeQgad7uo+1Z7YVh1aowSZaRBvKbkEXgoH/XssRYQmQL8ZrZGXbEJMujwtf4fsQL6vrg==", + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/@react-email/section/-/section-0.0.14.tgz", + "integrity": "sha512-+fYWLb4tPU1A/+GE5J1+SEMA7/wR3V30lQ+OR9t2kAJqNrARDbMx0bLnYnR1QL5TiFRz0pCF05SQUobk6gHEDQ==", + "license": "MIT", "engines": { "node": ">=18.0.0" }, @@ -4195,9 +4202,10 @@ } }, "node_modules/@react-email/tailwind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@react-email/tailwind/-/tailwind-1.0.0.tgz", - "integrity": "sha512-LV0SflR0aI5Sjxyp8upyPL8Ctwj+7aqwTgCDO9yZuOI6KpXbBGaYz8bSofe8oaVc/BmymZ5O3+/7FjQexbW+Yg==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@react-email/tailwind/-/tailwind-0.1.0.tgz", + "integrity": "sha512-qysVUEY+M3SKUvu35XDpzn7yokhqFOT3tPU6Mj/pgc62TL5tQFj6msEbBtwoKs2qO3WZvai0DIHdLhaOxBQSow==", + "license": "MIT", "engines": { "node": ">=18.0.0" }, @@ -4468,6 +4476,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz", "integrity": "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==", + "license": "MIT", "dependencies": { "domhandler": "^5.0.3", "selderee": "^0.11.0" @@ -7059,6 +7068,7 @@ "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "license": "MIT", "dependencies": { "ini": "^1.3.4", "proto-list": "~1.2.1" @@ -7553,6 +7563,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -7571,12 +7582,14 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -7591,6 +7604,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -7620,6 +7634,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", + "license": "MIT", "dependencies": { "@one-ini/wasm": "0.1.1", "commander": "^10.0.0", @@ -7637,6 +7652,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -7645,6 +7661,7 @@ "version": "10.0.1", "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", "engines": { "node": ">=14" } @@ -7653,6 +7670,7 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -7740,6 +7758,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -9072,6 +9091,7 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz", "integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==", + "license": "MIT", "dependencies": { "@selderee/plugin-htmlparser2": "^0.11.0", "deepmerge": "^4.3.1", @@ -9094,6 +9114,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -9239,7 +9260,8 @@ "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" }, "node_modules/inquirer": { "version": "8.2.6", @@ -9537,6 +9559,7 @@ "version": "1.15.1", "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.1.tgz", "integrity": "sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==", + "license": "MIT", "dependencies": { "config-chain": "^1.1.13", "editorconfig": "^1.0.4", @@ -9557,14 +9580,16 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/js-beautify/node_modules/nopt": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", - "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "license": "ISC", "dependencies": { "abbrev": "^2.0.0" }, @@ -9579,6 +9604,7 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "license": "MIT", "engines": { "node": ">=14" } @@ -9722,6 +9748,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz", "integrity": "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==", + "license": "MIT", "funding": { "url": "https://ko-fi.com/killymxi" } @@ -10873,6 +10900,7 @@ "version": "0.12.1", "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz", "integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==", + "license": "MIT", "dependencies": { "leac": "^0.6.0", "peberminta": "^0.9.0" @@ -10995,6 +11023,7 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz", "integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==", + "license": "MIT", "funding": { "url": "https://ko-fi.com/killymxi" } @@ -11455,7 +11484,8 @@ "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "license": "ISC" }, "node_modules/protobufjs": { "version": "7.4.0", @@ -12118,6 +12148,7 @@ "version": "0.3.4", "resolved": "https://registry.npmjs.org/react-promise-suspense/-/react-promise-suspense-0.3.4.tgz", "integrity": "sha512-I42jl7L3Ze6kZaq+7zXWSunBa3b1on5yfvUW6Eo/3fFOj6dZ5Bqmcd264nJbTK/gn1HjjILAjSwnZbV4RpSaNQ==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^2.0.1" } @@ -12125,7 +12156,8 @@ "node_modules/react-promise-suspense/node_modules/fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==" + "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==", + "license": "MIT" }, "node_modules/read-cache": { "version": "1.0.0", @@ -12765,6 +12797,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz", "integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==", + "license": "MIT", "dependencies": { "parseley": "^0.12.0" }, @@ -17450,9 +17483,9 @@ "requires": {} }, "@react-email/button": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/@react-email/button/-/button-0.0.18.tgz", - "integrity": "sha512-uNUnpeDzz1o9HAky47JSTsUN/Ih0A3Az165AAOgAy8XOVzQJPrltUBRzHkScSVJTwRqKLASkie1yZbtNGIcRdA==", + "version": "0.0.17", + "resolved": "https://registry.npmjs.org/@react-email/button/-/button-0.0.17.tgz", + "integrity": "sha512-ioHdsk+BpGS/PqjU6JS7tUrVy9yvbUx92Z+Cem2+MbYp55oEwQ9VHf7u4f5NoM0gdhfKSehBwRdYlHt/frEMcg==", "requires": {} }, "@react-email/code-block": { @@ -17476,12 +17509,12 @@ "requires": {} }, "@react-email/components": { - "version": "0.0.26", - "resolved": "https://registry.npmjs.org/@react-email/components/-/components-0.0.26.tgz", - "integrity": "sha512-FqxCGnQiI4zztEBAXPfjovIQ9e1l7NJNMgE8hSaH7slWySFn/PpPRQFYpxyCFNr9DqPVHtKYtpo8xvUYx2LdTg==", + "version": "0.0.25", + "resolved": "https://registry.npmjs.org/@react-email/components/-/components-0.0.25.tgz", + "integrity": "sha512-lnfVVrThEcET5NPoeaXvrz9UxtWpGRcut2a07dLbyKgNbP7vj/cXTI5TuHtanCvhCddFpMDnElNRghDOfPzwUg==", "requires": { "@react-email/body": "0.0.10", - "@react-email/button": "0.0.18", + "@react-email/button": "0.0.17", "@react-email/code-block": "0.0.9", "@react-email/code-inline": "0.0.4", "@react-email/column": "0.0.12", @@ -17492,13 +17525,13 @@ "@react-email/hr": "0.0.10", "@react-email/html": "0.0.10", "@react-email/img": "0.0.10", - "@react-email/link": "0.0.11", + "@react-email/link": "0.0.10", "@react-email/markdown": "0.0.12", "@react-email/preview": "0.0.11", - "@react-email/render": "1.0.2", - "@react-email/row": "0.0.11", - "@react-email/section": "0.0.15", - "@react-email/tailwind": "1.0.0", + "@react-email/render": "1.0.1", + "@react-email/row": "0.0.10", + "@react-email/section": "0.0.14", + "@react-email/tailwind": "0.1.0", "@react-email/text": "0.0.10" } }, @@ -17545,9 +17578,9 @@ "requires": {} }, "@react-email/link": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@react-email/link/-/link-0.0.11.tgz", - "integrity": "sha512-o1/BgPn2Fi+bN4Nh+P64t4tulaOyPhkBNSpNmiYL1Ar+ilw8q0BmUAqM+lvHy8Qr/4K7BjkgFoc4GoYkoEjOig==", + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/@react-email/link/-/link-0.0.10.tgz", + "integrity": "sha512-tva3wvAWSR10lMJa9fVA09yRn7pbEki0ZZpHE6GD1jKbFhmzt38VgLO9B797/prqoDZdAr4rVK7LJFcdPx3GwA==", "requires": {} }, "@react-email/markdown": { @@ -17565,9 +17598,9 @@ "requires": {} }, "@react-email/render": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@react-email/render/-/render-1.0.2.tgz", - "integrity": "sha512-q82eBd39TepzA/xjlm8szqJlrQk/gh7mgtxXMGlJ4dcdx89go1m9YBDpZY98SFy+2r2KAOd5A1mxvUbsPwoATg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@react-email/render/-/render-1.0.1.tgz", + "integrity": "sha512-W3gTrcmLOVYnG80QuUp22ReIT/xfLsVJ+n7ghSlG2BITB8evNABn1AO2rGQoXuK84zKtDAlxCdm3hRyIpZdGSA==", "requires": { "html-to-text": "9.0.5", "js-beautify": "^1.14.11", @@ -17575,21 +17608,21 @@ } }, "@react-email/row": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@react-email/row/-/row-0.0.11.tgz", - "integrity": "sha512-ra09h7BMoGa14ds3vh7KVuj1N3astTstEC1YbMdCiHcx/nxylglNaT7qJXU74ZTzyHiGabyiNuyabTS+HLoMCA==", + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/@react-email/row/-/row-0.0.10.tgz", + "integrity": "sha512-jPyEhG3gsLX+Eb9U+A30fh0gK6hXJwF4ghJ+ZtFQtlKAKqHX+eCpWlqB3Xschd/ARJLod8WAswg0FB+JD9d0/A==", "requires": {} }, "@react-email/section": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/@react-email/section/-/section-0.0.15.tgz", - "integrity": "sha512-xfM3Qy5eU7fbkwvktlTeQgad7uo+1Z7YVh1aowSZaRBvKbkEXgoH/XssRYQmQL8ZrZGXbEJMujwtf4fsQL6vrg==", + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/@react-email/section/-/section-0.0.14.tgz", + "integrity": "sha512-+fYWLb4tPU1A/+GE5J1+SEMA7/wR3V30lQ+OR9t2kAJqNrARDbMx0bLnYnR1QL5TiFRz0pCF05SQUobk6gHEDQ==", "requires": {} }, "@react-email/tailwind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@react-email/tailwind/-/tailwind-1.0.0.tgz", - "integrity": "sha512-LV0SflR0aI5Sjxyp8upyPL8Ctwj+7aqwTgCDO9yZuOI6KpXbBGaYz8bSofe8oaVc/BmymZ5O3+/7FjQexbW+Yg==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@react-email/tailwind/-/tailwind-0.1.0.tgz", + "integrity": "sha512-qysVUEY+M3SKUvu35XDpzn7yokhqFOT3tPU6Mj/pgc62TL5tQFj6msEbBtwoKs2qO3WZvai0DIHdLhaOxBQSow==", "requires": {} }, "@react-email/text": { @@ -21551,9 +21584,9 @@ "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==" }, "nopt": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", - "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", "requires": { "abbrev": "^2.0.0" } diff --git a/server/package.json b/server/package.json index 6c716b13f36a5..1f4b65fa57a64 100644 --- a/server/package.json +++ b/server/package.json @@ -48,7 +48,7 @@ "@opentelemetry/context-async-hooks": "^1.24.0", "@opentelemetry/exporter-prometheus": "^0.54.0", "@opentelemetry/sdk-node": "^0.54.0", - "@react-email/components": "^0.0.26", + "@react-email/components": "^0.0.25", "@socket.io/redis-adapter": "^8.3.0", "archiver": "^7.0.0", "async-lock": "^1.4.0", diff --git a/server/src/repositories/notification.repository.spec.ts b/server/src/repositories/notification.repository.spec.ts new file mode 100644 index 0000000000000..983be21d2b905 --- /dev/null +++ b/server/src/repositories/notification.repository.spec.ts @@ -0,0 +1,74 @@ +import { ILoggerRepository } from 'src/interfaces/logger.interface'; +import { EmailRenderRequest, EmailTemplate } from 'src/interfaces/notification.interface'; +import { NotificationRepository } from 'src/repositories/notification.repository'; +import { Mocked } from 'vitest'; + +describe(NotificationRepository.name, () => { + let sut: NotificationRepository; + let loggerMock: Mocked; + + beforeEach(() => { + loggerMock = { + setContext: vitest.fn(), + debug: vitest.fn(), + } as unknown as Mocked; + + sut = new NotificationRepository(loggerMock); + }); + + describe('renderEmail', () => { + it('should render the email correctly for TEST_EMAIL template', async () => { + const request: EmailRenderRequest = { + template: EmailTemplate.TEST_EMAIL, + data: { displayName: 'Alen Turing', baseUrl: 'http://localhost' }, + }; + + const result = await sut.renderEmail(request); + + expect(result.html).toContain(' { + const request: EmailRenderRequest = { + template: EmailTemplate.WELCOME, + data: { displayName: 'Alen Turing', username: 'turing', baseUrl: 'http://localhost' }, + }; + + const result = await sut.renderEmail(request); + + expect(result.html).toContain(' { + const request: EmailRenderRequest = { + template: EmailTemplate.ALBUM_INVITE, + data: { + albumName: 'Vacation', + albumId: '123', + senderName: 'John', + recipientName: 'Jane', + baseUrl: 'http://localhost', + }, + }; + + const result = await sut.renderEmail(request); + + expect(result.html).toContain(' { + const request: EmailRenderRequest = { + template: EmailTemplate.ALBUM_UPDATE, + data: { albumName: 'Holiday', albumId: '123', recipientName: 'Jane', baseUrl: 'http://localhost' }, + }; + + const result = await sut.renderEmail(request); + + expect(result.html).toContain(' Date: Wed, 6 Nov 2024 22:18:55 +0100 Subject: [PATCH 21/21] chore: tidy up backup-and-restore.md (#13961) --- .../docs/administration/backup-and-restore.md | 49 +------------------ 1 file changed, 2 insertions(+), 47 deletions(-) diff --git a/docs/docs/administration/backup-and-restore.md b/docs/docs/administration/backup-and-restore.md index 70f393e6e10fa..8e09d6339c261 100644 --- a/docs/docs/administration/backup-and-restore.md +++ b/docs/docs/administration/backup-and-restore.md @@ -15,8 +15,6 @@ Immich saves [file paths in the database](https://github.com/immich-app/immich/d Refer to the official [postgres documentation](https://www.postgresql.org/docs/current/backup.html) for details about backing up and restoring a postgres database. ::: -The recommended way to backup and restore the Immich database is to use the `pg_dumpall` command. When restoring, you need to delete the `DB_DATA_LOCATION` folder (if it exists) to reset the database. - :::caution It is not recommended to directly backup the `DB_DATA_LOCATION` folder. Doing so while the database is running can lead to a corrupted backup that cannot be restored. ::: @@ -79,53 +77,10 @@ docker compose up -d # Start remainder of Immich apps -Note that for the database restore to proceed properly, it requires a completely fresh install (i.e. the Immich server has never run since creating the Docker containers). If the Immich app has run, Postgres conflicts may be encountered upon database restoration (relation already exists, violated foreign key constraints, multiple primary keys, etc.). +Note that for the database restore to proceed properly, it requires a completely fresh install (i.e. the Immich server has never run since creating the Docker containers). If the Immich app has run, Postgres conflicts may be encountered upon database restoration (relation already exists, violated foreign key constraints, multiple primary keys, etc.), in which case you need to delete the `DB_DATA_LOCATION` folder to reset the database. :::tip -Some deployment methods make it difficult to start the database without also starting the server or microservices. In these cases, you may set the environmental variable `DB_SKIP_MIGRATIONS=true` before starting the services. This will prevent the server from running migrations that interfere with the restore process. Note that both the server and microservices must have this variable set to prevent the migrations from running. Be sure to remove this variable and restart the services after the database is restored. -::: - -### Automatic Database Backups - -The database dumps can also be automated (using [this image](https://github.com/prodrigestivill/docker-postgres-backup-local)) by editing the docker compose file to match the following: - -```yaml -services: - ... - backup: - container_name: immich_db_dumper - image: prodrigestivill/postgres-backup-local:14 - restart: always - env_file: - - .env - environment: - POSTGRES_HOST: database - POSTGRES_CLUSTER: 'TRUE' - POSTGRES_USER: ${DB_USERNAME} - POSTGRES_PASSWORD: ${DB_PASSWORD} - POSTGRES_DB: ${DB_DATABASE_NAME} - SCHEDULE: "@daily" - POSTGRES_EXTRA_OPTS: '--clean --if-exists' - BACKUP_DIR: /db_dumps - volumes: - - ./db_dumps:/db_dumps - depends_on: - - database -``` - -Then you can restore with the same command but pointed at the latest dump. - -```bash title='Automated Restore' -# Be sure to check the username if you changed it from default -gunzip < db_dumps/last/immich-latest.sql.gz \ -| sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" \ -| docker exec -i immich_postgres psql --username=postgres -``` - -:::note -If you see the error `ERROR: type "earth" does not exist`, or you have problems with Reverse Geocoding after a restore, add the following `sed` fragment to your restore command. - -Example: `gunzip < "/path/to/backup/dump.sql.gz" | sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" | docker exec -i immich_postgres psql --username=postgres` +Some deployment methods make it difficult to start the database without also starting the server. In these cases, you may set the environment variable `DB_SKIP_MIGRATIONS=true` before starting the services. This will prevent the server from running migrations that interfere with the restore process. Be sure to remove this variable and restart the services after the database is restored. ::: ## Filesystem